2010-07-23 12 views
2

J'utilise une version modifiée par le fournisseur Linux qui est basée sur une version 2.6.14. * (Plus spécifiquement que celle, je ne sais laquelle) du noyau.Comment puis-je comparer deux versions de logiciels, dont l'une est dans un repo GIT?

Je souhaite rediriger le port vers les modifications du noyau du fournisseur, mais il est tout d'abord logique de voir quelles modifications ont été apportées. J'ai cloné le git linux:

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-git 

et je voudrais maintenant faire une diff, et peut-être créer une branche avec le code fournisseur. Suggestions?

Répondre

2

Je vous suggère d'abord la création d'une branche à partir de la commettras qui est certainement plus ancienne que celle de la version du fournisseur est basé sur.

Ensuite, vous devriez vérifier à cette nouvelle branche, et synchroniser la copie de travail avec vos sources de fournisseur. Pour ce faire, vous devez supprimer tous les fichiers source de la copie de travail (veillez à ignorer les fichiers .git et .gitignore!), Puis copiez votre code ici. Vous pouvez essayer d'utiliser rsync pour cela. Par la suite, vous pouvez utiliser git diff pour voir les modifications apportées.

Validez ces modifications dans la nouvelle branche avec git commit.

Passez maintenant à la branche principale (git checkout master) et rebaser votre nouvelle branche (git rebase new-branch). Les changements qui étaient dans les deux branches (ils apparaissent puisque vous ne connaissez pas la validation exacte, sur laquelle le noyau du fournisseur est basé) seront automatiquement fusionnés, et ne causeront aucun conflit. D'autres conflits doivent être résolus. Après une réinitialisation réussie, votre validation HEAD contiendra les modifications apportées par votre fournisseur. J'espère que cela fonctionnera pour une version aussi ancienne que celle-ci.

+0

Cela ressemble beaucoup plus à ce que je veux aussi. Je vais essayer cela, et vous faire savoir si sa "la" réponse. Merci. – Jamie

+0

D'accord, il y a 100 conflits, mais c'est exactement ce que je demandais, merci. – Jamie

1
  1. Créer une branche avec git branch
  2. Copiez tous les fichiers modifiés sur la copie de travail.
  3. Exécutez git status et git diff pour voir tous les changements.
+0

Cela sonne comme je comparerai un noyau 2.6.14 modifié avec la dernière version du noyau (vers 2.6.35.x). J'aimerais vraiment voir les différences entre le noyau du vendeur et le noyau 2.6.14.x d'origine. Est-ce que cela fait ça? – Jamie

+0

@Jamie: Donc, utilisez 'git diff ' où '' est un nom SHA1 ou un tag d'un noyau 2.6.14.x que vous voulez comparer. – Cascabel

1

Je suppose que vous avez une archive * .tar.gz du noyau de votre fournisseur. Je vais également supposer que votre fournisseur a démarré à partir de la version 2.6.14. Si vous pensez que votre fournisseur a démarré à partir de une autre version, par exemple la version 2.6.14.11, vous devez cloner le référentiel linux-2.6-stable.git à la place, car il suit tous les noyaux v2.6.x.y.

Voici ce que je suggère.

  1. git clone .../torvalds/linux-2.6.git (comme vous l'avez déjà fait)
  2. cd linux-2.6

  3. git checkout -b vendor-2.6.14 v2.6.14

    cela, vous obtiendrez une nouvelle branche, vendor-2.6.14 que nous allons travailler. Le point de branchement est défini sur la version 2.6.14 de Linus.

  4. rm * -rf (supprimer tous les fichiers)

  5. tar xzf ../vendor-sources.tar.gz (extrait des fichiers d'éditeur)

  6. git add --all (fichiers de scène ajoutés, modifiés et supprimés)

  7. git commit -m'vendor changes'

À ce stade, vous peut exécuter des choses comme:

  • git diff --stat
  • git diff
  • git show, etc.

Si les changements sont faibles, vous pouvez prendre ce patch et l'appliquer à une autre ligne de base du noyau, disent v2.6.15.

  1. git checkout -b vendor-2.6.15 v2.6.15 (créer une branche temporaire hors v2.6.15)
  2. git cherry-pick vendor-2.6.14 (prendre la première, et engager seulement, de .14 et l'appliquer ici)

À ce stade, vous avez votre changements de fournisseur dans git, de sorte que vous pouvez faire n'importe quoi avec elle. Vous pouvez même diviser le changement de fournisseur, s'il est énorme, en smaller patches. Le ciel est la limite.

-Bart

+0

Merci pour l'étape-par-étape. Je reviendrai sur cette question la semaine prochaine, si cela s'avère moins douloureux, vous obtiendrez la réponse. – Jamie