1

過去に、GitHub のインポート機能を使用して SVN リポジトリをインポートしたことがあります。リポジトリは、SVN 履歴に接続されていない裸の git と同じになりました。コミットには情報が含まれていませんsvn-id

しばらくしてコミットが SVN リポジトリに追加されましたが、予想どおり git リポジトリは同じままでした。

そこで、元の SVN に追加されたコミットで git リポジトリを「更新」したいと思います。試してみましgit-svnたが、クローンされたsvnとクローンされたgitの間の共通の履歴をgitに認識させることができませんでした。

私は使用を検討しましたがformat-patch、このアクションで問題が解決すると信じていますが、より自動化された方法を探していました。

唯一の制限は、git の履歴を維持する必要があること ( rebase'ing なし) と、コミットが SVN リポジトリにできるだけ忠実であること (svn-idコミット メッセージに追加されないこと) です。

4

1 に答える 1

1

ご想像のとおり、コミットを適切に「マージ」することは、ここでは実際には機能しません。を使用する必要がありますformat-patch。これが私がそれを行う方法です:

$ git svn clone --no-metadata svn://.../ new-svn-repo
$ cd new-svn-repo
$ git log

(SVN の著者情報をフォーマットから適切な著者情報に書き換える-Aオプションを追加したい場合があります。詳細については、 を参照してください。)git svn cloneuser@uuidJoe User <user@example.com>man git-svn

ログを調べて、github リポジトリ内の最新のコミットに対応するコミットを見つけます。それがコミットのabcdef場合:

$ git format-patch -k abcdef

*.patchこれで、移植したい新しいコミットに対応する大量のファイルができあがります。そう...

$ cp *.patch /github/repository/location
$ cd /github/repository/location
$ git am -k --keep-cr *.patch

多田!master を Github にプッシュするだけです。

(Git が十分に新しくない場合は、--keep-crへの引数について文句を言うことがありgit amます。ソース ファイルに CR が含まれていない場合は、単に削除してください。ただし、CR が含まれている場合は、Git--keep-crをアップグレードする必要がある場合があります。パッチ ファイルの CR は処理時に出力されます。これにより、パッチの適用に失敗する可能性があります。)git mailsplitgit am

于 2010-11-16T03:44:38.760 に答える