3

我在这里进行了很好的搜索和搜索,但似乎没有任何问题可以回答我的问题,所以就到这里了。我有一个具有当前文件夹结构的 git 存储库

   /app/folder/
   /app/folder2/..
   /app/bundles/bundle1
   /app/bundles/bundle2

我想将包中的每个包变成它自己的子模块,保留该包中代码的所有版本控制历史记录,保持目录布局完全相同。这样做的原因是我有另一个应用程序,我想在其中使用一些捆绑包。

我尝试使用

git filter-branch --subdirectory-filter bundles/client -- --all

但这不是正确的做法......

任何帮助将不胜感激。

4

1 回答 1

0

实际上,使用 --subdirectory-filter 正是要做的事情,甚至在 filter-branch 手册页的示例中也给出了它。当然,它会用一个包含操作结果的新分支替换当前活动的分支。原始分支(指向它的指针)通常保存在“refs/original/”中(参见手册页中的 --original 选项)。您可以将活动分支复制到其他地方:

git branch bundles/client

并恢复当前分支

git reset --hard original/refs/heads/oldbranchname

您可以将活动分支导出为捆绑包,或直接在子模块中获取它并从父存储库中删除引用。

如果使用了 filter-branch 的 --all 选项,所有分支都会遭受活动分支的命运,因此您必须为每个分支重复复制操作。

遗憾的是,您不能将输出分支名称提供给 filter-branch 命令。可能值得在 Git 邮件列表上提出建议。

于 2012-07-03T14:30:15.883 回答