2

git-svn を使用して SVN から移行中の Git リポジトリがあります。以前git svn fetchは SVN から最新のコミットを取得していました。レポジトリを GitHub にプッシュしたかったのですが、削除しなければならない100 MB を超えるファイルが履歴にいくつかあったため、 bfg レポ クリーナーを使用してそれらを削除しました。

$ java -jar bfg-1.12.14.jar --strip-blobs-bigger-than 100M
...
In total, 10235 object ids were changed. Full details are logged here:
...
BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive
...
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
Counting objects: 204963, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (171827/171827), done.
Writing objects: 100% (204963/204963), done.
Total 204963 (delta 91547), reused 106805 (delta 0)

$ git svn fetch -A authors-transform.txt
fatal: Invalid revision range b156a7b66be002c3bf38987ea503f5c852146343 
rev-list --pretty=raw --reverse b156a7b66be002c3bf38987ea503f5c852146343..refs/remotes/git-svn --: command returned error: 128

これらのファイルを履歴に再度入れたくない (GitHub の制限を超えている) ため、リポジトリ全体を再初期化せずに機能させるにはどうすればよいですか? ハッシュを再計算する方法、または不一致を無視する方法はありますか?

4

2 に答える 2

1

Subversiongit-svnから Git へのかなり適切なミラーリング サポートを提供しますが、それを BFG などの履歴書き換えクリーンアップ ツールと組み合わせることはできません。

リポジトリをクリーンアップする必要がある場合は、Subversion から Git への移行を完了し、変換と移行のスクリプトを作成し、Git ファースト コミットに移行して Subversion リポジトリを放棄することを検討する必要があります。git-svnもう気にする。Subversion の履歴をスクラブするのは非常に難しく、スクラブされた Subversion と BFG でスクラブされた Git を相互に関連付けることは不可能です。あなたがすでに観察git-svnしたように、書き換えを容認するつもりはありません。

BFG のクリーンアップを 1 回限りの演習として計画し、進行中のgit-svnフェッチに対してスクリプトを作成してテストしますが、実行したら、Subversion の使用を完全に停止し、Git のみを使用します。

于 2016-11-11T13:56:44.493 に答える