最佳答案
我对 Mercurial 还是比较新的,我的团队现在正在试用它作为 Subversion 的替代品。
如何提交一个文件并将其推送到另一个存储库,而不提交工作目录中的其他修改(或者至少不推送到另一个存储库) ?
数据库迁移时会发生这种情况。我们希望将迁移提交到源代码管理,这样 DBA 就可以在我们进行代码修改以进行数据库迁移的同时查看和编辑它。这些变化还没有准备好,所以我们不想把它们都推出去。
在颠覆中,我会简单地做:
svn add my_migration.sql
# commit only the migration, but not the other files I'm working on
svn commit -m "migration notes" my_mygration.sql
继续在当地工作。
对于 mercurial,当我将它推出到另一个存储库时,如果有我没有推出的更改,它希望我将它们拉下来,合并它们,并将合并提交到存储库。合并后的提交不允许您省略文件,因此它强制您提交本地存储库中的所有内容。
我能想到的最简单的方法是将文件提交到本地存储库,克隆本地存储库,从实际存储库中获取任何新的更改,合并它们并提交合并,然后它们将我的更改推出。
hg add my_migration.sql
hg commit -m "migration notes" my_migration.sql
cd ..
hg clone project project-clone
cd project-clone
hg fetch http://hg/project
hg push http://hg/project
这个方法很有效,但是我感觉我错过了一些更简单的方法,比如告诉 mercurial 忽略我工作目录中已经存在的文件,只需要进行合并并发送文件。我怀疑多变的队列可以做到这一点,但我还没有完全理解 mq。