将目录拆分为子模块

时间:2012-07-03 13:46:27

标签: git

我在这里有一个善意和搜索,但似乎没有回答我的问题,所以这里。 我有一个当前文件夹结构的git存储库

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

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

我开始使用

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

git branch bundles/client

并恢复当前分支

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

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

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

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