2015-03-13 74 views
0

我的混帐回购目前看起来是这样的:移动所有的git的内容与文件夹层次结构完整的历史一个层次了

.git\ 
A_Dir\ 
+---- B_Dir\ 
+---- C_Dir\ 
+---- ManyFiles 

我想的A_Dir所有内容上移一级(及删除A_Dir)像这样[包括整个​​历史,参考,标签 - 好像A_Dir的内容一直在.git的相同目录级别上,这样我就可以合并所有分支 - 因为此举从未发生]:

.git\ 
B_Dir\ 
C_Dir\ 
ManyFiles 

我已经找到了一些答案的计算器一样:

git filter-branch --index-filter 'git ls-files -s | 
    sed "s-\t\"*-&new_subdir/-" | 
    GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info && 
    mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' --tag-name-filter cat -- --all 

这种重写的整个历史,但在new_subdir目录中移动的内容了。我其实需要执行反转的命令!

任何人都可以帮忙吗?

回答

0

git filter-branch有你通过它--subdirectory-filter选择想要的明确支持:

git filter-branch --subdirectory-filter A_Dir --tag-name-filter cat -- --all 

A_Dir内容以外的任何历史都将丢失。由于--tag-name-filter选项,这也将重写任何标签以指向修改的提交。

+0

这正是我所需要的!像魅力一样工作,非常感谢你! – Nocs 2015-03-13 17:16:22