Как объединить git history с неверной миграцией SVN - старый репозиторий - PullRequest
0 голосов
/ 28 июня 2018

У нас есть git-репозиторий, перенесенный из SVN. Давайте назовем это как РАБОЧАЯ. Из-за операции с копией svn история не была хорошо перенесена. Ошибка была:

SVN :  r1    \ --> common folder --> Project1 \ folder1
                                                file2 
  . 
  .  some time later
  .
  . 
SVN :  r1000 \ --> Common folder
               --> Project1 \ folder1
                              file2  
                    ^
                    |
                    ------> this folder has been migrated to GIT

Это изменение вызвало неполную миграцию истории (появляются только из HEAD в r1000) Теперь мы хотим добавить эту старую историю в WORKING (от r1000 до r1), мы создали новый репозиторий git с отсутствующей историей (назовем OLDEST). Журнал истории отображается как:

WORKING --> A (1.2018) - B (2.2018) - C (3.2018) - D (HEAD)
OLDEST --> E (1.2016) ... F (1.2017) 

Мы хотим эту историю журнала

WORKING --> E ... F --> A - B - C 

Пути в точности совпадают, и мы хотим сохранить историю, когда вы увидите полную историю файла. Тест, который я сделал, я не смог смешать эти истории, возможно?

Подробнее

Я перенес хранилище с помощью:

URL=http://server.name/project1
git svn clone --authors-file=authors.txt $URL -r1000:HEAD first-migration 

Некоторое время спустя я сделал

URL=http://server.name/common/
git svn clone --authors-file=authors.txt $URL -r1:1000 second_migration
cd second_migration
git filter-branch 

Теперь у нас есть два хранилища. Первая миграция используется и содержит активную разработку, вторая миграция содержит старые версии (от 1 до 1000)

Mi текущее решение:

mkdir migration
cd migration
git init
git remote add newest ssh://gitserver:first-migration
git remote add older  ssh://gitserver:second-migration
git remote update 
git checkout newest/master -b new.master
git checkout 1abc2def3   -b new.firstcommit 
git checkout older/master -b old.master
git rebase --preserve-merges --root --committer-date-is-author-date new.master
git checkout new.master -b master
git remote add fullhistory ssh://gitserver:final.git
git push fullhistory --all 

В этом случае new.firstcommit - это первый коммит, который я сделал во время первой миграции (r1000) (как ссылка на документацию)

После этих операций полная история доступна в удаленном хранилище, но история кажется отключенной

enter image description here

Мой вопрос о том, как лучше интегрировать старую историю.

1 Ответ

0 голосов
/ 13 июля 2018

Спасибо за комментарий alo-malbarez здесь и эта страница Я мог бы решить эту проблему. Наконец я сделал:

git checkout old.master
git cherry-pick new.firstcommit
# I commit the day I merged histories. 
git commit --allow-empty -m "Mixing histories"
git rebase -s recursive -Xtheirs --onto old.master new.firstcommit new.master
git push --all --tags

И это решило мою проблему.

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