Git子模块工作stream程

在我的项目中,我需要使用存储在几个Git存储库中的第三方代码。 我的项目也存储在(单独的)Git仓库中。 在主项目上有几个人和我一起工作,我是维护者。

在之前的项目中,我曾经手动将依赖项复制到Git工作树上,添加了一个指定版本的小文件。

现在这是相当不舒服的,因为我需要每天更新一个依赖关系,并经常为自己贡献代码,大部分时间与主项目的变化相结合。

我决定尝试Git子模块来进行pipe理。 我尝试的越多,我越是感到沮丧。 甚至似乎手工复制也许更好。

以下是我的一些担忧:

  • 我们不再能够通过一个命令获得一致的存储库状态( git checkout现在需要git submodule update --init )。
  • 我们无法正确使用一些Git工具( git archive是最值得注意的)。
  • 我们无法看到来自主项目的子模块的状态更改/差异。
  • 正如我刚刚发现的一样, git submodule不能与--git-dir--work-tree选项一起工作,并且需要将当前目录的物理更改添加到“正在工作的树的顶层”。

看来,为了简化我们的子模块工作stream程(这是一个操作==一个命令),我们必须写一个比较厚的Git包装器。 这真是难过;这真是伤心。

请注意,从Git移出或将子项目开发完全合并到主项目中不是一种select。

也许我用错误的方式使用git submodules ? 有什么好的工作stream程教程?

即使你不知道正确的答案,也请说出来,但请分享我的担忧。 🙂

你可能想尝试使用git subtree ( alt link )。 我已经有了很多运气,在我的项目中使用远程回购和清理(解开master历史)分支。

git邮件列表中最近的一个线程包含一个修补程序,用于如何使用单个命令获取一致的存储库状态。 它基本上调用更改分支时的git子模块更新。

http://thread.gmane.org/gmane.comp.version-control.git/130155/focus=130330