あなたが抱える問題は、git svn rebase
実際にgitリポジトリのコミット履歴を書き換えることです。これにより、そのリポジトリからプルする人との競合が発生します。最善の解決策は、誰もがgit svn
自分でsvnリポジトリにアクセスすることです。
ブランチを共有できるようにリモートリポジトリを設定する場合は、リモートgitブランチがsvnにリベースされている場合、新しいリビジョン履歴をローカルgitリポジトリに強制的に適用する必要があることに注意する必要があります。
他のユーザーは、を使用してローカルリポジトリをリモートと一致させることができgit pull --force
ます。警告されますが、変更ポイント以降に行われたコミットは無効になるためです。たとえば、次のコミット構造があるとします。
D----Eトピック
/
A ---- B ---- C----Fマスター
次に、を使用git pull --force
してローカルリポジトリを更新します。これにより、で始まるコミットのsha1が変更されB
ます。新しい構造は次のようになります。
D----Eトピック
A ---- G ----H----マスター
どのようにコミットD
しE
、今不思議な土地に浮かんでいるかに注意してください。これは、分岐点が以前と一致しなくなったためB
ですが、現在はG
です。
この問題を回避するには、ローカル分岐点が、を実行しても変更されないコミットから発生していることを確認する必要がありますgit svn rebase
。git rebase
リモートを強制的にプルした後、ローカルブランチを更新リモートブランチに移すことができます。
コミットポイントからブランチを作成するのを間違えたとしましょう。その結果、上記の不思議の国が浮かんでしまいます。それでは、を開始する前にgitワンダーワンドを振る必要がありgit pull --force
ます。そのようです:
おっと。B
で上書きされますpull
。
D----Eトピック
/
A ---- B ---- C----Fマスター
それでは、git rebase A topic
変更されないコミットで変更を加える必要があります。
D'---E'トピック
/
A ---- B ---- C----Fマスター
次に、変更が加えgit rebase G topic
られると、変更を元の場所に戻すことができます。
D'---E'トピック
/
A ---- G ----H----マスター
うまくいけば、これがsvnリポジトリと一緒に中央アクセスgitリポジトリを実行しようとする苦痛を説明します。