Получение разницы между двумя репозиториями



Как мы можем получить разницу между двумя репозиториями git?



сценарий:
У нас есть repo_a и repo_b. последний был создан как копия repo_a. после этого в обоих репозиториях была параллельная разработка. Есть ли способ перечислить различия между текущими версиями этих двух репозиториев?

905   8  

8 ответов:

в repo_a:

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

Если у вас есть обе ветви в одном репозитории, вы можете сделать git diff. И получить их в одном репозитории так же просто, как

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

- Это неправильно. remotes/b - это удаленный, но не филиал.

чтобы заставить его работать, я должен был сделать:

git diff master remotes/b/master

Meld сравнить каталоги:

meld directory1 directory2

просто используйте каталоги двух репозиториев git, и вы получите приятное графическое сравнение:

enter image description here

при нажатии на один из синих элементов, вы можете увидеть, что изменилось.

вы можете добавить другое РЕПО сначала в качестве пульта дистанционного управления для вашего текущего РЕПО:

git remote add other_name PATH_TO_OTHER_REPO

затем принесите brach с этого пульта дистанционного управления:

git fetch other_name branch_name:branch_name

это создает эту ветвь как новую ветвь в вашем текущем РЕПО, тогда вы можете разделить эту ветвь с любой из ваших ветвей, например, чтобы сравнить текущую ветвь с новой ветвью (branch_name):

git diff branch_name

см.http://git.or.cz/gitwiki/GitTips, раздел " как сравнить два локальных репозитория "в разделе"Общие".

короче говоря, вы используете переменную среды GIT_ALTERNATE_OBJECT_DIRECTORIES для доступа к объектной базе данных другого репозитория и используете git rev-parse С --git-dir / GIT_DIR для преобразования символьного имени в другом репозитории в идентификатор SHA-1.

современная версия будет выглядеть примерно так (предполагая, что вы в 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 - это путь к объектной базе данных в repo_b (это было бы repo_b.git, если бы это был голый репозиторий). Конечно, вы можете сравнить произвольные версии, а не только головы.


обратите внимание, что если repo_a и repo_b являются одним и тем же репозиторием, может быть более целесообразно поместить их обоих в один и тот же репозиторий, либо используя "git remote add -f ... " чтобы создать ник(ы) для репозитория для повторных обновлений, или obe off "git fetch ..."; как описано в других ответы.

Я использую PyCharm, который имеет большие возможности для сравнения папок и файлов.

просто откройте родительскую папку для обоих репозиториев и подождите, пока она не индексируется. Затем вы можете использовать щелчок правой кнопкой мыши на папке или файле и Compare to... и выбрать соответствующую папку / файл на другой стороне.

он показывает не только то, что файлы отличаются, но и их содержание. Гораздо проще, чем в командной строке.

лучше всего иметь оба репозитория на локальном компьютере и использовать команду linux diff с двумя каталогами в качестве параметров:

diff -r repo-A repo-B

Comments

    Ничего не найдено.