Как сравнить два репозитория git? - PullRequest
29 голосов
/ 26 марта 2009

У меня есть два разных экспорта нашего CVS-репозитория в git. В какой-то момент они расходятся, и я расследую почему. Линия разработки насчитывает несколько лет и насчитывает более десятков тысяч коммитов.

В начале строки разработки идентификаторы SHA1 для каждого коммита были идентичны, что говорит мне о том, что git-cvsimport очень последовательн в том, что он делает, когда читает результаты cvsps и import.

Но когда-то между первым коммитом и вчерашним днем ​​идентификаторы SHA1 начинают расходиться. Я хотел бы узнать, где это, сравнив список идентификаторов коммитов из каждого репозитория и посмотрев, чего не хватает. Есть ли хорошие инструменты или методы для этого?

Ответы [ 6 ]

34 голосов
/ 26 марта 2009

Поскольку два git-репозитория начинаются одинаково, вы можете подключить оба к одному и тому же рабочему репозиторию.

$ git remote add cvsimport-a git://.../cvsimport-a.git
$ git remote add cvsimport-b git://.../cvsimport-b.git
$ git remote update
$ git log cvsimport-a/master..cvsimport-b/master  # in B, not in A?
$ git log cvsimport-b/master..cvsimport-a/master  # in A, not in B?
18 голосов
/ 26 марта 2009

Почему бы просто не скопировать git-журнал каждого репо в отдельный файл и сравнить? Разница ближе всего к нижней части файла, где они начали расходиться ...

12 голосов
/ 27 марта 2009

В одном из ваших репозиториев сделайте следующее:

$ git remote add other-repo git://.../other-repo.git
$ git remote update
$ git log other-repo/master...master
  # or maybe:
$ gitk master... other-repo/master

Это дает вам симметричную разницу между двумя репо; это показывает вам все коммиты, которые находятся в одном репо, но не в другом.

6 голосов
/ 26 марта 2009

Очевидным способом было бы клонировать один репозиторий, извлечь кончик основной ветви другого репозитория в клон и использовать git merge-base на двух подсказках, чтобы найти общего предка.

0 голосов
/ 23 сентября 2016

У меня недавно была похожая потребность. У меня был клонированный удаленный проект, который мне нужно было сравнить с текущей копируемой базой кода. Журналы git не были релевантны, потому что коммиты не имели ничего общего, и я не был уверен, что они произошли из одной и той же базы кода.

Чтобы решить эту проблему, я использовал git методом грубой силы. Я скопировал файлы для проверки в git-репозиторий, затем проверил git status на наличие списка измененных файлов.

Кроме того, git diff <filename> также может использоваться для дальнейшей проверки. Я смог сравнить файлы в

0 голосов
/ 27 марта 2009

Вы можете поместить (извлечь) оба репозитория в один репозиторий, либо новый, либо один из существующих, как в ответах ephemient , Charles Bailey и Brian Campbell . Или вы можете использовать трюк со страницы Tips and Tricks на Git Wiki или, если быть более точным, вопрос "Как сравнить два локальных репозитория" там.

Но может быть проще сгенерировать список коммитов SHA-1 в топологическом порядке, используя «git rev-list» (или «git-log» с соответствующими параметрами), и проверить первую ревизию, в которой они различаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...