autocrlf=true
でレポを作成した後、チェックアウトを行い、autocrlf=false
でコミットしました。その後、autocrlf=true
(OS Win)に切り替えました。 私はブランチ間でいくつかのマージを始めるまで、すべてがOKであるようでした。 eols
が変更されたために、ファイル全体が変更されたとマークされたマージ競合が多数発生しました(チェックアウトされたファイルで、autocrlf=false
とコミットしたと仮定します)。GITリポジトリでCRLFを修復してマージの競合を回避する方法
私には価値のある歴史があるので、新しいrepoを作成して新しい人生を始める代わりに、変換済みのコミットを修正するか、eols
に変換することをお勧めします。
これは私が理解する方法であるautocrlf
(OS勝利):
場合ので、私はautocrlf=false
とGITを使用したい今autocrlf=false
WorkingTree -> commit -> GITRepository
CRLF no conv. CRLF
LF no conv. LF
WorkingTree <- checkout <- GITRepository
CRLF no conv. CRLF
LF no conv. LF
場合場合
WorkingTree -> commit -> GITRepository
CRLF CRLF to LF LF
LF no conv. LF
WorkingTree <- checkout <- GITRepository
CRLF LF to CRLF LF
autocrlf=true
場合私は各支店をチェックアウトすることに決めました。とcomでソースファイルのeols
を修復しました。 CRLFでミットバック。私はそれをしましたが、時間がたってもまだautocrlf
の設定をfalse
に変更した後にチェックアウトされなかったファイルが残っています(またはこれらのファイルが古いコミットから継承されるようになりましたか?すべてのLFからCRLFへの処理を自動化するので、私にとってはそのような状況について他の説明はありません)。 私はまたファイルをtouch
にしようとしましたが、それらをすべて再コミットしました(私はここのどこかでstackoverflowで見たように)。しかし、日付の変更はGIT AFAIKには関係ありません。 How to undo the damage of autocrlfも読んだことがありますが、それが私の場合であるかどうかわかりませんし、ウィザードのトリックも理解できません。
どうすればこの混乱から逃れることができますか?
あなたは 'autocrlf = input'を試しましたか?レポが公開されていない場合は、 'filter-branch --index-filter'を使って履歴内の行末をクリーンアップすることができます。 – knittl
@knittl:理解すれば、履歴のコミットをすべてLFで書き直します。私は正しい?チェックアウト後に 'CRLF'を得るために' autocrlf = true'を設定しなければならないでしょう(OS Win)。 repoを 'CRLF'に直接変換し、その後に' autocrlf = false'を残すオプションがありますか? – Andik
リポジトリがCRLFに変換されると、 'autocrlf = false'を持つことができるはずです。したがって、ファイル内の行末は変換されません。 – knittl