我想知道什么是完美的工作流程,如果需要并行处理项目A,B和C,其中A依赖于B而B取决于C。
目前,我拥有一个存储库中的所有内容,这加快了早期开发。所以我的工作目录如下所示:
/A/
/A/B
/A/B/C
所以A
是推动开发的项目,但也意味着B
和C
并行发展。
但是,我想单独发布项目B
和C
,以及它们对其他项目非常有用。
然而,在不破坏我的开发速度的情况下,我对如何做到这一点感到很沮丧。 npm
非常适合分发和依赖管理,但在开发期间,您绝对不希望在Internet上移动临时版本只是为了让文件在您计算机上的不同文件夹中更新:)
另一方面,您也不想手动复制它们。哎呀,所有这些我必须切换目录才能在B
上工作,现在将其复制到/A/B
是可怕的,而且似乎容易出错。
所以,git submodule
似乎就是答案,因为它基本上可以实现这一点:您可以保持目录布局。然后,当您对B
中的文件进行更改时,您可以直接在A
中对其进行测试,而无需复制某些内容。当你认为它准备就绪时,你可以从三个不同的文件夹中提交和推送。一切都会自动进入三个不同的存储库。似乎天堂,但每个人都因各种原因讨厌git submodule
。
在处理grunt插件时我遇到了同样的问题。我有自己的存储库中的grunt插件,然后当我正在处理它时,我必须将其复制到我用它来驱动开发的一个项目中。然后在一天结束时,我将其复制回grunt插件工作目录,进行提交并推送它们。感谢上帝,我不是数以千计的grunt插件的作者,所以我可以解决这个问题但是对于我目前正在研究的这个项目,我肯定希望找到更好的解决方案。
所以我想知道,答案是什么?
答案 0 :(得分:2)
请注意,Git子模块指向外部存储库的特定版本,即指向特定提交。
要将所有Git子模块更新为最新版本,您仍需run a command:
git submodule foreach git pull origin master
根据您的情况,您可以使用npm而不是Git子模块。在这种情况下,您只需在package.json
中列出您的依赖项,然后在存储库的根目录中运行npm install
以获取它们。如果更新了依赖项并发布了新版本,则只需再次运行npm update
,它将匹配package.json
文件中设置的版本要求。您也可以use npm to point to a specific commit,就像Git子模块的工作方式一样:
{
"devDependencies": {
"dependency-a": "git://github.com/the-user-name/the-project-name.git#b3c24169432a924d05020c85f852d4a1736e66d4"
}
}
或者,如果您想使用依赖的前沿版本,例如给定Git存储库的master
分支,您可以使用:
{
"devDependencies": {
"dependency-a": "git://github.com/the-user-name/the-project-name.git#master"
}
}
答案 1 :(得分:1)
我已经尝试了所有这些工作流程并且已经确定git子模块不是答案。我的主要原因是他们以scm级别将项目结合在一起,而且在这种耦合发生的修订历史中究竟在哪里并不直观。特别是在一个独立的头部场景中。
我依靠npm进行依赖管理,并结合npm link
和git URL。当我想在本地测试时,npm link
很棒。 git URL非常适合在拉取请求期间解决依赖关系。最终,我总是想要一个已发布的模块,其版本号可与git标签匹配,以供将来参考和问题跟踪。我使用npm version
一步完成此操作。允许项目在开发周期中以不同的耦合级别相互依赖。
答案 2 :(得分:0)
在这里使用git subtree
是否可以?本文Alternatives To Git Submodule: Git Subtree很好地解释了使用git subtree
与git submodules
的利弊。