1. ホーム
  2. svn

[解決済み] 既存のGitリポジトリをSVNにプッシュする

2022-03-26 12:31:49

質問

これまで全ての作業をGitで行い、GitHubにプッシュしていました。ソフトウェアとサイトの両方に非常に満足しており、今のところ仕事のやり方を変えたいとは思っていません。

私の博士課程の指導教官は、すべての学生に自分の作品を大学でホストされているSVNリポジトリに保管するよう求めています。既存のSVNリポジトリをGitにプルダウンすることについては、たくさんの文書やチュートリアルが見つかりましたが、Gitリポジトリを新しいSVNリポジトリにプッシュすることについては何もありませんでした。git-svn やフレッシュブランチ、リベースなどの素晴らしい用語の組み合わせでこれを行う方法があるはずですが、私は Git 初心者で、そのいずれにも自信がありません。

それから、いくつかのコマンドを実行するだけで、好きなときにそのSVNリポジトリにコミットをプッシュできるようにしたいのです。私はGitを使い続け、SVNリポジトリにGitにあるものを反映させたいだけなのです。

SVNにコミットするのは私一人になりますが、何か違いがありますか?

解決方法は?

私もこれが必要で、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を実行すると かもしれない が発生します。これを解決するには、状態を "unmerged" にしてファイルを追加し、リベースを再開します。最終的には、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"] セクションを作成します。

その後 git svn init を新たに作成します。