Git

如何將 Git 儲存庫歷史重播到子目錄中?

  • July 25, 2021

假設我有兩個儲存庫,aye並且我bee想擺脫. **我只想要文件和送出消息,我不關心送出 ID。**我確實想要一個合理的歷史,所以並不是我想要的。bee``bee/master``ayegit subtree add --prefix=subdirectorygit read-tree --prefix=subdirectory/

這兩個儲存庫都是私有的,因此沒有為其他人重寫歷史的風險。但是,bee 確實有一個子模組cee

首先,重寫bee的歷史將所有文件移動到子目錄中

cd /path/to/bee
git filter-branch --force --prune-empty --tree-filter '
dir="my fancy/target directory"
if [ ! -e "$dir" ]
then
   mkdir --parents "${dir}"
   git ls-tree --name-only "$GIT_COMMIT" | xargs -I files mv files "$dir"
fi'

git log --stat應該顯示出現在my fancy/target directory. 現在您可以輕鬆地將歷史合併到aye

cd /path/to/aye
git remote add -f bee /path/to/bee
git checkout -b bee-master bee/master
git rebase master
git checkout master
git rebase bee-master

重新創建子模組aye

git submodule add git://my-submodule 'my fancy/target directory/my-submodule'

最後你可以清理aye

git rm 'my fancy/target directory/.gitmodules'
git branch --delete --force bee-master
git remote remove bee

您可能還必須修復儲存庫中的任何絕對路徑(例如在 中.gitignore

引用自:https://unix.stackexchange.com/questions/280217