如何将跟踪的文件夹更改为git子模块

时间:2015-06-26 14:02:02

标签: git git-submodules

我想将项目中的一个文件夹更改为子模块。 这是我的(简化的)目录结构:

|-app <- the root of git project   
|--themes
|--plugins
|--lib

现在,我想将app / plugins转换为子模块,以便将此目录中的更改提交到单独的reposiotry中。

为插件设置新的回购后,我已经累了git submodule add <submodule-repository> plugins,但后来收到了一条消息

  

app / plugins'已存在于索引

确保它存在于索引中,因为它是作为主项目存储库的一部分进行跟踪的。

我该如何解决?我是否应该删除主.git文件夹,将app/plugins添加到.gitignore,再次提交,然后运行git submodule add

这实际上提出了另一个问题,是否应将作为项目子模块的文件夹添加到包含子模块的项目的.gitignore

1 个答案:

答案 0 :(得分:1)

我设法回答了我自己的问题。也许我发布的太快了。不过,也许它会在将来帮助一些人:

为了将当前项目中跟踪的文件夹转换为该项目的子模块,我采取了以下步骤:

  1. 在稍后将成为子模块的文件夹中初始化新存储库;
  2. 将内容提交到遥控器;
  3. 使用git rm -rf <folder_that_will_be_a_submodule>;
  4. 从主项目中删除此文件夹
  5. 现在使用rm -rf;
  6. 执行相同操作
  7. 转到项目根目录(主.git所在的位置);
  8. 执行git submodule add <repository>;
  9. 从主.gitignore删除对现在是子模块的文件夹的引用(如果已在那里引用)。
  10. 希望它会对某人有所帮助。