2017-09-29 2 views
3

ContexteComment bien trier sur le volet problématique commits de l'arbre git noyau linux

J'ai un appareil qui ne fonctionne pas correctement à partir de Linux Kernel version 4.12 et plus. Je veux savoir quel commit spécifique a causé le problème. Mon flux actuel est:

  1. Voir le noyau linux commit journal à here
  2. En cliquant sur l'individu commettre, copiez le commit id
  3. Run git checkout <commit id>
  4. Reconfigurer le noyau make menuconfig et recompiler make -j32
  5. Installer le noyau sur mon appareil, vérifiez que la question est encore persistent
  6. Dans le cas contraire, réduire la plage des commits, retournez t o étape 1

Le problème

Alors que je traversais ce processus fastidieux, je trouve que la version du noyau compilé était différent (Vous pouvez également voir ce par la lecture de la Makefile). Cependant, je ne vois pas les changements de version via le journal de validation du noyau Linux. En fait, après avoir essayé git diff <first commit id> <second commit id>, où le second commettras id est 1 commettras derrière le premier selon le noyau linux journal de livraison à l'étape 1, on a constaté qu'il ya des changements qui ne se reflète pas sur le site.

Question

Pourquoi cela va-t-il? Comment puis-je trouver correctement le commit spécifique qui a causé un problème sur mon appareil?

+0

Vous est probablement essayer de jouer avec * fusion * engager alors que la validation en question est * non-fusion *. Ci-dessous les points de réponse dans la bonne direction. – 0andriy

Répondre

3

Afin de trouver correctement sur qui allouent a causé un problème sur votre appareil, vous devez utiliser git bisect. Il automatise le flux de travail que vous avez fait manuellement. Voir la documentation here.

Cette commande utilise un algorithme de recherche binaire pour trouver quel commit dans l'historique de votre projet a introduit un bogue. Vous pouvez l'utiliser en parler d'abord un « mauvais » commit qui est connu pour contenir le virus, et un « bon » commettez qui est connu pour être avant que le bug a été introduit. Alors connard bisect choisit un commettras entre ces deux points de terminaison et vous demande si sélectionné commit est « bon » ou « mauvais ». Il continue à réduire la plage jusqu'à ce qu'il trouve le commit exact qui a introduit le changement.

+0

Merci, je vais essayer ça. Mais il ne répond toujours pas à la question de savoir pourquoi le journal de validation du site ne fonctionne pas de la même manière avec 'git diff'. J'ai identifié manuellement l'ID de validation qui a causé le problème, mais je suis toujours incapable de trouver quel commit a produit/modifié le fichier problématique à l'origine du bogue. –