2016-10-06 61 views
1

我正要將我的git repo轉換爲hg repo。問題是幾個月前有一個文件爲git repo添加了一個名爲'favicons/Icon \ r'的文件,這對git來說很好。該文件已被刪除,但因爲它是在歷史上我跑了汞轉換擴展時,得到如下的輸出:hg convert abort:' n'和' r'在文件名中不允許使用:

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

有沒有辦法來解決這個還是我必須留在我的混帳回購協議?非常感謝!

回答

2

由於該路徑名在Mercurial是無效的,你必須做一個或多個以下:

  • 轉換Git倉庫與跳過「壞」的承諾和/或文件中的代碼
  • 轉換Git存儲庫,替換代替「好」文件名的代碼
  • 將Git存儲庫複製到更改的Git存儲庫中,其中文件名不會出現(刪除或更改具有該文件的提交,前兩種方法,但是在Git中而不是在Mercurial轉換過程中)。

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

最後一個比較容易,因爲您可以使用git filter-branch來實現它。 「相對容易」中的「相對」是很有相對:filter-branch並不是特別容易正確使用(這比編寫新的Git到Mercurial轉換器容易)。

查看How to remove/delete a large file from commit history in Git repository?Completely remove file from all Git repository commit history的例子。請注意,Greg Bacon's answer正確使用--tag-name-filter來調整標記(如果您有在複製過程中更改提交點時或超出提交點的歷史的標記,則這是必需的)。

+0

謝謝!我使用鏈接文檔中的--filemap解決了這個問題。 – Klarre

1

我解決這樣說:

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