42

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

在早期的项目中,我曾经手动将依赖项复制到 Git 工作树,添加一个小文件来指定我使用的版本。

现在这相当不舒服,因为我需要每天更新一个依赖项,并且经常自己为其贡献代码,大部分时间伴随着对主项目的更改。

我决定尝试使用 Git 子模块来进行管理。我越尝试它们,我就越沮丧。甚至似乎手动复制可能更好。

以下是我的一些担忧:

  • 我们不再能够通过单个命令(git checkout现在需要git submodule update --init)获得一致的存储库状态。
  • 我们无法正确使用某些 Git 工具(git archive最值得注意的是)。
  • 我们无法看到主项目中子模块的状态更改/差异。
  • 正如我刚刚以一种艰难的方式发现的那样,git submodule它不适用于--git-dirand--work-tree选项,并且需要将当前目录物理更改为“工作树的顶层”。

似乎为了简化我们的子模块工作流程(即一个操作 == 一个命令),我们必须围绕 Git 编写一个相当厚的包装器。这真是难过;这真是伤心。

请注意,离开 Git 或将子项目开发完全合并到主项目中不是一种选择。

也许我git submodules以错误的方式使用?有没有关于工作流程的好教程?

即使您不知道正确的答案,也请说出来,但请分享我的担忧。:-)

4

2 回答 2

13

您可能想尝试git subtree ( alt link )。我很幸运,master在我的项目中同时使用了远程仓库和干净的(与历史无关的)分支。

于 2009-10-20T20:25:52.283 回答
6

git 邮件列表上最近的一个线程包括一个关于如何使用单个命令获得一致的存储库状态的补丁。它基本上在更改分支时调用 git submodule update 。

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

于 2009-11-10T20:05:50.547 回答