git - 将目录拆分为子模块

标签 git

我在此处进行了搜索和搜索,但似乎没有任何内容可以回答我的问题,所以这里开始吧。 我有一个具有当前文件夹结构的 git 存储库

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

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

我尝试过使用

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

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

如有任何帮助,我们将不胜感激。

最佳答案

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

git branch bundles/client

并恢复当前分支

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

您可以将事件分支导出为一个包,或者直接在子模块中获取它并从父存储库中删除引用。

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

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

关于git - 将目录拆分为子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11312333/

相关文章:

git - 如何将 'git push' 从本地计算机发送到 Google Cloud Platform 实例?

git - 在 Git 中,delta 是什么意思?

eclipse - 如何在 Windows 上通过 SSH 使用 EGit?

git reset 与 git reset HEAD

git - 如果我一开始就执行了 "add"操作,那么我应该在 git 中的每个新文件中执行 "add ."操作吗?

git - 预加载git存储库?

git - 推送除特定分支之外的所有分支

regex - git-svn clone 忽略文件夹的路径正则表达式

git - 在 git 中以任何方式将所有只有空格更改的文件添加到暂存区?

git - NPM 包 url 作为 mercurial(bitbucket) 中的依赖项