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 une copie de repo_a. Il y a eu un développement parallèle dans les deux référentiels par la suite. Existe-t-il un moyen de répertorier les différences entre les versions actuelles de ces deux référentiels?
Réponses:
Dans repo_a:
la source
origin/master
plutôt qu'un simplemaster
. En outre, cela permet de trouver la différence entre les branches principales, alors que faire si vous voulez trouver toutes les branches différentes? Par exemple, pour vérifier l'état d'une sauvegarde de référentiel?Meld peut comparer des répertoires:
Utilisez simplement les répertoires des deux dépôts git et vous obtiendrez une belle comparaison graphique:
Lorsque vous cliquez sur l'un des éléments bleus, vous pouvez voir ce qui a changé.
la source
Vous pouvez d'abord ajouter un autre dépôt en tant que télécommande à votre dépôt actuel:
puis récupérez brach de cette télécommande:
cela crée cette branche en tant que nouvelle branche dans votre dépôt actuel, puis vous pouvez comparer cette branche avec n'importe laquelle de vos branches, par exemple, pour comparer la branche actuelle avec la nouvelle branche (nom_branche):
la source
Une fois que vous avez les deux branches dans un référentiel, vous pouvez faire un
git diff
. Et les obtenir dans un référentiel est aussi simple quela source
C'est incorrect.
remotes/b
est une télécommande, mais pas une succursale.Pour le faire fonctionner, je devais faire:
la source
J'utilise PyCharm qui a de grandes capacités pour comparer entre les dossiers et les fichiers.
Ouvrez simplement le dossier parent des deux dépôts et attendez qu'il indexe. Ensuite, vous pouvez utiliser un clic droit sur un dossier ou un fichier
Compare to...
et choisir le dossier / fichier correspondant de l'autre côté.Il montre non seulement quels fichiers sont différents, mais également leur contenu. Beaucoup plus facile que la ligne de commande.
la source
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'):
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.la source
Un moyen simple de le faire sans toucher à la configuration de vos télécommandes. À partir du repo A, dans master (supposons que vous souhaitiez comparer les branches master):
la source
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 paramètres:
diff -r repo-A repo-B
la source
Vous pouvez utiliser la commande suivante:
ou pour le côte à côte, vous pouvez utiliser:
En cas de colorisation de chaque fichier de différence, vous pouvez utiliser:
la source
Rappel à soi-même ... récupérez d'abord, sinon le référentiel n'a pas de hachage local (je suppose).
étape 1. Configurez la télécommande en amont et au-dessus ^
la différence d'un seul fichier suit ce modèle:
git diff localBranch uptreamBranch --spacepath / singlefile
git diff master upstream/nameofrepo -- src/index.js
la source