Использование 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', он вам больше не нужен).

Другие вопросы по тегам