2012-02-24 12 views
2

私のエンタープライズはソース管理としてsvnを使用します。Gitを使ってサーバー上でSubversionをローカル開発するには?

私は私の開発のためにgitを使用したい(枝がとても便利です)。

svnプロジェクトをチェックアウトしたり、開発用にgitでローカルで作業したりして、svnで最終変更をコミットすることは問題ありませんか?

私たちがこのように働くときに知っておくべきことは何ですか?

答えて

4

git-svn私にとってはうまく機能しましたが、(サーバー上の)分岐や、Subversionの外部などの高度な機能のいくつかは滑らかではない可能性があります。何かにコミットする前にユースケースをテストしてください。

1

私は適切にgitのために慣れてきた後に小さな問題で、一年以上のためにこれを行っています。覚えておくべきいくつかの注意点があります。

dcommitの前に、常に「git svn dcommit --dry-run」を実行することをお勧めします。時には、実際に、別のブランチから大量のコミットをプッシュしようとしていることに気付かない場合があります。 gitのマージ後に。

第2に、私は自分自身のために、マスターブランチでは決して作業しません。私はsvnに入れたい前にgitブランチを作ってからmasterブランチにREBASEします。 svnは各ブランチ/トランク/タグに「線形履歴」を持つ必要があるため、マージするのではなくリベースを使用してください。また、rebaseが何をするのか、またどのようにトラブルから脱出するのかを学びます(rebase --abortなど)。私は物事を再構築する前に常に「バックアップ支店」を作ります。

ので、SVNにプッシュするために、これは私のワークフローです:

git checkout master 
git svn rebase 
git rebase <my_working_branch> 
gitk (to review the changes) 
git svn dcommit --dry-run 
git svn dcommit 
0

あなたはこのためにgit-svnのを使用する必要があり、それはほとんどどこでも利用可能であるとさえ非常に大きいのsvnリポジトリで、非常によく動作します。 gitとsvnで作業するときに便利なワークフローを見つけました。

git svn clone svn+ssh://pathtorepo localname 
git branch workingbranch 
git co workingbranch ... 
... work in branch 
git co master 
git merge workingbranch 
git svn dcommit 

あなたは複雑なGitの歴史を持つかもしれないすべての問題の転覆を避け、コミット、ロールバック、スプリット、などあなたがworkingbranchにしたいあらゆる方法チェリーピックすることができますこの方法。その後、

git co master 
git svn fetch 
git svn rebase 

そして、あなたがすることができます:

何かがSVNサーバー上で変更した場合、あなただけのすべての上流のコミット(masterブランチにSVNの線形歴史を保存)に沿って習得あなたを保つために、次のん通常のgit機能を使用して、作業ブランチにコミットを取得/マージ/リベースします。

関連する問題