1. ホーム
  2. git

[解決済み] gitのEOL変換を無効にする

2022-06-08 20:39:29

質問

私は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 をリポジトリに一行で作成します。 * -text
    • git add . では git commit -m "initial commit" を回避するために、例えば これ .
    • git branch master_recv
    • リモートの追加
  • 新しいファイルを作成する document.txt を含む新しいファイルを作成します。
  • コミットする 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 マシンの場合は、この問題は発生しません。

どのように解決するのですか?

わかりました。 SCP プログラムが行末を変換していたようです。 意図的に改行コードが LF のファイルを作ってみて、それがダウンロードされたときに CRLF として表示されることを観察したときに、これに気づきました。

これが私にとっての解決策だったので、この回答を受け入れますが、これからの人はより一般的な解決策のために他の回答も参照してください。