Как мы можем получить разницу между двумя репозиториями git?
Сценарий:
У нас есть repo_a и repo_b. Последний был создан как копия repo_a. После этого были параллельные разработки в обоих хранилищах. Есть ли способ перечислить различия в текущих версиях этих двух репозиториев?
Ответ 1
В 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
Ответ 2
Мелд может сравнить каталоги:
meld directory1 directory2
Просто используйте каталоги двух репозиториев git, и вы получите хорошее графическое сравнение:
![enter image description here]()
Когда вы нажимаете на один из синих элементов, вы можете увидеть, что изменилось.
Ответ 3
Как только у вас есть две ветки в одном репозитории, вы можете сделать git diff
. И получение их в одном репозитории так же просто, как
git fetch /the/other/repo/.git refs/heads/*:refs/remotes/other/*
Ответ 4
git diff master remotes/b
Это неверно. remotes/b
является удаленной, но не ветвью.
Чтобы заставить его работать, мне пришлось:
git diff master remotes/b/master
Ответ 5
Вы можете добавить другое репо сначала как удаленное для своего текущего репо:
git remote add other_name PATH_TO_OTHER_REPO
затем возьмитесь за плечо с этого пульта:
git fetch other_name branch_name:branch_name
это создает эту ветвь как новую ветвь в вашем текущем репо, тогда вы можете разделить эту ветвь с любой из ваших ветвей, например, сравнить текущую ветку с новой веткой (имя_индустрии):
git diff branch_name
Ответ 6
См. 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, если бы это был голый репозиторий). Конечно, вы можете сравнивать произвольные версии, а не только HEAD.
Обратите внимание, что если repo_a и repo_b являются одним и тем же репозиторием, может возникнуть смысл разместить оба из них в одном репозитории, либо используя "git remote add -f ...
" для создания псевдонимов для репозитория для повторных обновлений, либо obe off "git fetch ...
"; как описано в других ответах.
Ответ 7
Я использую PyCharm, который обладает большими возможностями для сравнения между папками и файлами.
Просто откройте родительскую папку для обоих репозиториев и подождите, пока она не индексирует. Затем вы можете щелкнуть правой кнопкой мыши по папке или файлу и Compare to...
и выбрать соответствующую папку/файл на другой стороне.
В нем отображаются не только файлы, но и их содержимое.
Гораздо проще, чем командная строка.
Ответ 8
Лучше всего иметь оба репозитория на локальном компьютере и использовать команду linux diff с двумя каталогами в качестве параметров:
diff -r repo-A repo-B
Ответ 9
Простой способ сделать это, не касаясь конфигурации вашего пульта. Из репо А в мастер (предположим, вы хотите сравнить основные ветки):
git fetch path/to/repo_b.git master
git diff FETCH_HEAD