web-dev-qa-db-fra.com

Comment comparer deux référentiels git?

J'ai deux exportations différentes de notre référentiel CVS dans git. Ils divergent à un moment donné, et je cherche à savoir pourquoi. La ligne de développement remonte à plusieurs années et compte des dizaines de milliers de commits.

Au début de la ligne de développement, les ID SHA1 de chaque commit sont identiques, ce qui signifie que git-cvsimport est très cohérent avec ce qu'il fait lorsqu'il lit les résultats de cvsps et de imports.

Mais entre le premier commit et hier, les identifiants SHA1 commencent à diverger. J'aimerais savoir où cela se trouve en comparant une liste d'ID de commit de chaque référentiel et en cherchant ce qui manque. Existe-t-il de bons outils ou techniques pour le faire?

28
skiphoppy

Pourquoi ne pas simplement cataloguer le journal de chaque dépôt dans son propre fichier et le comparer? La différence la plus proche du bas du fichier est l'endroit où ils ont commencé à diverger ...

18
Jason Punyon

Étant donné que les deux référentiels git ont la même origine, vous pouvez les extraire dans le même référentiel actif.

$ git remote add cvsimport-a git://.../cvsimport-a.git
$ git remote add cvsimport-b git://.../cvsimport-b.git
$ git remote update
$ git log cvsimport-a/master..cvsimport-b/master  # in B, not in A?
$ git log cvsimport-b/master..cvsimport-a/master  # in A, not in B?
33
ephemient

Dans un de vos dépôts, procédez comme suit:

$ git remote add other-repo git://.../other-repo.git
$ git remote update
$ git log other-repo/master...master
  # or maybe:
$ gitk master... other-repo/master

Cela vous donne la différence symétrique entre deux pensions. cela vous montre tous les commits qui sont dans un repo, mais pas dans l'autre.

13
Brian Campbell

La méthode la plus simple consiste à cloner un référentiel, à extraire la pointe de la branche principale de l'autre référentiel dans le clone et à utiliser la base git merge-base sur les deux astuces pour trouver l'ancêtre commun.

6
CB Bailey

Vous pouvez mettre (récupérer) les deux référentiels dans un référentiel unique, un nouveau ou un des répertoires existants, comme dans les réponses de ephemient , Charles Bailey et Brian Campbell . Ou vous pouvez utiliser astuce de Trucs et astuces page sur Git Wiki, ou pour être plus précis, question "Comment comparer deux référentiels locaux".

Mais il pourrait être plus simple de générer une liste de commissions SHA-1 dans l'ordre topologique à l'aide de "git rev-list" (ou "git-log" avec les options appropriées), et de vérifier la première révision entre elles.

0
Jakub Narębski

J'ai eu un besoin similaire récemment. J'avais un projet distant cloné que je devais comparer à une base de code copiée actuelle. Les journaux git n'étaient pas pertinents, car les commits n'avaient rien en commun, et je n'étais pas sûr qu'ils partaient du même code.

Pour résoudre le problème, j'ai utilisé git de manière brutale. J'ai copié les fichiers à vérifier dans le dépôt Git, puis j'ai vérifié la git status pour une liste de fichiers modifiés.

De plus, git diff <filename> peut également être utilisé pour inspecter davantage. J'ai pu comparer des fichiers au sein de

0
nobis99