私はGITとSVNクライアントの両方を使ってリポジトリにアクセスしたいと思います。私が想像したやり方は、自動双方向移行によるものです。ユーザがGITリポジトリにプッシュすると、SVNリポジトリにもCOMMITされ、その逆もあります。GITとSubversionのリポジトリを同期する方法はありますか?
これを行うのに役立つツールはありますか?
私はGITとSVNクライアントの両方を使ってリポジトリにアクセスしたいと思います。私が想像したやり方は、自動双方向移行によるものです。ユーザがGITリポジトリにプッシュすると、SVNリポジトリにもCOMMITされ、その逆もあります。GITとSubversionのリポジトリを同期する方法はありますか?
これを行うのに役立つツールはありますか?
これを行う最も良い方法は、git svn
をSubversionクライアントとして使用することです。これは、SubversionリポジトリとGitリポジトリとの間の双方向統合を提供します。 Gitリポジトリを取得したら、どこにでもリポジトリを公開して公開することができます。
私はこれを定期的に行います。職場では、「マスター」リポジトリであるSubversionリポジトリがあり、通常はgit svn
を使用してアクセスします。時には、私がマージのようなより具体的なSubversionの機能を必要とすることをしている場合は、通常のsvn
クライアントをリポジトリに対して使用します。
これを行う簡単な方法は、メインリポジトリをSubversionにとどめて、git-svnをローカルで使用することです。
svn2gitは、svnをgitに簡単にインポートしてから、ミラールビーアプリケーションgit2svnを簡単にインポートすると考えられます。
詳細はthis questionです。
他の答えで述べたように、 'git svn
'は必須ですが、それらのルビモジュールはGitの実際のディレクトリとして持っていないのに "Subversionブランチ/ディレクトリ"を尊重するのに役立ちます。
また、gitとsubversionの間のレポを同期するために使用されたhttp://unethicalblogger.com/posts/2008/10/git_back_subversion_mostly_automagically_part_33と、gitとsubversionの両方を使用する複数の開発者とそれらの間のプロキシを同期させるために使用された、
私は裸のgit中央レポ+ SVN-gitの橋がある - ブランチの現在 'と枝にGITリポジトリを追跡する「gitcentral」でSVNを追跡し、
をGitのSVNでレポそれから私は、更新後を使用そのような中央のgitリポジトリ内フック:
#!/bin/bash
# Anything inserted into GIT - move it back to SVN
echo
echo '* Pushing data into SVN branch'
cd /home/git/BRIDGE
unset GIT_DIR
# current - svn branch locally and central git branch on project.git repos
# centralgit - unmodified centralgit branch
git fetch /home/git/repositories/project.git/ master:centralgit || (echo "Error while pulling data into bridge repository"; exit 1)
git checkout -b temp centralgit || exit 2
git rebase current || exit 3
git checkout current || exit 4
git reset --hard temp || exit 5
git svn dcommit || exit 6
git branch -D temp || exit 7
echo '* Pushed correctly data into SVN'
exit 0
ほとんどの時間だが、作品...
正確に何をしたい行い、新たな解決策があります--- SubGit。それは並行安全です(私はgit-svnベースのbashスクリプトについては同じことは言えません)。
これは非常に有望ですね、ありがとうございます。 –
私たちのチームはまったく同じ問題を抱えていましたが、実験を少しして、チームのgitリポジトリと企業のSubversionリポジトリの間の変更を同期させるgit-Subversionブリッジを作りました。私たちのgitの使用法は、他のSubversionユーザーにとっては透過的です。
詳細については、https://github.com/mrts/git-svn-bridgeに記載されています。
このセットアップは、実稼動環境で1年以上使用されています。
セットアップの最大の注意点は、gitリポジトリがSVNトランク(または別の単一ブランチ)だけを追跡するということです。他のgitブランチは、マージトランク中に1つのコミットに押しつぶされます。これは問題ではありません。短命のタスクブランチを使用して、それらを1つのチャンクでメインラインに行く軽量で一時的な "作業単位"とみなし、ブランチ履歴をgitに保持します。
これは1人のユーザーに有効ですが、チームの2つのリポジトリ間で実際のブリッジをセットアップしようとする人にとっては不十分です。 gitでローカルで行われた変更は、毎回git svn rebaseによって再適用され、その後のgit pushは別のgitリポジトリへと同じ変更を何度も何度も繰り返します。 –