Looking for git Answers? Try Ask4KnowledgeBase
Looking for git Keywords? Try Ask4Keywords

Gitgit-svn


備考

非常に大きなSVNリポジトリのクローン作成

git-svnがSVNリポジトリの完全な履歴を再構築する必要があるため、SVNリポジトリ履歴が本当に大きければ、この操作に数時間かかることがあります。幸いにもSVNリポジトリを一度クローンするだけで済みます。他のgitリポジトリと同様に、repoフォルダを他の共同編集者にコピーすることもできます。複数のコンピュータにフォルダをコピーすると、大きなSVNリポジトリを最初からクローン作成するだけですばやくできます。

コミットとSHA1について

git svn dcommitコマンドを使用すると、ローカルのgitコミットが書き換えられます。このコマンドは、SVNサーバーで作成されたSVNリビジョンを参照するgit commitメッセージにテキストを追加します。これは非常に便利です。しかし、新しいテキストを追加するには、実際には実行できない既存のコミットのメッセージを変更する必要があります。gitコミットは変更できません。解決策は、同じ内容と新しいメッセージで新しいコミットを作成しますが、技術的には新しいコミットです(つまり、git commitのSHA1が変更されます)

git-svnのために作成されたgitコミットはローカルなので、gitコミットのSHA1 idsは各gitリポジトリごとに異なります!つまり、SHA1を使って他の人からのコミットを参照することはできません。同じコミットでは、それぞれのローカルgitリポジトリに異なるSHA1があるからです。リポジトリの異なるコピー間でコミットを参照する場合は、SVNサーバーにプッシュするときにコミットメッセージに追加されたsvnリビジョン番号に依存する必要があります。

SHA1をローカル操作に使用することもできます(特定のコミット、チェリーピックおよびリセットなどの表示/差分)

トラブルシューティング

git svn rebaseコマンドがチェックサムの不一致エラーを発行する

コマンドgit svn rebaseは、次のようなエラーを送出します。

  Checksum mismatch: <path_to_file> <some_kind_of_sha1>
  expected: <checksum_number_1>
    got: <checksum_number_2>

この問題の解決策は、問題のファイルが最後に修正されたときにsvnをリビジョンにリセットし、git svnをフェッチしてSVN履歴を復元することです。 SVNリセットを実行するコマンドは次のとおりです。

  • git log -1 - <path_to_file> (コミットメッセージに表示されるSVNリビジョン番号をコピーします)
  • git svn reset <revision_number>
  • git svn fetch

あなたは再びSVNからデータをプッシュ/プルできるはずです

ファイルがコミットに見つかりませんでした SVNからフェッチまたはプルしようとすると、次のようなエラーが表示されます

<file_path> was not found in commit <hash>

これは、SVNのリビジョンが何らかの理由でローカルコピーに存在しないファイルを変更しようとしていることを意味します。このエラーを取り除く最善の方法は、ファイルのパスを無視してフェッチを強制し、最新のSVNリビジョンのステータスに更新します:

  • git svn fetch --ignore-paths <file_path>

git-svn 関連する例