在Git中,CVS中的模块和&符号等效的是什么?

5
我正在尝试将我的CVS仓库转换为Git,并且已经卡在这个问题上一段时间了。
我目前使用CVS和模块来共享项目之间的代码。这些允许您将不同的存储库“别名”为项目中的子目录,因此您可以像一个存储库一样更新/提交整个项目及其包含的远程存储库。
我看到有些帖子推荐使用子树合并或子模块来完成此操作,涉及到(svn:externals)。但是这行不通,因为:
- 子树合并显然不允许您轻松地推回/更新外部存储库。 - 子模块仍然需要您手动推送/拉取每个子模块。我有很多子模块,并且进入每个子模块以推送我的更改会很繁琐,并且可能会导致遗漏,因为更改会忘记提交。
只是为了明确,我想要一个包含其他Git存储库作为子目录的Git存储库,并能够使用一个命令同时提交/推送/拉取所有存储库。

2
子模块正在朝着更符合您期望的方向发展——git fetch现在支持子模块,我相信会有更多的改进。不过,在子模块中提交代码与其预期目的还有一定距离。 - Cascabel
1
看起来你是对的,子模块正是我要找的,但它们还不够完善。不过我很惊讶,因为我觉得这个工作流程相当普遍,而且 Git 已经存在一段时间了。 - paulsc
1
@paulsc:我认为更常见的做法是:独立于超级项目工作于子项目,然后不时地将超级项目更新到子项目的新版本。 - Cascabel
哦,还有一个相关的问题:我曾经提出过的唯一一个问题 - Cascabel
是的,那正是它的特点。这些模块高度耦合,因此我需要同时在所有模块中进行大量更改,并且需要能够轻松地推送/拉取这些更改。 - paulsc
@paulsc:它们彼此之间高度耦合,还是与某个公共接口高度耦合?如果是彼此之间高度耦合,您应该考虑将它们视为一个项目。 - wnoise
3个回答

1

这很不像 Git 的风格。如果它们是独立的项目,应该放在不同的代码库中。

然而,repo 工具被用于像 Android 这样的项目,提供了一个在 git 之上的层,涵盖了大量来自不同位置的依赖项目,并允许您通过版本控制从本地分支管理所有这些项目(每个项目可能来自不同的位置)。

这是一个上层工具,如果你期望得到完全相同的 git 使用体验,那么你将无法实现。你可以在任何子项目中使用标准的 git 工具,但在顶层,你需要使用不同的工具进行协调。


看起来我们的工作流程并不那么罕见,这就是我困惑其他人如何处理的原因。它们是独立的项目,但共享大量代码。因此,每个项目被细分为“组件”,理想情况下每个组件都应映射到一个git存储库。需要原子提交事物(即一次提交多个组件/ git存储库)的需求源于不想错过任何不同组件的更改。 - paulsc
另外,repo似乎很有趣 - 尽管目前只针对Android。现在似乎实现这个工作流的方法就是在git的基础上自己开发。 - paulsc
这不仅适用于Android。我现在正在另一个项目中使用它。这些项目是独立的,容器本身可以将不同分支上相关版本联系在一起。如果您不这样做,当两个项目对其共享项目引入冲突更改时,您将遇到麻烦。 - Dustin

0

我的 git-subtree 项目使得在进行子树合并后重新提取更改成为可能。许多人发现这是介于 git-submodule 和子树合并之间的最佳选择。


0

如果我理解你的问题正确,那么你需要git子模块


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接