Получение разницы между двумя репозиториями
Как мы можем получить разницу между двумя репозиториями git?
сценарий:
У нас есть repo_a и repo_b. последний был создан как копия repo_a. после этого в обоих репозиториях была параллельная разработка. Есть ли способ перечислить различия между текущими версиями этих двух репозиториев?
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, и вы получите приятное графическое сравнение:
при нажатии на один из синих элементов, вы можете увидеть, что изменилось.
вы можете добавить другое РЕПО сначала в качестве пульта дистанционного управления для вашего текущего РЕПО:
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