マージが必要なときに、ファイルに入れる行の最後に LF だけでなく CRLF を使用するように Git に依頼することは可能ですか?
それは... git 2.7.2+(2016年2月)から実際に可能です。
そして、何もする必要はありません。
commit 15980de、commit 86efa21 (2016 年 1 月 27 日) by Johannes Schindelin ( dscho
)を参照してください。
( 2016 年 2 月 17 日のcommit ab2c107でJunio C Hamanoによってマージされました)gitster
merge-file
: コンフリクト マーカーをコンテキストの行末スタイルに一致させる
CR/LF の行末を持つファイルをマージする場合、出力ファイルに行末が混在しないように、競合マーカーはそれらと一致する必要があります。
これは、一部の編集者が行末が混在していて本当に混乱するWindows で特に興味深いもの
です。
Beat Bolli によるこのパッチのオリジナル バージョンは尊重さcore.eol
れ、この開発者によるその後の改良も尊重されgitattributes
ました。
ただし、このアプローチは最適でgit merge-file
はありませんでした。GNU マージのドロップイン代替として発明されたものであり、リポジトリの外で操作してもまったく問題ありません!
元のアプローチのもう 1 つの問題が Junio Hamano によって指摘されました。レガシー リポジトリは、CR/LF 行末を使用してコミットされたテキスト ファイルを持っている可能性があります (そしてcore.eol
、gitattributes
そこに誤った印象を与えます)。したがって、はるかに優れたアプローチは、コンテキストの行末があれば単純に一致させることです。
実際には、コンテキスト全体を見る必要はまったくありません。
- ファイルがすべて LF のみの場合、またはすべてのファイルに CR/LF の行末がある場合、そのスタイルに一致するには1行だけを調べるだけで十分です。
- また、行末が混在している場合でも、単一の行の eol を模倣しても問題ありません。混在する行末の山に追加するだけで、それについては何もできません。
つまり、競合の前の行を見て、それが最後の行で行末がない場合はその前の行にフォールバックし、最初のポストイメージの最初の行にフォールバックします。次に 2 番目のポスト イメージ、最後にプリ イメージです。
一貫した CR/LF (または未定) の行末スタイルが見つかった場合は、それを一致させます。それ以外の場合は、競合マーカーに LF のみの行末を使用します。
確認できる行が少なくとも 2 行ある必要があるのは事実ですが (そうしないと競合は発生しません)、行末については同じではありません。問題の 3 つのファイルはすべて、任意の行末、それぞれ。この場合、LF のみの使用にフォールバックします。