2017-06-21 57 views
0

在我的项目中,我们使用git submodules来管理一些插件。我们的核心项目和子模块正在并行开发。因此,对于我们而言,每次子模块向前移动时(必须解决不同开发人员之间的SHA上的冲突等),我们都必须在核心项目中更新子模块的SHA,这并不是很好。有没有办法让git子模块不存储特定的SHA?

我们想告诉它跟踪一个分支,让它成为那个。但是,似乎子模块分支跟踪更容易更新子模块,但是没有任何办法来减轻我们将超级项目指向特定SHA而不是分支的问题。

有人对我们有什么建议吗?

+2

这听起来像你正试图使用​​Git来管理依赖关系。这不是很好。你可能需要一个真正的依赖管理器。或者如果您发现您必须跟踪绝对最新的提交,那么这两个存储库可能会更好。 – Schwern

+2

我不相信git可以做你想做的事。一个提交表示一个特定的代码版本,并允许一个子模块指定一个引用会违反这个 - 所以一个提交今天起作用,但是由于子模块的repo的引用正在移动,我的repo中的相同提交明天停止工作?你可以说版本范围的依赖管理器也是如此,但是至少你有像semver这样的工具来限制这个易用性。 (即使如此,你仍然有生产版本的收缩包装工具。) –

+0

查看https://stackoverflow.com/questions/9189575/git-submodule-tracking-latest – nos

回答

1

一种可能的选择是使用git子树而不是子模块。

使用过一个我不确定我会推荐它作为一个长期解决方案,但https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtreehttps://legacy-developer.atlassian.com/blog/2015/05/the-power-of-git-subtree会提供一个合理的工作原理,并帮助您决定是否有更好的工作流程满足您的特定需求。

+0

谢谢,@Jonah!我一定会试验它。我还想出了一个解决方案,以解决我们的问题,我会将其作为答案进行发布,以便对任何人都有帮助。 – Eric

0

正如其他人所指出的,git子模块并不是为我们的项目所设计的。但我找到了一种方法来实现我们想要的东西......贴在这里的情况下,是非常有用的人:

  • 我们不承诺我们的本地更改子模块索引以避免额外的工作流步骤和频繁的麻烦合并那些通过git GUI无法很好处理的索引的冲突。
  • 我们然后标子模块的文件夹为“假设不变”,其中隐藏我们当地的变化,使得我们可以有效地忽略与指数的变化

所以,这给了我们什么,我们想要......一个子模块允许新用户递归克隆所有相关插件并通过git submodule <command>进行批量操作,但不会跳过我们不想要的固定提交SHA。

相关问题