Git отдельная история файлов теряется с Git поддерево - PullRequest
1 голос
/ 03 октября 2019

Я объединяю 2 репозитория git (old1 & old2) в 1 (new1). Мои требования - объединить все ветки и сохранить историю коммитов git. Первый способ, которого я могу достичь, но я борюсь с историей коммитов.

Это команда, которую я выполняю, чтобы объединить репозиторий old1 в подпапку нового1: git subtree add -P old1 https://github.com/example/old1.git master

Выводиз git log --graph --oneline --decorate --all:

*   ad4fcb6 (HEAD -> master, origin/master, origin/HEAD) Add 'komed-connector/' from commit '50b42475113c295c66c4050b3b0f119a6ebff62b'
|\  
| * 50b4247 Updated komed-shared
| *   1a5435a Merge branch 'master' into openshift_build
| |\  
| | *   8aa90aa Merge branch 'r/3.4'
| | |\  
| | | * a6cea77 updated shared
| | * | a40c782 Updated komed-shared
...

Пока все хорошо: история коммитов git сохраняется. Но если я проверяю коммиты git одного файла в новой подпапке, он не показывает все коммиты: enter image description here

Как объединить 2 репозиторияв 1 и сохранить отдельный файл истории коммитов git? Так что при запуске gitk old1/Dockerfile git показывает мне все коммиты, которые произошли в старом репозитории.

1 Ответ

2 голосов
/ 03 октября 2019

Насколько я понимаю, Git не имеет понятия "история фиксации отдельных файлов". Отслеживание того факта, что old1 / Dockerfile связан с каким-либо другим файлом в другом месте, оставлено для эвристики в визуальных инструментах и ​​инструментах командной строки (или их отсутствии). Более подробное обсуждение этого вопроса можно найти в этом вопросе: git, надежный способ перемещения / переименования файлов при сохранении истории

С практической точки зрения я бы попытался переписать «старыйmsgstr "история репо, как если бы она полностью произошла в папке oldreporoot/old1. Затем этот репо можно аккуратно объединить с новым репо, и ваши визуальные инструменты и инструменты командной строки должны вести себя соответствующим образом, поскольку файлы не переименовываются / не перемещаются.

git filter-branch --tree-filter должно помочь сделать это, как описано в https://git -scm.com / book / en / v2 / Git-Tools-Rewriting-History

...