我正在尝试转换一个 SVN 存储库,hgsvn
并且我有一些修改了 SVN 属性的提交,但由于 Mercurial 不使用这些,它认为这是一个空提交并中止。有没有办法强制它hg commit
接受一个不会改变任何东西的提交?
我hgsvn
对破解它以跳过空提交的内部结构不够熟悉。
我认为你不能在 mercurial 中做空提交。这是一个解释原因的线程。
如果您将本地 svn.$REVNUM 标签添加到头修订版(=现在也具有 svn.($REVNUM-1) 标签的修订版),则可以跳过此提交。然后你可以继续使用 hgpullsvn。
假设您的导入处于此状态(最后导入的 rev 为 15800,仅属性 rev 为 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
并继续导入。
但是在你尝试这个之前做一个备份。
当我之前需要在 p4 和 hg 中进行空提交时,我只是使用了一个被留作“成为”空提交的文件。只需将某种随机字符串(我通常使用时间和日期)转储到一次性文件中,然后hg commit
......
根据@vorrtex 对原始问题的评论,在 Mercurial 中强制空提交的最简单方法如下:
Dummy.txt
)并提交。hg forget Dummy.txt
hg commit --amend
这将从Dummy.txt
先前的提交中删除,将其留空。(您可以在第 1 步中使用 TortoiseHg,但在第 2 步和第 3 步中您需要使用命令行工具。)
我将此添加为新答案,因为最初扫描此线程时我错过了评论,并且现有答案不会创建真正空的提交。
也许,以下内容不会帮助您解决这种情况,但可能会帮助其他读者。
您可以通过导入几乎空的补丁来进行“空”提交。我导出了一个补丁,删除了其中的所有更改,只留下了 3 行(差异...、---...和 +++ ...),然后使用hg import --bypass --message ...