モダンなgitリポジトリ管理セオリー(改行コード・文字コード)
クロスプラットフォームなプロジェクトでgitを使っていると、だいたい改行コード周りで問題が発生しがち。
以下の2つの方針どちらにするかを決めて、プロジェクト初期に実施するとよい。
A.リポジトリ内のtextはすべてLFに統一
.gitattributesで* text=autoする。
以下の場合は.gitattributesに追記して対応する。
シェルスクリプト等、Win環境でも改行コードを変換したくないファイルはeol=lfで個別指定する。
これをしておかないとWindowsでPullしたリポジトリに対してDockerとかWSLを動かしてコケがち。
バイナリファイル等、意図せず変換されてしまうものは-textする
gitの設計方針とも合致しており、kuguma.icon的にはこちらがおすすめ。
code:.gitattributes
# commit LF, checkout CRLF(win) or LF(unix)
* text=auto
# commit LF, checkout LF
*.sh text=lf
*.ps1 text=lf
# commit LF, checkout CRLF
*.cmd text eol=crlf
*.bat text eol=crlf
# binary
*.gif binary
*.jpeg binary
*.jpg binary
*.png binary
*.gz binary
*.jar binary
# others
*.pdf -text
既に混在しているリポジトリで導入する場合、.gitattributes作成後、git add --renormalize .すると反映される。
B. gitに改行コード変換をさせない
開発者のローカルの改行コードでそのままリポジトリに追加するスタイル。(asis-asis)
誰か一人でも設定の抜けがあると改行コードが変わってしまうので、.editorconfigとの併用はほぼ必須。
一方で特定ファイルだけ改行コードを変える、といった変更は容易。
.gitattributesで * -textする。
.editorconfigで改行コード・文字コード・インデントルールを作成する。
全ての開発者で以下を徹底する。
エディタを.editorconfigに対応させる(例えばvscodeはプラグインの導入が必要)
徹底というのは基本的に無理で、うっかりが発生していつのまにかリポジトリの改行コードがバラバラになっていたり、といったことは起きやすい。
初めて作成されるファイルは改行コードがルール外でも気付けない。
オリエンテーリング・ドキュメント整備等、チームマネジメントが重要になり維持コストが高い。
結論として入れ替わりや、関わる人間が多いリポジトリには特におすすめできない。kuguma.icon
参考