Więc myślę, że może to mieć coś wspólnego z textmate, ale pracujemy w małym zespole i mamy pewne problemy z konfliktami pełnych plików prawie identycznych plików w git, ponieważ każda linia jednej gałęzi ma dołączone ^ M.
Co ma zrobić ta tajemnicza ^M
postać i skąd może pochodzić?
Nasi programiści używają emacsa na Windows / Mac, TextMate na Macu, cody na Macu i czasami z edytora tekstu wp-admin.
Czy ktoś miał kiedyś ten problem wynikający z jednego z nich?
Odpowiedzi:
W git-config ustaw
core.autocrlf
tak,true
aby git automatycznie konwertował zakończenia linii poprawnie dla twojej platformy, np. Uruchom to polecenie dla ustawienia globalnego:źródło
Ktoś nieprawidłowo konwertuje znaki końca linii .
Zakładam, że to ludzie Windowsa, ponieważ kochają swoje CRLF. Unix kocha LF, a Mac kochał CR, dopóki nie został pokazany na sposób uniksowy.
źródło
^M
jest0x0d
, czyli znak powrotu karetki. Jeśli twój wyświetlacz wyglądaplik musi pochodzić z systemu Windows, ponieważ standardowa sekwencja nowej linii w systemie Windows to
CR
LF
(0x0d 0x0a
), podczas gdy standardowa sekwencja nowej linii składa się wyłącznie zLF
Unices.Jeśli plik pochodzi z systemu Mac OS 9 lub starszego, zobaczysz go jako
ponieważ po powrocie karetki nie byłoby nowych wierszy.
źródło
Aby ^ M zniknęło z gita, wpisz:
Kredyty: https://lostechies.com/keithdahlby/2011/04/06/windows-git-tip-hide-carriage-return-in-diff/
źródło
git diff
nadal bierze pod uwagę ^ M podczas porównywania plików. Usuń to ustawienie za pomocągit config --global --unset core.whitespace
(z tego wątku ).--global
aby po prostu skonfigurować bieżące repozytorium.Mają związek z różnicą między zakończeniami linii w stylu DOS a stylem uniksowym. Przeczytaj artykuł w Wikipedii . Możesz znaleźć narzędzie dos2unix do pomocy lub po prostu napisać mały skrypt, aby sam je naprawić.
Edycja : znalazłem następujący przykładowy kod Pythona tutaj :
źródło
Używam Android Studio (JetBrains IntelliJ IDEA ) w systemie Mac OS i moim problemem było to, że ^ M zaczęło pojawiać się w niektórych plikach w moim żądaniu ściągnięcia na GitHub . U mnie zadziałała zmiana separatora linii w pliku.
Otwórz żądany plik w edytorze przejdź do Plik przejdź do Separatory wierszy, a następnie wybierz najlepszą dla siebie opcję (dla mnie był to LF - Unix i OS X (\ n) )
Według następnego artykułu problem ten jest wynikiem pomieszania końcówek linii między systemami operacyjnymi: http://jonathonstaff.com/blog/issues-with-line-endings/
Więcej informacji znajdziesz tutaj: https://www.jetbrains.com/help/idea/configuring-line-separators.html#d84378e48
źródło
zamiast zamiany zapytania możesz również użyć Mx delete-trailing-whitespace
źródło
~/.emacs
Potnij następujące w swoim (lub równorzędnym)a wtedy będziesz mógł po prostu użyć
M-x dos2unix
.źródło
^M
na końcu wiersza w Emacsie wskazuje powrót karetki (\ r), po którym następuje wysunięcie wiersza (\ n). Często zobaczysz to, jeśli jedna osoba edytuje pliki w systemie Windows (gdzie koniec linii jest kombinacją znaku powrotu karetki i znaku nowej linii), a Ty edytujesz w systemie Unix lub Linux (gdzie koniec linii to tylko znak nowej linii).Połączenie postaci zwykle nie jest szkodliwe. Jeśli używasz kontroli źródła, możesz skonfigurować format zameldowania pliku tekstowego, aby wiersze były magicznie dostosowane. Alternatywnie możesz użyć wyzwalaczy zameldowania i wypisania, które automatycznie „naprawią” pliki. Lub możesz po prostu użyć narzędzia takiego jak dos2unix, aby ręcznie dostosować rzeczy.
źródło
Jak wszyscy wspominali. To inny styl zakończenia linii. MacOSX używa końcówek linii Unix - np. LF (znak nowego wiersza).
Windows używa zarówno CR (powrót karetki), jak i LF (znak nowego wiersza) jako zakończenia wiersza. Ponieważ używasz zarówno systemu Windows, jak i komputera Mac, stąd problem.
Jeśli utworzysz plik w systemie Windows, a następnie przeniesiesz go na komputer Mac, możesz zobaczyć te znaki ^ M na końcu linii.
Jeśli chcesz je usunąć, możesz to zrobić bardzo łatwo w emacsie. Po prostu zaznacz i skopiuj znak ^ M i wykonaj zapytanie-zamień ^ M na i gotowe.
EDYCJA: Inne linki, które mogą być pomocne. http://xahlee.org/emacs/emacs_adv_tips.html
To pomaga skonfigurować emacsa do używania określonego typu zakończenia linii. http://www.emacswiki.org/emacs/EndOfLineTips
źródło
Natknąłem się na ten problem jakiś czas temu. ^ M reprezentuje powrót karetki, a wyszukiwanie na
Ctrl-Q Ctrl-M
(tworzy to dosłowne ^ M) pozwoli ci uzyskać uchwyt na ten znak w Emacsie. Zrobiłem coś w ten sposób:źródło
Jeśli nie masz zainstalowanego narzędzia dos2unix w swoim systemie, możesz utworzyć własne, aby pozbyć się znaków końcowych systemu Windows:
z następującą treścią
W swoim ~ / .bashrc dodaj linię:
Stosowanie
usunie ^ M znaków na końcach linii w plik_from_PC.txt. Możesz sprawdzić, czy je masz, czy nie, używając kota:
źródło
Zobacz też:
Ukrywanie ^ M w emacsie
Zachowaj ostrożność, jeśli zdecydujesz się usunąć ^ M postaci i prześlij ponownie do swojego zespołu. Mogą później zobaczyć plik bez powrotu karetki.
źródło
Rozwiązaniem dla mnie było użycie następującej funkcji elisp, którą można znaleźć w tym artykule na Wiki poświęconym Emacsowi .
Wykonaj funkcję
M-x dos2unix
w buforze i zapisz plik, wszystko^M
zniknie.źródło