2012-12-01 10 views
5

Chcę pobrać pojedynczy plik z repozytorium git do innej lokalizacji (innej niż działający katalog) i pozostawić bieżący działający katalog tak, jak jest. I chcę, żeby Git sprawdził mój plik z prawidłowymi zakończeniami linii.Jak mogę zachować zakończenia linii, gdy sprawdzam pojedynczy plik w innej lokalizacji za pomocą git?

Pracuję w systemie Windows, ale mam ten sam problem w Linuksie.

Tu jest mój scenariusz (Win7 64-bitowy):

Najpierw upewnij się, że git konwertuje CRLF do LF na popełnić i LF na CRLF na kasie:

git config --local core.autocrlf true 

Następnie utworzyć plik nazywa crlf.txt z zakończeń linii crlf i zobowiązać go:

git add crlf.txt 
git commit -m "File with crlf" 

zmienić coś w crlf.txt i zobowiązać go:

git add crlf.txt 
git commit -m "Change in crlf.txt" 

Teraz chcę dostać crlf.txt jak to było na pierwszym popełnienia:

git show HEAD~1:crlf.txt > "/home/user/crlf_like_in_head-1.txt" 

Plik "crlf_like_in_head-1.txt" nie zawiera CRLF ale LF. Myślę, że git show jest poprawny, ponieważ pokazuje zawartość pliku podobną do repozytorium (core.autocrlf = true konwertuje CRLF na LF). Wiem, że z dokumentacji i próbowałem to samo z core.autocrlf = false. Z core.autocrlf = false "crlf_like_in_head-1.txt" zawiera CRLF. Wiem, że mogę z łatwością przekonwertować LF na CRLF, ale muszę upewnić się, że plik wynikowy jest taki sam, jak został sprawdzony z git.

wiem, że mogę również kasy pojedynczego pliku git checkout:

git checkout HEAD~1 crlf.txt 

Ale to nadpisuje aktualną treść crlf.txt w katalogu roboczym (także jeśli crlf.txt był w brudnym stanie) i nie mogę go sprawdzić w innym folderze za pomocą git-checkout.

Odpowiedz

1

Masz rację - git show pokazuje ci tylko, co jest w repozytorium - nie ma magii kasy.

Można osiągnąć to, co chcesz tymczasowo zmienić lokalizację katalogu roboczego dla swojej kasie

git --work-tree=/home/user checkout HEAD~1 crlf.txt 

Pozwoli to sprawdzić plik /home/user/crlf.txt. Uwaga: Jeśli wymeldujesz plik w podkatalogu, katalog ten zostanie również utworzony w folderze docelowym. Nie można temu zapobiec ani określić nazwy pliku docelowego. Jeśli jest to problem, powinieneś napisać 2-liniowy skrypt powłoki, który wykonuje check do katalogu temp, a następnie przenosi pobrany plik.

+0

Dziękuję za odpowiedź. Ale to nie działa pod Win32. Zwraca następujący błąd: "error: pathspec" hallo.txt "nie pasuje do żadnego pliku znanego z git." Próbowałem także z opcją core.worktree. Działa, gdy kupuję pełną gałąź lub wersję (git - work-tree =/home/user checkout HEAD ~ 1) – fernsehkind

+0

Miałem ten sam problem podczas testowania tego. Czy próbujesz sprawdzić ścieżkę, która jest rodzicem twojego repo? – Chronial

+0

Tak, zrobiłem. Ale spróbowałem też zupełnie innej ścieżki. Ale to nie działa. – fernsehkind

Powiązane problemy