Voglio eseguire il checkout di un singolo file da un repository git in una posizione diversa (diversa dalla directory di lavoro) e lasciare la mia directory di lavoro corrente così com'è. E voglio dare un'occhiata al mio file con terminazioni di linea corrette.Come posso conservare le terminazioni di riga quando controllo un singolo file in una posizione diversa con git?
Lavoro su Windows ma ho lo stesso problema anche in Linux.
Ecco il mio piano d'azione (Win7 64-bit):
prima mi assicuro che git converte CRLF a LF sul impegnarsi e LF in CRLF sulla cassa:
git config --local core.autocrlf true
Poi crea un file chiamato crlf.txt con fine riga CRLF e commetterlo:
git add crlf.txt
git commit -m "File with crlf"
a cambiare qualcosa in crlf.txt e commetterlo:
git add crlf.txt
git commit -m "Change in crlf.txt"
Ora voglio ottenere crlf.txt come se fosse il primo commit:
git show HEAD~1:crlf.txt > "/home/user/crlf_like_in_head-1.txt"
Il file "crlf_like_in_head-1.txt" non contiene CRLF ma LF. Penso che git show sia corretto perché mostra il contenuto del file come se fosse nel repository (core.autocrlf = true converte CRLF in LF). Lo so dalla documentazione e ho provato lo stesso con core.autocrlf = false. Con core.autocrlf = false "crlf_like_in_head-1.txt" contiene CRLF. So che posso convertire facilmente LF in CRLF, ma devo assicurarmi che il file dei risultati sia lo stesso come è stato estratto con git.
So che posso anche checkout un unico file con git checkout:
git checkout HEAD~1 crlf.txt
Ma sovrascrive il contenuto corrente del crlf.txt nella directory di lavoro (anche se crlf.txt era in uno stato sporco) e non posso controllarlo in una cartella diversa con git checkout.
Grazie per la risposta. Ma questo non funziona con Win32. Restituisce il seguente errore: "errore: pathspec 'hallo.txt' non corrisponde a nessun file noto per git." Ho anche provato con l'opzione core.worktree. Funziona se eseguo il checkout di un intero ramo o di una revisione (git --work-tree =/home/user checkout HEAD ~ 1) – fernsehkind
Ho avuto lo stesso problema durante il test. Stai cercando di verificare un percorso che è un genitore del tuo repository? – Chronial
Sì, l'ho fatto. Ma ho anche provato un altro percorso. Ma non funziona. – fernsehkind