* autocrlfとsafecrlf [#j94f3870]

** autocrlfとは? → リポジトリ(LF)とワーキングツリー(CRLF)の自動変換 [#h6a244f9]

- 一般的にWindowsはテキストファイルの改行コードがCRLF、Unix系OSはLFなため、それぞれのOSではそれぞれの改行コードにした方が扱いやすい。が、Gitのリポジトリ内ではどちらかの改行コードに固定する必要がある。(そうしないと、ファイルごとに改行コードがバラバラになってしまい、管理しづらい。)
- そこで、リポジトリではLFに固定、ワーキングツリーではCRLF固定にし、チェックアウト時、コミット時に改行コードを自動変換する。
- すなわち、autocrlfをtrueにすると、リポジトリからファイルをワーキングツリーに持ってくるときにテキストファイルの改行コードをCRLFに変換する。にコミットする時に、CRLFからLFに変換してコミットする。
- このような機能なので、autocrlfを有効にする必要があるのは(特別な理由がない限り)Windows上でGitを使う場合だけ。Windowsで使う場合でも、LF固定でよいなら、有効にする必要はない。
- さらに言うと、リポジトリの改行コードを必ずLFにする必要があるわけでもない。そのリポジトリを利用する人がすべてWindowsユーザーならCRLFに固定しても構わない。Gitは仕組み上テキストファイルとバイナリファイルを区別しないので、改行コードも区別しない(これはGitの欠点ともいえる)ので。
- なお、Unix系OSのGitではデフォルトでautocrlfはfalse、WindowsのGitではインストール時に選択して設定する。

*** 参考 [#g14c03a4]
https://stackoverflow.com/questions/39408793/git-core-autocrlf-line-ending-default-setting/48230871


** safecrlfとは? → CRLFとLFが混じったテキストファイルをコミットできなくする [#rab5c638]

- autocrlfが有効な場合、CRLFなテキストファイルをコミットするとLFへ自動変換されるが、もしそのテキストファイルがCRLFな行とLFな行が混じっていれば、いったんLFに変換してコミットすると、次にcheckoutやcloneする際に元の状態(CRLFとLFの混じった状態)に戻せなくなる。
- それを防ぐために、safecrlfをtrueにするとそのようなファイルをステージング(add)できなくなる。safecrlfをwarnにすると警告が出るがステージングはできる。なお、falseにはできない。
- なお、この制限はCRLFとLFが混じっている状態だけでなく、ファイルの末尾に空の改行がない状態(diffする時にNo newline at end of fileみたいな警告が出る状態)にも当てはまる。Windowsではそのような状態が普通だが、Unix系OSでは末尾に改行が必要なので、Windowsでもそれに合わせる必要がある。

*** 参考 [#h6391db6]

https://git-scm.com/docs/gitattributes

** 参考 [#vb7203d5]

- https://git-scm.com/docs/git-config
- https://git-scm.com/docs/gitattributes
- https://stackoverflow.com/questions/1967370/git-replacing-lf-with-crlf

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS