У меня есть клон CPython на моем собственном сервере gitlab несколько лет назад. Итого, я просто попытался вытащить / слить последнюю версию из официального репозитория github в свой репозиторий gitlab, но это не удалось из-за отсутствия общей истории.

Здесь есть все коммиты, некоторые авторы, даты сообщений коммитов и т. Д. Однако все хэши коммитов разные. Кто-нибудь знает, как это произошло? Сделала ли операция импорта из github-> gitlab что-то другое, чем клон? Возможно, более старое поведение gitlab?

Благодарность

Изменить: cat-файл из GitHub для начальной фиксации:


tree 52384aa82c1f7785424544fc3ee003729b07ac12  
author Guido van Rossum <guido@python.org> 650211915 +0000 
committer Guido van Rossum <guido@python.org> 650211915 +0000  

HG:extra convert_revision:svn%3A6015fed2-1504-0410-9fe19d1591cc4771/python/branches/legacy-trunk%402161  

Initial revision

В то время как cat-файл из моей версии Gitlab для начальной фиксации:


tree 52384aa82c1f7785424544fc3ee003729b07ac12  
author Guido van Rossum <guido@python.org> 650211915 +0000  
committer Guido van Rossum <guido@python.org> 650211915 +0000  

Initial revision

Интересно, как потерялась дополнительная информация HG / SVG.

0
mb13 5 Окт 2018 в 21:24

1 ответ

Лучший ответ

Хеш объекта полностью определяется содержимым объекта.

Найдите корневую фиксацию (и) двух репозиториев и проверьте их данные (git cat-file -p). Что-то будет другим. Все остальные отличия вытекают отсюда. В противном случае истории совпадают до определенного момента, в этот момент происходит что-то другое, а затем истории расходятся.

Обычно такое случается, когда кто-то делает массивное git filter-branch, чтобы переписать историю. Клонирование определенно не делает этого, но импорт из какой-либо другой системы управления версиями (SVN или Mercurial) может сделать это, если импортер не устанавливает все данные каждой фиксации из другой VCS, или если вы запустите элементы через разные сопоставители (например, коммиттеры Mercurial не соответствуют Git, поэтому нужна карта).

Редактировать за редактирование: очевидно, что строка HG:extra отличается. (Строки tree, author, committer и основного текста фиксации одинаковы.) Данные HG:extra относятся к Mercurial; в данном случае это связано с импортом в Mercurial из SVN. Некоторое время Python поддерживался в Mercurial, но теперь поддерживается в Git. Возможно, Python изначально поддерживался в SVN. Это имеет смысл, учитывая даты: как указано здесь, Python существовал до SVN или Mercurial; SVN была создана в 2000 году, а версия 1.0 была выпущена в 2004 году; Mercurial был создан в 2005 году. (Git также датируется 2005 годом.)

4
torek 5 Окт 2018 в 20:59