env:
- Windows 7
- msysgit
とき私はgit commit
、それは言う:
warning: LF will be replaced by CRLF.
この警告の尾は後ろ向きですか?
私はWindowsでファイルを編集します。CRLF
この写真のように、行末はです。git は、リポジトリにコミットするためにに
変更しLF
ます。
だから私は正しい警告だと思います:
warning: CRLF will be replaced by LF.
env:
とき私はgit commit
、それは言う:
warning: LF will be replaced by CRLF.
この警告の尾は後ろ向きですか?
私はWindowsでファイルを編集します。CRLF
この写真のように、行末はです。git は、リポジトリにコミットするためにに
変更しLF
ます。
だから私は正しい警告だと思います:
warning: CRLF will be replaced by LF.
回答:
警告:LFはCRLFに置き換えられます。
使用しているエディターによっては、LFを含むテキストファイルをCRLFで保存する必要はありません。最近のエディターはEOLスタイルを保持できます。しかし、そのgit config設定はそれらの変更を要求しています...
簡単に確認してください(ここでお勧めします)。
git config --global core.autocrlf false
そうすることで、自動変換を回避し、.gitattributes
ファイルとcore.eol
ディレクティブを使用してそれらを指定できます。
Windows git "LFはCRLFに置き換えられます"
この警告は後ろ向きですか?
いいえ:あなたはWindowsを使用しており、git config
ヘルプページには
CRLF
リポジトリに正規化された行末がない場合でも、作業ディレクトリに行末を置きたい場合は、この設定を使用します。
「git LFをCRLFに置き換える」で説明されているように、これは、チェックアウト(コミットではなく)でのみ発生しcore.autocrlf=true
ます。
repo
/ \
crlf->lf lf->crlf
/ \
XiaoPengの回答で述べたように 、その警告は次と同じです。
警告:(現在の
core.autocrlf
構成でチェックアウトするか、別のフォルダーに複製する場合)LFはCRLFに置き換えられ
ます。ファイルは、(現在の)作業ディレクトリに元の行末があります。
で述べたようgit-for-windows/git
な問題1242:
私はまだこのメッセージが混乱しているように感じます。たとえば、「
file.json
ファイルを削除して再度チェックアウトすると、LFはCRLFに置き換えられます」など、問題のより詳しい説明を含めるようにメッセージを拡張できます。
注:Git 2.19(2018年9月)を使用するcore.autocrlf
と、偽の「LFはCRLFに置き換えられます」という警告が抑制されるようになりました。
以下のようquaylar当然のコメントコミットの変換がある場合、それはにあるLF
のみ。
その特定の警告「LF will be replaced by CRLF
」は、convert.c#check_safe_crlf()から発生します。
if (checksafe == SAFE_CRLF_WARN)
warning("LF will be replaced by CRLF in %s.
The file will have its original line endings
in your working directory.", path);
else /* i.e. SAFE_CRLF_FAIL */
die("LF would be replaced by CRLF in %s", path);
それはによって呼び出されconvert.c#crlf_to_git()
、それ自体はによって呼び出されconvert.c#convert_to_git()
、それ自体はによって呼び出されconvert.c#renormalize_buffer()
ます。
そして、その最後renormalize_buffer()
はによってのみ呼び出されmerge-recursive.c#blob_unchanged()
ます。
したがって、この変換は、git commit
コミットがマージプロセスの一部である場合にのみ発生するのではないかと思います。
注:Git 2.17(2018年第2四半期)では、コードのクリーンアップで説明が追加されています。
参照してください8462ff4コミットすることにより(2018年1月13日)トルステン・Bögershausenを(tboegi
)。
(合併によりJunio C浜野- gitster
-で9bc89b1コミット 2018年2月13日)
convert_to_git():safe_crlf / checksafeはint conv_flagsになります
を呼び出すときに
convert_to_git()
、このchecksafe
パラメーターは、EOL変換(CRLF --> LF --> CRLF
)が完全にラウンドトリップしない場合にどうなるかを定義しました。
さらに、行末を再正規化するか(CRLF --> LF
)、そのままにするかも定義されています。checksafeは
safe_crlf
次の値を持つ列挙型でした:
SAFE_CRLF_FALSE: do nothing in case of EOL roundtrip errors
SAFE_CRLF_FAIL: die in case of EOL roundtrip errors
SAFE_CRLF_WARN: print a warning in case of EOL roundtrip errors
SAFE_CRLF_RENORMALIZE: change CRLF to LF
SAFE_CRLF_KEEP_CRLF: keep all line endings as they are
Git 2.17サイクルで8462ff4( " convert_to_git()
:
safe_crlf/checksafe
がint conv_flags
"、2018-01-13、Git 2.17.0)に導入されたリグレッションにより、設定にかかわらずautocrlf
、書き換えによって警告メッセージが生成されることに注意してください
。safecrlf=false
Anthony Sottile()によるcommit 6cb0912(2018年6月4日)を参照してください。(合併によりJunio C浜野- -で8063ff9コミットし、2018年6月28日)をasottile
gitster
core.autocrlf=true
ます常に レポでLFに降伏し、作業ツリーの私見ではCRLF(でも、Windows以外の下)。出典:リンク
はい、警告は逆です。
そして実際には、そもそも警告であってはなりません。このすべての警告が(残念ながら後方に)言っているのは、Windowsの行末を含むファイル内のCRLF文字が、コミット時にLFで置き換えられるということです。つまり、* nixとMacOSで使用されているのと同じ行末に正規化されます。
奇妙なことは何も起こっていません。これはまさにあなたが通常望む動作です。
現在の形式のこの警告は、次の2つのいずれかです。
;)
--7月9日に更新---
@mgiucaがコメントした「それは正しくて正確」を削除
======
いいえ。現在であなたのファイルについて話しているのではありませんCRLF
。代わりに、でファイルについて話しているLF
。
それは読むべきです:
警告:(チェックアウトするか、現在のcore.autocrlf構成で別のフォルダーに複製する場合)、LFはCRLFに置き換えられます
ファイルの元の行は、(現在の)作業ディレクトリにあります。
これはすべて core.autocrlf=true
元のエラー:
警告:LFはCRLFに置き換えられ
ます。ファイルの元の行末は作業ディレクトリになります。
エラーは何を読むべきか:
警告:作業ディレクトリで LFはCRLF に置き換えられ
ますファイルはgitリポジトリで元のLF行で終わります
ここで説明:
この便利な変換の副次的影響であり、これが表示されている警告です。最初に作成したテキストファイルがCRLFではなくLFで終わっている場合、通常どおりLFで保存されますが、チェックすると後でそれはCRLFエンディングを持っています。通常のテキストファイルの場合、これは通常は問題ありません。この場合、警告は「参考情報」ですが、gitがバイナリファイルをテキストファイルであると誤って評価した場合、gitがバイナリファイルを破損するため、これは重要な警告です。
基本的に、以前はLFだったローカルファイルにローカルでCRLFが含まれるようになります。
Visual Studio 2017、2019を使用している場合は、次のことができます。
[core]
autocrlf = false
[filter "lfs"]
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
.gitconfig
またはのような構成ファイルにあるように見えます。.git/config
.gitignore
単純なことをしてください: