Jak to zrobić
status git
zignorować różnice w końcówkach linii?
Podstawowe informacje:
Do pracy nad projektem używam losowo systemów Windows i Linux. Projekt znajduje się w Dropbox.
Dowiedziałem się wiele o tym, jak sprawić, by git diff ignorował zakończenia linii. Ponieważ używam meld git diff otwiera meld dla każdego pliku. A połączenie mówi „identyczny plik”.
Jak więc tego uniknąć. Git powinien otwierać połączenie tylko dla zmienionych plików. Status git nie powinien zgłaszać plików jako zmienionych, jeśli tylko ich zakończenie jest inne.
EDYCJA: Przyczyna:
Stało się tak z powodu tego ustawienia w systemie Windows
core.autocrlf prawda
Więc sprawdziłem kopię roboczą na Linuksie i ustawiłem core.autocrlf false na Windows.
Byłoby miło wiedzieć, jak sprawić, by status git ignorował różne nowe linie.
core.autocrlf
jest główną przyczyną w systemie Windows, ale także lekarstwem na Linuksie. Problem polega na tym, żeautocrlf
jest globalny w systemie Windows, a repozytorium nie ma tego ustawienia.git/config
. Uruchamiając lokalniegit config core.autocrlf true
pozbyłem się fałszywych zmian w mojej kopii roboczej NTFS sklonowanej w systemie Windows, ale uzyskano do niej dostęp w systemie Linux. (teraz są tylko fałszywe zmiany w dowiązaniach symbolicznych - dowiązania symboliczne NTFS DZIAŁAJĄ na montowaniach fuseblk, ale Git widzi je jako zmodyfikowane ...)Odpowiedzi:
Spróbuj ustawić wartość core.autocrlf w następujący sposób:
źródło
core.autocrlf true
to ustawienie robocze w CygWin.core.safecrlf false
to działające ustawienie w git bash lub mingwZamiast tego użyj .gitattributes z następującym ustawieniem:
.gitattributes można znaleźć w tym samym katalogu, co globalny plik .gitconfig. Jeśli .gitattributes nie istnieje, dodaj go do tego katalogu. Po dodaniu / zmianie .gitattributes będziesz musiał wykonać twardy reset repozytorium, aby pomyślnie zastosować zmiany w istniejących plikach.
źródło
git status
. W rzeczywistości zmienia sposób wpisywania plików do repozytorium. ref: git-scm.com/docs/gitattributes#_code_text_codeTa odpowiedź wydaje się istotna, ponieważ PO odwołuje się do potrzeby rozwiązania obejmującego wiele systemów operacyjnych. Ten artykuł pomocy Github zawiera szczegółowe informacje na temat dostępnych metod obsługi zakończeń linii w różnych systemach operacyjnych. Istnieją podejścia globalne i per-repo do zarządzania zakończeniami linii między systemami operacyjnymi.
Globalne podejście
Skonfiguruj obsługę końcówek linii Git w systemie Linux lub OS X:
Skonfiguruj obsługę końcówek linii Git w systemie Windows:
Podejście per-repo:
W katalogu głównym repozytorium utwórz
.gitattributes
plik i zdefiniuj ustawienia zakończenia linii dla plików projektu, po jednej linii na raz w następującym formacie:path_regex line-ending-settings
gdzieline-ending-settings
jest jednym z następujących:text
Wartość może być dodatkowo skonfigurowany pouczać Git na jak radzić końca linii dla plików pasujące:text
- Zmienia zakończenia linii na natywne zakończenia linii systemu operacyjnego.text eol=crlf
- Konwertuje zakończenia linii naCRLF
przy kasie.text eol=lf
- Konwertuje zakończenia linii naLF
przy kasie.text=auto
- Rozsądne ustawienie domyślne, które pozostawia obsługę linii w gestii Gita.Oto zawartość przykładowego pliku .gitattributes:
Więcej o tym, jak odświeżyć repozytorium po zmianie ustawień zakończeń linii tutaj . Tldr:
W niektórych przypadkach to wszystko, co należy zrobić. Inni mogą potrzebować wykonać następujące dodatkowe kroki:
źródło
Problem związany z poleceniami git w systemie operacyjnym Windows:
ostrzeżenie: LF zostanie zastąpiony przez CRLF w ...
Plik będzie miał oryginalne zakończenia linii w katalogu roboczym.
Rozdzielczość :
Nie pojawiają się żadne komunikaty ostrzegawcze.
źródło
Stworzyłem skrypt, aby ignorować różnice w zakończeniach linii:
Wyświetli pliki, które nie zostały dodane do listy zatwierdzeń i zostały zmodyfikowane (po zignorowaniu różnic w zakończeniach linii). Możesz dodać argument „add”, aby dodać te pliki do swojego zatwierdzenia.
Kod źródłowy: https://github.com/lepe/scripts/blob/master/gitdiff.pl
Aktualizacje :
źródło
git status --porcelain 2>/dev/null | grep '^ M ' | awk '{ print \$2 }'
; do tego: my @mods =git status --porcelain 2>/dev/null | grep '^ M ' | cut -c4-
;Używam zarówno Windowsa, jak i Linuksa, ale rozwiązanie
core.autocrlf true
mi nie pomogło. Po tym nawet nic się nie zmieniłogit checkout <filename>
.Więc używam obejścia, aby zastąpić
git status
-gitstatus.sh
Po prostu porównuję
md5sum
plik i jego brat w repozytorium.Przykładowe dane wyjściowe:
źródło