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

时间:2010-06-10 18:47:32

标签: git mercurial dvcs

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

但是,假设我们处理项目,并且经常提交文件。现在出于某种原因,经理想要部分功能出去,所以我们需要做推,但我听说在Mercurial或Git上,没有办法推送单个文件或文件夹......被推或没有被推。所以我们要么必须还原所有那些我们不想推送的文件,要么我们只是在推送之前就不应该提交 - 在提交之后,我们推送?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

在分支机构上发展。

拥有发布分支和功能分支。在每个功能可用时合并。

答案 2 :(得分:3)

经常提交是一种好习惯。在您的情况下,您似乎需要更频繁地开始标记和/或分支。

答案 3 :(得分:1)

扩展并澄清别人所说的话:经常提出和灵活推动并不是相互排斥的。

您确实希望提前计划,并做出提交,以便您能够适应。这意味着两件事:您需要确保经常提交,并且需要经常分支(如在git中)。如果您的提交很小,如果您需要有选择地将部分工作分组在一起,那么以后重新组织它们会更容易。如果您的分支机构组织良好,您可能已经拥有了一个分支,这正是您想要推动的分支。

比较这两个:

One branch, few commits:

- A1 - B1 - C1 - B2 - A2 - B3 - C3 (master)

Many branches, many commits:

  M1 - M2 (master)
 /
o - A1 - A2 - A3 - A4 - A5 - A6 (topicA)
|\
| B1 - B2 - B3 - B4 - B5 - B6 - B7 (topicB)
\ 
 C1 - C2 - C3 - C4 - C5 (topicC)

现在,如果你想按原样发布这三个主题中的任何一个,你所要做的就是将它合并到master并推送!如果你想释放一半的topicA,那一半在提交A1,A3,A4和A6中处理,你所要做的就是使用rebase topicA来首先放置这四个提交,将它们的最后一个合并到master中,并推。主题A(A2和A5)的其余部分可以继续进行进一步的工作。

  M1 - M2 ------------- X (master)
 /                     /
o - A1 - A3' - A4' - A6' - A2' - A5' (topicA)

(由A1'表示,...因为使用git,两个具有相同内容但不同父级的提交实际上是不同的提交。)