Git
如何將 Git 儲存庫歷史重播到子目錄中?
假設我有兩個儲存庫,
aye
並且我bee
想擺脫. **我只想要文件和送出消息,我不關心送出 ID。**我確實想要一個合理的歷史,所以並不是我想要的。bee``bee/master``aye
git subtree add --prefix=subdirectory
git read-tree --prefix=subdirectory/
這兩個儲存庫都是私有的,因此沒有為其他人重寫歷史的風險。但是,
bee
確實有一個子模組cee
。
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
)