Я хотел бы объединить удаленный репозиторий git в моем рабочем репозитории git в качестве его подкаталога. Я хотел бы, чтобы результирующий репозиторий содержал объединенную историю двух репозиториев, а также то, что каждый файл объединенного репозитория сохраняет свою историю, как в удаленном репозитории. Я попытался использовать стратегию поддерева, как указано в Как использовать стратегию слияния поддерева, но после выполнения этой процедуры, хотя результирующий репозиторий содержит действительно объединенные история двух репозиториев, отдельные файлы, поступающие с удаленного, не сохранили свою историю (` git log 'на любом из них просто показывает сообщение "Объединенная ветка..." ).
Также я не хочу использовать подмодули, потому что я не хочу, чтобы два комбинированных репозитория git были отделены больше.
Можно ли объединить удаленный репозиторий git в другой как подкаталог с отдельными файлами, поступающими из удаленного хранилища, сохраняющим их историю?
Большое спасибо за любую помощь.
EDIT: В настоящее время я пытаюсь найти решение, использующее ветвь git filter-branch для перезаписи истории слияния в репозитории. Кажется, он работает, но мне нужно проверить его еще немного. Я вернусь, чтобы сообщить о моих выводах.
ИЗМЕНИТЬ 2: В надежде, что я сделаю все более ясным, я даю точные команды, которые я использовал с стратегией поддерева git, что приводит к очевидной потере истории файлов удаленного репозитория. Пусть A - это git repo, в котором я сейчас работаю, и B git repo, который я хотел бы включить в в качестве его подкаталога. Он сделал следующее:
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
на любом из них отображается только сообщение фиксации "Объединить B как подкаталог в subdir/Iwant/к/ставить/B/в". Их история файлов, как и в B, теряется.
Что, кажется, работает (поскольку я новичок в git, я могу ошибаться):
git remote add -f B <url-of-B>
git checkout -b B_branch B/master # make a local branch following B 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
Вышеприведенная команда для ветвления фильтра взята из git help filter-branch
, в которой я только изменил путь subdir.