如何强制mercurial接受空提交

时间:2010-08-24 22:46:59

标签: svn mercurial hgsvn

我正在尝试使用hgsvn转换SVN repo并且我有一些提交,其中SVN属性被修改,但由于Mercurial不使用它们,它将此视为空提交并中止。有没有办法强制这个hg commit接受一个不改变任何东西的提交?

我对hgsvn的内部不太熟悉,不能破解它以跳过空提交。

5 个答案:

答案 0 :(得分:3)

我认为你不能在mercurial做空提交。这是a thread explaining why

答案 1 :(得分:3)

如果向头版本添加本地svn。$ REVNUM标记(=现在还具有svn。($ REVNUM-1)标记的修订版),则可以跳过此提交。然后你可以继续使用hgpullsvn。

假设您的导入处于此状态(上次导入的转速为15800,仅限属性的转速为15801):

$ hg log -l1
changeset:   1234:123456789abc
branch:      trunk
tag:         tip
tag:         svn.15800
parent:      1233:cba987654321
user:        Rudi <rudi@example.com>
date:        Tue Aug 24 11:42:23 2010 +0200
summary:     Foobar

$ svn info
Path: .
URL: svn+ssh://example.com/foobar/trunk
Repository Root: svn+ssh://example.com/foobar
Repository UUID: 26c7c274-8ed1-4e7f-bdc1-5c767a948b10
Revision: 15801
Node Kind: directory
Schedule: normal
Last Changed Author: rudi
Last Changed Rev: 15801
Last Changed Date: 2010-08-24 14:00:29 +0200 (Di, 24 Aug 2010)

然后你只需添加svn.15801标签:

$ hg tag -l -r 123456789abc svn.15801

和contunie导入。

但请在尝试之前进行备份。

答案 2 :(得分:1)

当我之前需要在p4和hg中进行空提交时,我只是使用了一个被设置为“是”空提交的文件。只需将一些随机字符串(我通常使用时间和日期)转储到一次性文件中,然后hg commit转走....

答案 3 :(得分:1)

根据@ vorrtex对原始问题的评论,在Mercurial中强制空提交的最简单方法如下:

  1. 添加新文件(例如Dummy.txt)并提交。
  2. hg forget Dummy.txt
  3. hg commit --amend
  4. 这将从先前的提交中删除Dummy.txt,将其留空。 (您可以使用例如TortoiseHg执行第1步,但您需要使用命令行工具执行第2步和第3步。)

    我将此添加为新答案,因为最初扫描此主题时我错过了评论,而现有答案并未创建真正的空提交。

答案 4 :(得分:0)

或许,以下情况对您不会有所帮助,但会影响其他读者。

您可以通过导入几乎空的补丁进行“空”提交。我导出了一个补丁,删除了其中的所有更改,只留下了3行(diff ...,--- ...和+++ ...),并导入了hg import --bypass --message ...