私は、git がいかなる操作に対しても行末を一切変更しないようにしようとしています。残念ながら、何に関係なく変更されるようです。私は、この動作を無効にするために私が見つけられる限り多くの異なるメカニズムを持つ次のテスト ケースにそれを縮小しました。
- 2台のマシンから始めます(Windowsコンピュータ = A、Linuxコンピュータ = B)
- 両方のマシンで:
git config --global core.autocrlf false
- 両方のマシンで:
git config --global core.eol crlf
(念のため)
- A に新しいリポジトリを作成します。空のフォルダーから:
git init --shared
(その後、作成された.git
ディレクトリを再表示します).gitignore
リポジトリに新しいファイルを作成する.gitattributes
次の 1 行でリポジトリに新しいファイルを作成します。* -text
git add .
git commit -m "initial commit"
回避するには、例えばこれ。git branch master_recv
- リモコンを追加する
document.txt
リポジトリにCRLFを含む新しいファイルを作成する- コミット:
git add -A
、その後git commit -m "<something>"
- A には
document.txt
まだ CRLF が含まれていることに注意してください (これを削除してリセットすると、--hard
CRLF がまだ含まれているバージョンが返されます)
- ディレクトリ全体をコンピュータBにSCPする
new file
CRLFを含む新しいファイルを追加する- コミット:
git add -A
、その後git commit -m "<something>"
- B
document.txt
とBのnew file
両方にCRLFが含まれていることに注意してください。
- B のマスターを A にプルします。
git pull <remote> master:master_recv
- A が
document.txt
LF に変更されました。追加されたファイルnew file
にも LF が含まれています。
B が Windows マシンの場合、問題は発生しません。
ベストアンサー1
簡単な解決策は1つです。
- core.autocrlfがfalseに設定されていることを確認してください全てリポジトリ:
git config --global core.autocrlf false
- Git 2.16 (2018年第1四半期) 以上、 走る
git add --renormalize .
- それ以外の場合は、リポジトリを再クローンし、EOL 変換が行われていないことを確認します。
- Git 2.16 (2018年第1四半期) 以上、 走る
自動的に変換が行われる場合、それは.gitattributes
core.eol
指令リポジトリ内に存在します。
とGit 2.8+ (2016 年 3 月)、eol 変換がまだあるかどうかを確認します:
git ls-files --eol