Использование git fast-export для экспорта репо, начиная с данного коммита
В настоящее время я пытаюсь объединить текущее репо на работе с конвертированным из старого svn репо моей работы. Я хочу, чтобы новый репо (назовем его A) был объединен с текущим рабочим репо (B).
B является результатом неудачной попытки конвертировать svn репо в git с сохранением истории. А это вторая попытка. Если я просто объединю B с A, в старом репозитории SVN будут повторяться коммиты. Я хотел бы включить только историю из B, которая произошла после последнего коммита svn.
Я смотрю на git-fast-export, но я не нашел никакой документации, которая бы мне помогла. Стоит ли использовать git-fast-export или есть лучший способ? Как бы я использовал git-fast-export или что-то еще для слияния?
1 ответ
Если у вас есть только одна ветвь для слияния, то другим способом было бы использовать прививки (см. " Советы по садоводству - прививание ветвей"):
- добавлять
B
как пульт дляA
: "remoteB
", - найти SHA1 из
A
представляющий конвертированный репозиторий SVN (и из которого были сделаны новые коммиты): "SHA1-A
", - найти SHA1 из
B
представление следующего коммита после преобразования репозитория SVN (то есть первого из новых коммитов, выполненных из неудачного преобразования SVN): "SHA1-B
", - Смотрите этот пример:
Вы можете переопределить родителей коммитов в Git, используя файл с именем grafts, который должен находиться в
.git/info/
,
Он состоит из нескольких строк с хэшами коммитов, разделенными пробелом, где первый хеш - это коммит, для которого вы хотите определить родителей, а следующие хэши - это родители.Примечание: вы должны использовать полные хеши, а не сокращенные.
Чтобы исправить историю выше, мы должны определить родителей в
.git/info/grafts
:
SHA1-B SHA1A
Сделайте этот трансплантат постоянным:
git filter-branch --tag-name-filter cat -- --all
Сделайте ссылку на местный филиал ГОЛОВНОЙ
B
Филиал ты просто графте.git branch Bmaster remoteB/master
Объедините две ветки (и вы можете удалить репозиторий 'remoteB', он вам больше не нужен).