基本的に、変更をプッシュしたり、ブランチを切り替えたりせずに、変更をステージングしたいと思います。これにより、いくつかの作業を行うことができます。適切な停止ポイントにいるときにcommit
して、同じブランチで作業を続行します。混乱した場合はrevert
、新しい変更を追加した場合は再びcommit
できます。
これらの変更を追跡するためにSVNで機能ブランチを作成できることに気付きましたが、同じブランチ/トランクにとどまりながら作成したいと思います。 SVNにはその機能がないようですが、git stash
と同等のものでも十分です。
分散バージョン管理のまさにポイントは、後でアップストリームリポジトリとマージできるローカルコミットのこの機能です。 SVNは配布されておらず、実行できません。中心的な障害は、SVNの線形リビジョン番号です。これは、すべてのクライアントが各チェンジセットの新しい識別リビジョン番号を取得する必要があることを意味します。リビジョン番号を「割り当て」て後で使用すると、あらゆる種類の競合状態が発生するため、SVNおよびすべての非分散バージョン管理システムでは「コミット」および「プッシュ」アクションはアトミックです。
そうは言っても、Joeが提案したように、gitのSVNフロントエンドは良い選択です。これにより、SVNがローカルの個々のコミットを認識しないようにし、「プッシュ」が単一の大きなSVNコミットに変換されます。
設計上、SVNは使用しませんが、gitのgit svn
コマンドをSVNのフロントエンドとして使用できます。これにより、SVNリモートからプッシュ/プル作業を行うことができますが、それでもローカルでgitを使用するため、SVNリポジトリにプッシュせずにローカルコミットを行うことができます。
このようなものが役立つかもしれません: http://www.viget.com/extend/effectively-using-git-with-Subversion/
キルトキューの一部のみをsvnにコミットしたい場合は注意が必要ですが、キルトを使用してこれを行うことができる場合があります。