在没有子目录的Git filter-branch中选择目录

时间:2013-04-03 07:04:19

标签: git

我想将现有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/部分到位?

1 个答案:

答案 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