行末を処理するための私の手順は次のとおりです(多くのリポジトリで戦闘テスト済み)。
新しいリポジトリを作成する場合:
- 置く
.gitattributes
には非常に最初の他の典型的ななどのファイルと一緒にコミット .gitignore
し、README.md
既存のリポジトリを扱う場合:
.gitattributes
それに応じて作成/変更
git commit -a -m "Modified gitattributes"
git rm --cached -r . && git reset --hard && git commit -a -m 'Normalize CRLF' -n"
-n
(--no-verify
プリコミットフックをスキップすることです)
- エイリアスとして定義するほど頻繁に行う必要があります
alias fixCRLF="..."
- 前のコマンドを繰り返します
- うん、それはブードゥー教ですが、通常はコマンドを2回実行する必要があります。1回目は一部のファイルを正規化し、2回目はさらに多くのファイルを正規化します。一般に、新しいコミットが作成されなくなるまで繰り返すのがおそらく最善です:)
- 古い(正規化の直前)ブランチと新しいブランチを何度か行き来します。ブランチを切り替えた後、gitは再正規化する必要があるさらに多くのファイルを見つけることがあります!
.gitattributes
すべてのテキストファイルをLF EOLとして明示的に宣言します。これは、一般に、WindowsツールはLFと互換性があり、Windows以外のツールはCRLFと互換性がないためです。(でも多くのnodejsがラインツールは、LFを想定し、したがって、あなたのファイルでのEOLを変更することができコマンド)。
の内容 .gitattributes
私.gitattributes
は通常次のようになります:
*.html eol=lf
*.js eol=lf
*.json eol=lf
*.less eol=lf
*.md eol=lf
*.svg eol=lf
*.xml eol=lf
現在のリポジトリでgitが追跡している個別の拡張機能を確認するには、こちらをご覧ください
正規化後の問題
これが完了すると、もう1つの一般的な注意事項があります。
あなたmaster
がすでに最新で正規化されているとしたら、チェックアウトしoutdated-branch
ます。そのブランチをチェックアウトした直後に、gitは多くのファイルを変更済みとしてマークします。
解決策は、偽のコミット(git add -A . && git commit -m 'fake commit'
)を実行してから実行することgit rebase master
です。リベース後、偽のコミットは消えるはずです。