在我的Mercurial存储库中,有人输入了空白分支名称:
如果我hg id -r 2004
,我确实得到了空白文本。现在的问题是,这导致我们的Redmine安装出现问题,因为它无法将存储库与错误同步:
NoMethodError (undefined method `[]' for nil:NilClass):
lib/redmine/scm/adapters/mercurial_adapter.rb:123:in `branchmap'
app/models/repository/mercurial.rb:150:in `latest_changesets_cond'
app/models/repository/mercurial.rb:119:in `latest_changesets'
app/controllers/repositories_controller.rb:94:in `show'
lib/redmine/sudo_mode.rb:63:in `sudo_mode'
我一直在试图弄清楚如何处理这个问题 - 是否有某种方法可以重命名分支或以其他方式摆脱它。
我已尝试切换到分支,然后hg commit --close-branch
。当我试图推动时,我收到一个错误:
Traceback (most recent call last):
File "hg", line 61, in <module>
File "mercurial\dispatch.pyo", line 88, in run
File "mercurial\dispatch.pyo", line 183, in dispatch
File "mercurial\dispatch.pyo", line 324, in _runcatch
File "mercurial\dispatch.pyo", line 332, in _callcatch
File "mercurial\scmutil.pyo", line 154, in callcatch
File "mercurial\dispatch.pyo", line 314, in _runcatchfunc
File "mercurial\dispatch.pyo", line 918, in _dispatch
File "mercurial\dispatch.pyo", line 673, in runcommand
File "mercurial\dispatch.pyo", line 926, in _runcommand
File "mercurial\dispatch.pyo", line 915, in <lambda>
File "mercurial\util.pyo", line 1195, in check
File "mercurial\commands.pyo", line 4194, in push
File "mercurial\exchange.pyo", line 483, in push
File "mercurial\exchange.pyo", line 1069, in _pushchangeset
File "mercurial\exchange.pyo", line 697, in _pushcheckoutgoing
File "mercurial\discovery.pyo", line 338, in checkheads
File "mercurial\discovery.pyo", line 248, in _headssummary
我尝试hg commit --close-branch
,然后切换回我的工作分支并推送,结果相同。
如果我回滚提交,更新到我的活动分支,进行更改,并提交+推送,一切正常。到目前为止,我对如何处理这个流氓分支感到茫然。
答案 0 :(得分:1)
您可以使用hg convert with the --branchmap option更改任何给定存储库中的分支名称。
在这种特殊情况下,我不知道奇怪的命名是否会导致此功能出现问题 - 我认为您必须尝试并查看。
现在,重命名分支的问题是,如果已共享(推送/拉取/克隆)存储库,则修改后的克隆将与其他任何克隆不同步。因此,您必须找到每个克隆并对所有克隆运行相同的操作。我认为事后可以正常工作(即他们能够正确同步)。
答案 1 :(得分:0)
我最终更新了Redmine源代码。
代码在幕后调用的是什么:
hg rhsummary --encoding=ascii --config extensions.redminehelper="C:\Program Files\redmine-3.4.5\lib\redmine\scm\adapters\mercurial\redminehelper.py"
问题在于错误命名的分支生成了一系列“00”(NUL
)个字符。我没有弄清楚如何重命名分支,而是注入代码以用“_”替换\x00
。
如果有办法在Mercurial中修复此问题,我仍然希望在回购中修复它。