私もこれが必要でした。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
git svn init
誤って間違ったURLで実行し、作業のバックアップを取るほど賢くなかった場合(質問しないでください...)、同じコマンドをもう一度実行することはできません。ただし、次のコマンドを実行して変更を取り消すことができます。
rm -rf .git/svn
edit .git/config
そして、セクション[svn-remote "svn"]
sectionを削除します。
その後、git svn init
新たに実行できます。