在A,B和B上工作的完美工作流程是什么? C并联,其中A取决于C上的B和B?

时间:2013-11-20 23:08:23

标签: javascript git workflow npm

我想知道什么是完美的工作流程,如果需要并行处理项目A,B和C,其中A依赖于B而B取决于C。

目前,我拥有一个存储库中的所有内容,这加快了早期开发。所以我的工作目录如下所示:

/A/
/A/B
/A/B/C

所以A是推动开发的项目,但也意味着BC并行发展。

但是,我想单独发布项目BC,以及它们对其他项目非常有用。

然而,在不破坏我的开发速度的情况下,我对如何做到这一点感到很沮丧。 npm非常适合分发和依赖管理,但在开发期间,您绝对不希望在Internet上移动临时版本只是为了让文件在您计算机上的不同文件夹中更新:)

另一方面,您也不想手动复制它们。哎呀,所有这些我必须切换目录才能在B上工作,现在将其复制到/A/B 是可怕的,而且似乎容易出错。

所以,git submodule似乎就是答案,因为它基本上可以实现这一点:您可以保持目录布局。然后,当您对B中的文件进行更改时,您可以直接在A中对其进行测试,而无需复制某些内容。当你认为它准备就绪时,你可以从三个不同的文件夹中提交和推送。一切都会自动进入三个不同的存储库。似乎天堂,但每个人都因各种原因讨厌git submodule

在处理grunt插件时我遇到了同样的问题。我有自己的存储库中的grunt插件,然后当我正在处理它时,我必须将其复制到我用它来驱动开发的一个项目中。然后在一天结束时,我将其复制回grunt插件工作目录,进行提交并推送它们。感谢上帝,我不是数以千计的grunt插件的作者,所以我可以解决这个问题但是对于我目前正在研究的这个项目,我肯定希望找到更好的解决方案。

所以我想知道,答案是什么?

3 个答案:

答案 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 subtreegit submodules的利弊。