Я хотел бы объединить удаленный репозиторий git в моем рабочем репозитории git в качестве его подкаталога. Я бы хотел, чтобы полученный репозиторий содержал объединенную историю двух репозиториев, а также чтобы каждый файл объединенного репозитория сохранял свою историю, как это было в удаленном репозитории. Я попытался использовать стратегию поддерева, как упоминалось в разделе Как использовать стратегию слияния поддерева , но после выполнения этой процедуры, хотя полученный репозиторий действительно содержит объединенную историю двух репозиториев, отдельные файлы, поступающие с удаленного, не сохранили свою историю (`git log 'на любом из них просто показывает сообщение« Объединенная ветка ... »).
Также я не хочу использовать подмодули, потому что я не хочу, чтобы два объединенных репозитория git больше были отдельными.
Можно ли объединить удаленный репозиторий git в другой как подкаталог с отдельными файлами, поступающими из удаленного репозитория, с сохранением их истории?
Большое спасибо за любую помощь.
EDIT: в настоящее время я пробую решение, которое использует git filter-branch для перезаписи истории объединенного репозитория. Кажется, это работает, но мне нужно еще немного протестировать. Я вернусь к отчету о своих выводах.
РЕДАКТИРОВАТЬ 2: В надежде, что я прояснюсь, я даю точные команды, которые я использовал со стратегией git subtree, что приводит к очевидной потере истории файлов удаленного репозитория. Пусть A будет репозиторием git, над которым я сейчас работаю, а B - репозиторием git, который я хотел бы включить в A в качестве его подкаталога. Он сделал следующее:
git remote add -f B <url-of-B>
git merge -s ours --no-commit B/master
git read-tree --prefix=subdir/Iwant/to/put/B/in/ -u B/master
git commit -m "Merge B as subdirectory in subdir/Iwant/to/put/B/in."
После этих команд и перехода в каталог subdir / Iwant / to / put / B / in, я вижу все файлы B, но git logна любом из них отображается только сообщение фиксации «Merge B as subdirectory in subdir / Iwant / to / put / Б / дюйм " Их файловая история, как в B, потеряна.
Что , кажется , на работу (так как я новичок на мерзавец я могу ошибаться) , заключается в следующем:
git remote add -f B <url-of-B>
git checkout -b B_branch B/master # make a local branch following B's master
git filter-branch --index-filter \
'git ls-files -s | sed "s-\t\"*-&subdir/Iwant/to/put/B/in/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
git checkout master
git merge B_branch
Приведенная выше команда для filter-branch взята из git help filter-branch, в котором я только изменил путь к подкаталогу.
gitkговорит об истории? Раньше я успешно использовал git subtree merge. Возможно, вы сможете раскрыть свои точные команды? Я не уверен, что git-filter-branch - правильный подход. Я мог бы порекомендовать попробовать git-fast-export и git-fast-import, чтобы синтезировать новую историю.