行末を処理するための私の手順は次のとおりです(多くのレポでテストされた戦い):
新しいリポジトリを作成する場合:
- および
.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
pre-commit フックをスキップすることです)
- エイリアスとして定義するのに十分な頻度で行う必要があります
alias fixCRLF="..."
- 前のコマンドを繰り返す
- ええ、それはブードゥー教ですが、通常、コマンドを 2 回実行する必要があります。1 回目はいくつかのファイルを正規化し、2 回目はさらに多くのファイルを正規化します。通常、新しいコミットが作成されなくなるまで繰り返すのがおそらく最善です:)
- 古いブランチ (正規化の直前) と新しいブランチの間を数回行ったり来たりします。ブランチを切り替えた後、git は再正規化が必要なさらに多くのファイルを見つけることがあります!
通常、Windows ツールは LF と互換性がありますが、Windows 以外のツールは CRLF と互換性がないため、すべて.gitattributes
のテキスト ファイルを LF EOL を持つものとして明示的に宣言します(多くの 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 は多くのファイルを変更済みとしてマークします。
解決策は、偽の commit( git add -A . && git commit -m 'fake commit'
) を実行してからgit rebase master
. リベース後、偽のコミットはなくなるはずです。