2

git リポジトリを hg リポジトリに変換しようとしています。

問題は、数か月前に という名前のファイルが git リポジトリに追加された'favicons/Icon\r'ことです。これは git では問題ありません。ファイルは削除されましたが、履歴にあるため、hg convert拡張機能を実行すると次の出力が得られます。

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

これを回避する方法はありますか、それとも git リポジトリにとどまる必要がありますか? どうもありがとう!

4

2 に答える 2

2

そのパス名は Mercurial では無効であるため、次の 1 つ以上を実行する必要があります。

  • 「悪い」コミットやファイルをスキップするコードで Git リポジトリを変換する
  • 代わりに「適切な」ファイル名を代入するコードで Git リポジトリを変換します
  • ファイル名が表示されない変更された Git リポジトリに Git リポジトリをコピーします (そのファイルを含むコミットを削除または変更します。前の 2 つの方法と同様ですが、Mercurial への変換中ではなく、Git 内で実行します)。

最初の 2 つは、 を直接使用して簡単に実現できますhg convert。たとえば、ドキュメントには、ファイル名でファイルを除外または名前変更する機能が記載されています。ただし、私は実際にこれを自分で試したことはありません。

git filter-branch最後は、 を使用して達成できるため、比較的簡単です。「比較的簡単」の「相対的」は非常に相対的です。filter-branch正確に使用するのは特に簡単ではありません (新しい Git-to-Mercurial コンバーターを作成するよりも簡単です)。

Git リポジトリのコミット履歴から大きなファイルを削除/削除する方法を参照してください。例として、すべての Git リポジトリのコミット履歴からファイルを完全に削除しますGreg Bacon の回答がタグの調整に正しく使用されていることに注意してください--tag-name-filter(これは、コピー中にコミットが変更された時点またはそれ以降の履歴を指すタグがある場合に必要です)。

于 2016-10-06T07:45:06.803 に答える