2013-08-07 11 views
7

Znajomy i ja pracowaliśmy nad tym samym plikiem .cs w tym samym czasie, a kiedy jest konflikt konfliktu, git wskazuje na konflikt, ale plik nie jest załadowany zwykle "HEAD" ">>>" rzeczy, ponieważ pliki .cs były plikami binarnymi. Dodaliśmy więc wiele rzeczy (tekst * .cs i tak dalej) - do naszego pliku .gitattributes, aby git potraktował go jako plik tekstowy, który nie działał.Git cant diff lub scalanie pliku .cs w kodowaniu utf-16

To wtedy, gdy zdaliśmy sobie sprawę, że git może odróżnić inne pliki .cs i po prostu nie ten. Powodem tego jest kodowanie Unicode, ponieważ zawiera kilka chińskich znaków.

W jaki sposób możemy tworzyć pliki Git diff lub scalać pliki w formacie utf-16 lub utf-8?

Fałszowanie polega na tym, że jeśli popchnę, gitlab pokazuje dokładnie to, co jest inne. Więc nie rozumiem, jak git może się różnić na serwerze, ale nie z bash.

+1

Uważam, że następujące pytanie omawia ten sam problem: http://stackoverflow.com/questions/777949/can-i-make-git-recognize-a-utf-16-file-as-text –

+0

Tak, Próbowałem tego. Jednak diff wyświetla się w następujący sposób: "@@@@@@@" , więc nie jest to zbyt pomocne i nie będzie się łączyło ani – user1879789

+0

Obejście problemu może polegać na użyciu innego narzędzia do porównywania/scalania. Czy próbowałeś tego? –

Odpowiedz

4

Miałem podobny problem z plikami * .rc dla projektu C++ i odkryłem, że najlepszym sposobem rozwiązania tego problemu jest użycie git-smudge i czystych filtrów do przechowywania wszystkiego w repozytorium jako utf-8, a następnie konwersja na utf -16 podczas zapisu do katalogu roboczego.

W ten sposób wszystko działa, jak na przykład różnice, scalenia lub cokolwiek będzie działać na tekście utf8 bez problemu, ale twoja robocza kopia będzie miała utf16, co sprawi, że visual studio będzie zadowolone.

Aby to skonfigurować, upewnij się, że używasz wersji git, który dostępny iconv (najnowsze wersje msysGit zrobić) i dodać następujące do pliku ~/.gitconfig:

[filter "utf16"] 
    clean = iconv -f utf-16le -t utf-8 
    smudge = iconv -f utf-8 -t utf-16le 
    required 

następnie w pliku .gitattributes dodają:

*.rc filter=utf16 
resource.h filter=utf16 

Jeśli masz już istniejące pliki w UTF16 przechowywane jako binarne, to trzeba je usunąć z repozytorium i ponownie je dodać.

git rm --cached <names-of-utf16-files> 
git commit -am "removed utf16 files" 
git add <names-of-utf16-files> 
git commit -am "added utf16 files as utf8" 

A teraz wszystko powinno działać.

+3

Uważaj na to rozwiązanie - .gitconfig jest w 100% zależne od użytkownika. Zalecam używanie go do * filtrowania * tego, co widzisz, a czego nie * zmiany * tego, co jest przechowywane. Tak jak w przypadku, gdy ktoś inny to sprawdza (lub jeśli robisz to za rok lub dwa) bez tej linii .gitconfig - * twój kod się nie skompiluje *. Lepiej używać [diff "utf16"] niż filtrować, ponieważ .rc * musi * być przechowywane w repozytorium jako UTF-16. –