【发布时间】:2010-09-12 14:54:55
【问题描述】:
我对 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。
【问题讨论】:
-
这是我在 git 中真正看重的一个功能(我一直都在使用它),并且会让我很难切换...
-
这实际上不是我现在做事的方式,因为我已经了解了很多关于 hg 的知识。现在我将在本地提交更改,更新回以前的版本并在那里进行更改并“hg push --rev”。仅轻推当前分支。然后更新回其他工作并继续。如果我决定不再想要那份工作,我只会“剥掉”它。更容易,您无需担心被拒绝的文件大块,所有内容都被跟踪并在源代码控制中。
标签: version-control mercurial merge push