我想将现有git仓库中的目录提取到新仓库中。
我正在使用
git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter modules/plugins -- --all
见this SO answer,效果很好。
现在我有
的层次结构modules/
plugins/
foo/
bar/
baz/
过滤时我基本上想要modules/plugins/*
(这就是上面的git命令所做的),但不是modules/plugins/bar
。
这种git filter-branch
表达式有可能吗?如果是这样,怎么样?
使用上面的表达式,我的新回购最终为
foo/
bar/
baz/
如何保持modules/plugins/
部分到位?
答案 0 :(得分:0)
由于我发现没有办法传递像(虚构的)--subdirectory-filter modules/plugins,!modules/plugins/bar
这样的表达式,我首先运行git filter-branch
然后再运行:
for B in $BRANCHES; do git checkout -f $B
for P in "foo","baz"
do
git rm -r --cached $P
done
git commit -m "Plugins removed"
done
其中$BRANCHES
包含在通过
for B in $BRANCHES ; do git branch -t $B origin/$B; done