簡體   English   中英

hg convert abort:文件名中不允許使用'\\ n'和'\\ r':

[英]hg convert abort: '\n' and '\r' disallowed in filenames:

我即將將git repo轉換為hg repo。

問題是幾個月前,有一個名為'favicons/Icon\\r'的文件添加到git倉庫中,這對於git來說很好。 該文件已被刪除,但是由於它在歷史記錄中,因此在運行hg convert擴展名時會得到以下輸出:

converting...
816 Favicons
transaction abort!
rollback completed
abort: '\n' and '\r' disallowed in filenames: 'favicons/Icon\r'!

有沒有辦法解決這個問題,還是我必須呆在git repo上? 非常感謝!

由於該路徑名在Mercurial中無效,因此您必須執行以下一項或多項操作:

  • 使用跳過“錯誤”提交和/或文件的代碼轉換Git存儲庫
  • 用替換為“好”文件名的代碼轉換Git存儲庫
  • 將Git存儲庫復制到更改后的Git存儲庫中,在該存儲庫中文件名不會出現(刪除或更改具有該文件的提交,這是前兩種方法,但在Git中而不是在轉換為Mercurial的過程中進行)。

前兩個可能很容易直接使用hg convert實現。 例如, 文檔提到了通過文件名排除或重命名文件的功能。 不過,我自己實際上還沒有嘗試過。

最后一個相對容易,因為您可以使用git filter-branch來實現。 “相對”,在“相對容易”是非常相對的: filter-branch是特別不容易正確使用(它只是比寫一個新的Git到Mercurial的轉換更容易)。

請參閱如何從Git存儲庫中的提交歷史記錄中刪除/刪除大文件? 示例的所有Git存儲庫提交歷史記錄中完全刪除文件 請注意, 格雷格·培根(Greg Bacon)的答案正確使用了--tag-name-filter來調整標簽(如果您的標簽在復制過程中更改或更改了提交時指向歷史記錄,則這是必需的)。

我是這樣解決的:

echo "exclude \"favicons/Icon"$'\r'$"\"" >> omit
hg convert --filemap omit mygitrepo myhgrepo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM