Obtenir la différence entre deux référentiels

Comment pouvons-nous faire la différence entre deux référentiels git?

Le scénario: Nous avons un repo_a et repo_b. Ce dernier a été créé comme copie de repo_a. Des développements parallèles ont eu lieu par la suite dans les deux référentiels. Y a-t-il un moyen de lister les différences entre les versions actuelles de ces deux référentiels?

En repo_a:

git remote add -fb path/to/repo_b.git git remote update git diff master remotes/b/master git remote rm b 

Une fois que vous avez les deux twigs dans un référentiel, vous pouvez faire un git diff . Et les placer dans un référentiel est aussi simple que

 git fetch /the/other/repo/.git refs/heads/*:refs/remotes/other/* 
 git diff master remotes/b 

C’est incorrect remotes/b est une télécommande, mais pas une twig.

Pour que cela fonctionne, je devais faire:

 git diff master remotes/b/master 

Meld peut comparer les répertoires:

 meld directory1 directory2 

Il suffit d’utiliser les répertoires des deux repos git et vous obtiendrez une belle comparaison graphique:

entrer la description de l'image ici

Lorsque vous cliquez sur l’un des éléments bleus, vous pouvez voir ce qui a changé.

Vous pouvez append d’autres repo d’abord comme télécommande à votre repository actuel:

 git remote add other_name PATH_TO_OTHER_REPO 

puis récupère brach de cette télécommande:

 git fetch other_name branch_name:branch_name 

Cela crée cette twig en tant que nouvelle twig dans votre référentiel actuel, vous pouvez alors modifier cette twig avec l’une de vos twigs, par exemple pour comparer la twig en cours avec la nouvelle twig (nom_twig):

 git diff branch_name 

Voir http://git.or.cz/gitwiki/GitTips , section “Comment comparer deux référentiels locaux” dans “Général”.

En bref, vous utilisez la variable d’environnement GIT_ALTERNATE_OBJECT_DIRECTORIES pour avoir access à la firebase database d’objects de l’autre référentiel et en utilisant git rev-parse avec --git-dir / GIT_DIR pour convertir le nom symbolique dans un autre référentiel en identifiant SHA-1.

La version moderne ressemblerait à ceci (en supposant que vous êtes dans «repo_a»):

 GIT_ALTERNATE_OBJECT_DIRECTORIES = .. / repo_b / .git / objects \
    git diff $ (git --git-dir = .. / repo_b / .git rev-parse --verify HEAD) HEAD

../repo_b/.git est le chemin d’access à la firebase database object dans repo_b (ce serait repo_b.git s’il s’agissait d’un repository nu). Bien sûr, vous pouvez comparer des versions arbitraires, pas seulement des HEAD.


Notez que si repo_a et repo_b sont le même référentiel, il serait plus judicieux de les placer tous les deux dans le même référentiel, en utilisant ” git remote add -f ... ” pour créer des pseudonymes pour le référentiel en cas de mises à jour répétées. ou obéissez “Git Fetch git fetch ... “; comme décrit dans d’autres réponses.

J’utilise PyCharm qui a de grandes capacités pour comparer les dossiers et les fichiers.

Ouvrez simplement le dossier parent pour les deux repos et attendez qu’il indexe. Ensuite, vous pouvez utiliser le clic droit sur un dossier ou un fichier et Compare to... et choisir le dossier / fichier correspondant de l’autre côté.

Il montre non seulement quels fichiers sont différents mais aussi leur contenu. Beaucoup plus facile que la ligne de commande.

Votre meilleur pari est d’avoir les deux repos sur votre machine locale et d’utiliser la commande linux diff avec les deux répertoires comme parameters:

diff -r repo-A repo-B