8

我正在尝试转换一个 SVN 存储库,hgsvn并且我有一些修改了 SVN 属性的提交,但由于 Mercurial 不使用这些,它认为这是一个空提交并中止。有没有办法强制它hg commit接受一个不会改变任何东西的提交?

hgsvn对破解它以跳过空提交的内部结构不够熟悉。

4

5 回答 5

3

我认为你不能在 mercurial 中做空提交。这是一个解释原因的线程

于 2010-08-25T02:01:40.497 回答
3

如果您将本地 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

并继续导入。

但是在你尝试这个之前做一个备份。

于 2010-08-25T06:21:39.023 回答
1

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

于 2010-08-24T22:54:51.877 回答
1

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

  1. 添加一个新文件(比如,Dummy.txt)并提交。
  2. hg forget Dummy.txt
  3. hg commit --amend

这将从Dummy.txt先前的提交中删除,将其留空。(您可以在第 1 步中使用 TortoiseHg,但在第 2 步和第 3 步中您需要使用命令行工具。)

我将此添加为新答案,因为最初扫描此线程时我错过了评论,并且现有答案不会创建真正空的提交。

于 2017-10-16T07:34:04.653 回答
0

也许,以下内容不会帮助您解决这种情况,但可能会帮助其他读者。

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

于 2014-01-04T00:32:36.760 回答