[解決済み] 既存のGitリポジトリをSVNにプッシュする
質問
これまで全ての作業を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
を新たに作成します。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 既存の、プッシュされていないコミットメッセージを修正するには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] mavenのpomにscmの情報を追加する目的は何ですか?
-
[解決済み] コマンドプロンプトからSVNクリーンアップを実行する
-
[解決済み] SVNでディレクトリを無視するには?
-
[解決済み] 既存のGitリポジトリをSVNにプッシュする
-
[解決済み] なぜGitはSubversionよりも優れているのですか?
-
[解決済み】Gitでローカルの作業ディレクトリをクリアする方法とは?重複
-
[解決済み] バージョン管理されていないファイルをすべてSVNに「追加」するには?
-
[解決済み] あるリビジョンにコミットされたファイルを一覧表示する
-
[解決済み] Git、Mercurial、Bazaarの相対的な長所と短所は何ですか?[クローズド]
-
[解決済み] サブバージョン履歴の検索(全文)