Sto cercando di convincere git a non cambiare alcuna fine di riga per nessuna operazione. Sfortunatamente, sembra che sia così non importa cosa. L'ho ridotto al seguente test case, che ha tanti meccanismi diversi per disabilitare questo comportamento come ho potuto trovare.
- Inizia con due macchine (computer Windows = A, computer Linux = B)
- Su entrambe le macchine:
git config --global core.autocrlf false
- Su entrambe le macchine:
git config --global core.eol crlf
(per ogni evenienza)
- Crea un nuovo repository su A. Da una cartella vuota:
git init --shared
(quindi mostra la.git
directory creata )- Crea un nuovo file
.gitignore
nel repository - Crea un nuovo file
.gitattributes
nel repository con la singola riga:* -text
git add .
, quindigit commit -m "initial commit"
per aggirare, ad esempio questo .git branch master_recv
- Aggiungi telecomandi
- Crea un nuovo file
document.txt
nel repository contenente CRLF - Impegnati:,
git add -A
alloragit commit -m "<something>"
- Nota che A
document.txt
contiene ancora CRLF (e cancellandolo e ripristinandolo con--hard
restituisce la versione ancora con CRLF)
- SCP l'intera directory sul computer B
- Aggiungi un nuovo file
new file
contenente CRLF - Impegnati:,
git add -A
alloragit commit -m "<something>"
- Notare che B
document.txt
e Bnew file
contengono entrambi CRLF
- Porta il master di B su A:
git pull <remote> master:master_recv
- A's
document.txt
è cambiato in LF. Il file aggiuntonew file
contiene anche LF.
Il problema non si verifica se B è una macchina Windows.
core.autocrlf
sempre stato falso? Sembra che tu abbia già delle\n
terminazioni di riga nel tuo repository? Non v'è alcuna impostazione per modificare\n
nel vostro repository per\r\n
nella directory di lavoro.