[英]Git submodule mess: how to use git submodules with developers not familiar with git?
我对使用git的子模块功能感到非常沮丧。 要么我仍然没有做对,要么就是因为我没想到这一点。 以下项目情况给出:
Project
| .git
| projsrc
| source (submodule)
| proj.sln
在此方案中, 源指向包含所有项目中的公共源数据的另一个存储库。 在源代码下发生了很多开发,也在projsrc下。 遗憾的是, Project指向源子模块的一些提交,而不是它的实际HEAD。 这是通常的git行为,据我所知。
我已经发现了
git submodule update
只需获取与主项目一起提交的子模块版本。 但是,我真的希望始终与子模块开发保持同步,但是没有任何真正的线索如何做到这一点。 因此我的问题是:
是否可以将项目附加到子模块的HEAD,不管这是否会破坏项目的编译。 我只是不想总是进入子模块目录并执行git pull 。 因为我认为我可以放弃在子模块目录中完成的更改,因为这很简单地附加到提交而不是真正的任何分支左右。
请考虑以下限制 :
子模块指向特定修订的原因很重要。 如果您指向HEAD,则构建将不可再现 。 也就是说,如果您查看昨天的项目版本,您将永远不会知道昨天源@HEAD的确切版本。
这就是为什么它总是存储特定的修订版sha。
要拉动所有子模块,您可以使用Easy way pull最新的所有子模块
我不擅长Git和submodule。 但我认为一些简单的规则会非常有用。
当拉。 可以尝试使用脚本将“pull / submodule update”捆绑在一起。 并且只在项目的根部进行。
考虑一下:
进行子模块更新时,您希望在项目中出现哪一个?
在您的情况下,git的问题(和主要特性)是您将提交和推送视为原子操作。 事实并非如此。 Git是分散的。 没有共同的HEAD。 您可能有多个具有不同HEAD的存储库。
考虑一下:
哪个HEAD你认为“真正的”HEAD?
那么,回答你的问题:如果你想让公共源子模块始终与中央存储库同步,那么git不是你的选择。 也许没有一个VCS可以帮助你。
您应该将git子模块视为第三方库,应该使用以下两个步骤手动更新:
如果要对子模块进行更改,则应按相反顺序执行相同操作:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.