一貫性のない行末を持つリポジトリを複製しました。正規化するファイルのテキスト属性を設定する.gitattributes
を追加しました。変更をコミットすると、次のメッセージが表示されます。
warning: CRLF will be replaced by LF in FILE.
The file will have its original line endings in your working directory.
Gitでファイルの作業コピーを正規化するにはどうすればよいですか?できればgitで作業ツリー全体を正規化してください。
Gitクライアント2.16以降では、これを行うためのはるかに簡単な方法があります。単にgit add --renormalize .
V2.16以降を使用している場合は、単に次を使用できます。
git add --renormalize . # Update index with renormalized files
git status # Show the files that will be normalized
git commit -m "Introduce end-of-line normalization"
これらの方向は、 gitattributes からまっすぐです。古いバージョンの場合、 docs (v2.12より前)は異なる答えを提供します:
rm .git/index # Remove the index to force git to
git reset # re-scan the working directory
git status # Show files that will be normalized
git add -u
git add .gitattributes
git commit -m "Introduce end-of-line normalization"
編集した後、このシーケンスを実行します.gitattributes
。
一部のユーザーは上記の手順で問題を抱えているようです。 gitattributes (2.12から2.14)の更新されたドキュメントは、新しい一連の指示を示しています(.gitattributesファイルの編集後)。
git read-tree --empty # Clean index, force re-scan of working directory
git add .
git status # Show files that will be normalized
git commit -m "Introduce end-of-line normalization"
これを指摘してくれた @ vossad01 に感謝します。
また、どちらのソリューションでも、作業コピーのファイルは古い行末を保持します。それらを更新したい場合は、作業ツリーがクリーンであることを確認して、以下を使用します:
git rm --cached -r .
git reset --hard
これで、作業ツリーで行末が正しくなります。
リポジトリに保留中の変更がないことを確認します。
$ git status
$ git stash
変更.gitattributes
したがって、CRLFの解釈が変更されます。
$ echo "*.txt text" >>.gitattributes
$ git commit -m "Made .txt files a subject to CRLF normalization." -- .gitattributes
インデックスからデータを削除し、作業ディレクトリを更新します。
$ git rm --cached -r .
$ git reset --hard
Gitが提案するCRLF修正を確認します。
$ git ls-files --eol
$ git status
$ git diff
Gitの決定に同意します。
$ git add -u
$ git commit -m "Normalized CRLF for .txt files"
クリーンクローンが行われたかのように変更をリロードします。
$ git rm --cached -r .
$ git reset --hard
_.gitattributes
_設定は、新しいコミットにのみ影響します。このリポジトリにno履歴が公開されている(それに依存する他のリポジトリがない)場合、履歴全体を確認することができます。 Unix/Linuxでは、dos2unix(1)
を使用してすべてのファイルをfind(1)
と組み合わせて修正し、_filter-branch
_の履歴書き換えを使用できます( discussion)を参照 git bookで)プロジェクトの全履歴をクリーンアップすることもできます。
新鮮なクローンで、細心の注意を払って使用してください。クローンを持っている可能性のあるanybodyと連絡を取り、やりたいことをアドバイスします。
.gitattributesの* text = autoオプションは、テキストとしてマークされているCRLF(Windows)行末のファイルが含まれている場合、Gitリポジトリを「不正な状態」のままにします( https://marc.info/ ?l = git&m = 154484903528621&w = 2 )。標準のrenormalizeオプションはLFSフィルターでは正しく機能しないため、他の回答の指示または https://help.github.com/en/articles/dealing-with-line-endings 、正しく動作しません。代わりに、これらの手順が機能しました。
状況:
また、LFS追跡ファイルの-crlfを-textに変更しましたが、それが必要かどうかはわかりません。