私はいくつかのMATLABコードを追跡するためにGitを使用しています。おもちゃの例がその問題を最もよく説明しています。これまでのところ、このプロジェクトはこのように見えます。 Aのマージ時にGitで字下げと内容の変更を統合する:ベストプラクティス?
C
/
A--
\
B
内容は、我々はその後、私たちの内容は以下のようになるとBを、コミット作るラインがx=6
に変更されたCを、コミット作るx=5
ある
if flag==1
x=5
end
プロジェクトのゴールで
のようにマージしようとするとC
/\
A-- D
\/
B
マージ結果がDの場合、メインラインが両方とも変更されているため(Bで追加された字下げ、5がCで6に変更されたため)、競合が発生します。
インデントの変更を1つのブランチから統合し、コンテンツを別のブランチから変更してマージ結果を得るためのベストプラクティス方法はありますか?
https://stackoverflow.com/a/5262473/288545で1つの戦略について読んだことがありますが、それは競合を避けるために、コンテンツの変更を優先してインデントを破棄します(これは改善ですが、コードを読むのが難しくなります)。
私はそれを吸うだけで、自分のコードを書くときにインデントを変更しないと思います。これは読みにくくなりますが、matlabでは大したことではありません。しかし、Pythonでは、字下げが重要です。だから、Pythonの人々はどうやってそれを処理しますか?後で制御構造の内部に入るように大きなコードブロックがあると、これは非常に醜いものになるので、diffは多くの行に接し、マージの競合は大きな頭痛になります。
間隔の変更とコンテンツの変更を個別に処理して統合するマージ戦略はありますか?私はあなたの問題を解決する鍵は別々のコミットとして書き換えて空白クリーンアップと機能を扱っているマージの結果は
if flag==1
x=6
end
Pythonでは、すべての人に4つのスペースでコードをインデントするよう指示する 'PEP 8 'に指示します。次に、4つのスペースインデントを持つコードを記述しているので、インデントの変更について心配する必要はありません。;-) – mgilson
@mgilson元々スタンドアロンのコード(インデントされていない)、コントロール構造に埋め込みます。インデントされる必要があります。 4つのスペースのみを扱うのにぴったりだとしても、1つのブランチが4つの新しいスペースを導入し、もう1つのブランチがコンテンツの変更を導入するため、マージの競合が発生します。 –
私のコメントはほとんど冗談だった。あなたは当然です。しかし、その場合には、インデントする必要はありません。同じコードブロックに互換性のない変更があると、マージの競合が発生します。そういうわけで、gitはあなたにこれらの互換性のない変更に対処し、手でそれらをマージさせるのです...もちろん、git mergetoolでこれを苦痛を少なくするために試みることができる多くのツールがあります... – mgilson