Как сравнить два репозитория git?

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

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

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

Ответ 1

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

Ответ 2

Так как два репозитория 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?

Ответ 3

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

$ 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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

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