私もこれが必要でした.Bombeの答えといくつかのいじりの助けを借りて、私はそれを機能させました. レシピは次のとおりです。
Git のインポート -> Subversion
1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase origin/trunk
5.1. git status
5.2. git add (conflicted-files)
5.3. git rebase --continue
5.4. (repeat 5.1.)
6. git svn dcommit
#3 の後、次のような不可解なメッセージが表示されます。
上位レベルの URL を使用:protocol:///path/to/repo/PROJECT => protocol:///path/to/repo
それを無視してください。
#5 を実行すると、競合が発生する可能性があります。これらを解決するには、状態が「マージされていない」ファイルを追加し、リベースを再開します。最終的には完了です。次に、 を使用して SVN リポジトリに同期しますdcommit
。それで全部です。
リポジトリの同期を維持する
次のコマンドを使用して、SVN から Git に同期できるようになりました。
git svn fetch
git rebase trunk
Git から SVN に同期するには、次を使用します。
git svn dcommit
最後の注意事項
ライブ リポジトリに適用する前に、ローカル コピーでこれを試してみることをお勧めします。Git リポジトリのコピーを一時的な場所に作成できます。cp -r
すべてのデータがリポジトリ自体にあるため、単純に を使用します。次に、以下を使用して、ファイルベースのテスト リポジトリを設定できます。
svnadmin create /home/name/tmp/test-repo
そして、次を使用して作業コピーをチェックアウトします。
svn co file:///home/name/tmp/test-repo svn-working-copy
これにより、永続的な変更を加える前に、いろいろと試すことができます。
追記:間違えたらgit svn init
うっかり間違った URL で実行git svn init
してしまい、作業のバックアップを作成するほど頭がよくなかった場合 (聞かないでください...)、同じコマンドをもう一度実行することはできません。ただし、次を発行して変更を元に戻すことができます。
rm -rf .git/svn
edit .git/config
そして、セクション[svn-remote "svn"]
セクションを削除します。
git svn init
その後、新たに実行できます。