如果使用Mercurial或Git,经常提交文件是否合适?

nop*_*ole 3 git mercurial dvcs

似乎建议我们可以经常提交以跟踪我们编写的代码的中间变化...例如在使用Mercurial或Git时在hginit.com上.

但是,让我们说如果我们在一个项目上工作,我们经常提交文件.现在出于某种原因,经理想要部分功能出去,所以我们需要做推,但我听说在Mercurial或Git上,没有办法推送单个文件或文件夹......被推或没有被推.所以我们要么还原所有那些我们不想推送的文件,要么直到推送之前我们才应该提交 - 在提交之后,我们推送?

Der*_*ger 11

管理它的最佳方法(无论您使用的是Mercurial,Git还是任何其他版本控制系统)都是为了确保您的工作在与这些"功能部分"相对应的分支上完成.如果某一部分工作需要独立于其他工作而被释放的可能性很小,那么它应该从一开始就拥有自己的分支.

这使您可以灵活地推送"功能的一部分",并且更适合于"功能的一部分"和某些其他"功能的一部分"都包含对同一文件的更改的情况.

在这里使用Mercurial或Git的好处是管理这些分支是微不足道的,因此创建和使用它们的成本(即使它们不是必需的)也是最小的.

现在,你不能总是预见到一切.但是,如果你最终陷入了你所描述的局面中,那么很容易就能摆脱困境.假设您在本地有100个更改集(尚未在服务器上),并且您只想推送1个文件的当前内容.创建您正在处理的存储库的克隆回到服务器修订版,复制文件,提交,推送和集成.在Mercurial中,这将类似于以下内容:

$ cd ~/project
$ hg clone http://server/project/trunk trunk-oops
$ cp trunk/shouldve-branched trunk-oops/shouldve-branched
$ cd trunk-oops; hg addrem; hg ci -m "We need to organize better!"; hg push
$ cd ../trunk; hg fetch ../trunk-oops
Run Code Online (Sandbox Code Playgroud)

  • 如果空间是一个问题(或者即使它不是),请在本地克隆.Mercurial将创建硬链接,因此不会消耗额外的空间.hg clone -rSERVER_REVISION_HASH trunk trunk-oops (2认同)