Voir http://git.or.cz/gitwiki/GitTips , section "Comment comparer deux dépôts locaux" dans "Général".
En bref, vous utilisez la variable d'environnement GIT_ALTERNATE_OBJECT_DIRECTORIES pour avoir accès à la base de données d'objets de l'autre référentiel, et utilisez git rev-parse avec --git-dir
/ GIT_DIR pour convertir le nom symbolique d'un autre référentiel en identifiant SHA-1.
La version moderne ressemblerait à quelque chose comme ceci (en supposant que vous soyez dans 'repo_a'):
GIT_ALTERNATE_OBJECT_DIRECTORIES = .. / repo_b / .git / objets \
git diff $ (git --git-dir = .. / repo_b / .git rev-parse --verify HEAD) HEAD
où ../repo_b/.git
est le chemin de la base de données d'objets dans repo_b (ce serait repo_b.git s'il s'agissait d'un référentiel 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 peut être plus judicieux de les mettre tous les deux dans le même référentiel, soit en utilisant " git remote add -f ...
" pour créer des pseudonymes pour le référentiel pour les mises à jour répétées, soit en désactivant " git fetch ...
"; comme décrit dans d'autres réponses.