0

我想从现有的 git repo 中提取一个目录到一个新的 repo 中。

我在用

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/零件保持在原位?

4

1 回答 1

0

由于我发现无法传递像 (imaginary) 这样的表达式,--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
于 2013-04-08T07:43:33.863 回答