安定したトランクと不安定な開発ブランチを備えた SVN セットアップがあります。開発作業は (ほとんど) ブランチで行われ、展開前にトランクにマージされます。
SVN クライアントとして git-svn を使用しています。不安定版からトランクへのマージ プロセスは次のとおりです。
git svn fetch
git co -b trunk svn/trunk
git merge --no-ff svn/unstable
git svn dcommit
svn/*
リモート SVN ブランチです。
これはもちろん、私が完了する前に誰もトランクに何もコミットしないことを必要としますが、これは実際には問題ではありません。
このプロセスの利点は、git がマージ コミットの親をローカル リポジトリに記録するようになったことです。これは私の同僚には何のメリットもありませんが、マージを行うときにgit が共通の祖先を計算できるようにします。これは非常に望ましいことです。
そして、ここに摩擦があります。他の誰かがマージを行っても、git はそれを知りません。次に例を示します。
o-...-A---o---C--- unstable
/
X--...--B---o---o--- stable
不安定なブランチはポイント X で作成されました。ポイント A で、不安定なブランチからの変更をポイント B の安定したブランチにマージすることにしました。共通の祖先は正しく X です。
マージは git 履歴に記録されていないため、次の C でのマージでは、X が共通の祖先であると想定しています。次のグラフのように、A にしたいと思います。
o-...-A---o---C--- unstable
/ \
X---...---B---o---o--- stable
描かれているものとまったく同じように見えるグラフを取得することは絶対に必要というわけではありません. A を共通の祖先として認識する任意のグラフは、私には問題ありません。
git-filter-branch の適切な使用や、SVN に決してコミットされない「偽の」コミットなど、いくつかのオプションを念頭に置いています。しかし、これまでのところ、私の試みはどれも十分に機能していません。
あなたが提示できるアイデアに感謝します。手順は自動である必要はありません。マージは非常にまれであり、「手動で」実行するという苦痛に耐えることができます。