私たちは、SVN から Git に切り替えた開発者のチームであり、よりシンプルで標準的なものになると考えています。残念ながら、これまでは失敗や問題に遭遇しただけでした。
機能ブランチは必要ありません。すべての開発者が共有する「develop」という単一のブランチがあります。
私たちは TortoiseSVN に慣れているので、UI に TortoiseGit を使用することにしました。
コミットとプッシュはうまく機能します。プル操作で問題が発生しました。SVN は素晴らしく、ローカルに変更を加えても、新しいバージョンをダウンロードし、可能なことを自動マージし、競合するファイルを解決するよう求めました。Git では、同じファイルでローカルに変更を加えると、そこで停止します (自動マージできたとしても)。2 つの選択肢があります。ローカルの変更をコミットし (途中で作業を行ったとしても)、大量の役に立たないコミットで「ログの表示」ウィンドウを汚染するか、SVN がちょうど行っていたのと同様のことを行う stash、pull、pop stash のいずれかです。いくつかの無駄な手順。もっと良い方法はありますか?
stash の pop 操作は自動マージを試みますが (いいですね)、実際の競合ではうまくいきません。SVN では簡単でした。差分ビューの一方の側に新しいファイルを、もう一方の側にローカル ファイルを配置し、ローカル側を修正して保存し、解決済みとしてマークするだけでした。Git の下には、「通常の」ファイル、BASE ファイル、REMOTE ファイル、LOCAL ファイルの 4 つのファイルがあります。完全に混乱しているのは、「リモート」ファイル(彼らのもの)が実際にはあなたの変更を含む隠しファイルであるため、明確にするのに役立たないことです。
そのため、マージ ツールを開く [競合の編集] メニュー オプションを選択します。TortoiseGitMerge インターフェースはあまりフレンドリーではなく、KDiff3 はオンラインで広く使用されているため、それを使用することにしました。したがって、「マージされた」タブを作成するマージボタンを押すと、競合のある行でA、B、Cボタンを押すことができます。今までは、大丈夫です。問題は、この結果のファイルを保存すると、(file.cs? ではなく) file.cs.LOCAL.cs の下に保存されることです。次に、TortoiseGit の下で、「解決済み」、「私のものを使用して解決」、または「彼らのものを使用して解決」のいずれを選択しても、マージされたファイルが削除され、最終ファイルの間違ったバージョンが返されます (マージ作業は行われません)。それを取得する唯一の方法は、マージされたファイルの一時的なバックアップを作成し、解決済みとしてフラグを立て、バックアップを再コピーすることです。なんてこったい?ワークフローのどこで間違ったことをしているでしょうか?