我对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忽略我工作目录中已有的文件,只需进行合并并发送文件.我怀疑mercurial队列可以做到这一点,但我还没有完全搞定mq.
可能重复:
使用subversion进行部分提交
有什么办法我只能将文件中的一些更改提交给SVN吗?假设我正在研究2个新功能(或错误修复),它们都会影响同一个文件.我完成了1个功能,我只想提交其中一个更改.我意识到我可以为每个功能创建一个单独的分支,但这会以其他方式使事情变得复杂,不断在我可能正在同时工作的几个功能分支之间来回切换.
目前,当我需要这样做时,我会复制该文件,删除我不想提交的更改,然后提交.然后我把副本放回原来我刚刚提交的东西上,只留下我不想提交的更改.这可能是为了解决一个小错误修复可能提交1行所做的很多事情.
我知道有些人可能会说,你不应该这样做,因为提交整个文件的全部意义在于你确切地知道你提交了什么,并且它不会破坏代码.但由于您可以提交单个文件,因此这种情况没有太大区别,因为您仍然可能忘记提交与您正在更改的文件相关的其他文件,但仍会导致代码被破坏.或者同样忘记添加新功能所依赖的文件.