私のエンタープライズはソース管理としてsvnを使用します。Gitを使ってサーバー上でSubversionをローカル開発するには?
私は私の開発のためにgitを使用したい(枝がとても便利です)。
svnプロジェクトをチェックアウトしたり、開発用にgitでローカルで作業したりして、svnで最終変更をコミットすることは問題ありませんか?
私たちがこのように働くときに知っておくべきことは何ですか?
私のエンタープライズはソース管理としてsvnを使用します。Gitを使ってサーバー上でSubversionをローカル開発するには?
私は私の開発のためにgitを使用したい(枝がとても便利です)。
svnプロジェクトをチェックアウトしたり、開発用にgitでローカルで作業したりして、svnで最終変更をコミットすることは問題ありませんか?
私たちがこのように働くときに知っておくべきことは何ですか?
git-svn
私にとってはうまく機能しましたが、(サーバー上の)分岐や、Subversionの外部などの高度な機能のいくつかは滑らかではない可能性があります。何かにコミットする前にユースケースをテストしてください。
私は適切に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
あなたはこのために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機能を使用して、作業ブランチにコミットを取得/マージ/リベースします。