2013-08-07 21 views
7

aynı .cs üzerinde çalıştığını ve Bir arkadaşım aynı anda dosya ve bir birleştirme çatışma git noktaları varken yüklü bir çatışma ancak dosya isnt var dışarı her zamanki "HEAD" ">>>" şeyler çünkü .cs dosyaları ikili dosyalardı. Bu yüzden çok sayıda şey ekledik (* .cs metin ve benzeri) - .gitattributes dosyasına gitmemiz gereken bir metin dosyası olarak gitmemizi sağladık.Git can not fark veya birleştirme .cs utf-16 kodlaması dosyasını

İşte biz de git başka .cs dosyalarını ve adil değil bu bir diff fark etti. Bunun nedeni, bazı Çince karakterler içerdiğinden unicode kodlamasıdır.

yüzden git diff yapmak veya içindedir utf-16 veya utf-8 formatını dosyalarını birleştirme nasıl?

furstrating şey i iterseniz tam olarak neyin farklı, gitlab göstermesidir. Yani git nasıl sunucuda farklı olabilir ama bash ile değil.

+1

Aşağıdaki sorunun aynı sorunu tartıştığını düşünüyorum: http://stackoverflow.com/questions/777949/can-i-make-git-recognize-a-utf-16-file-as-text –

+0

Evet, Bunu denedim. Bu "@@@@@@@" yüzden onun pek yardımı gibi Ancak fark görüntüler ve alışkanlık birleştirme ya – user1879789

+0

bir iş çevresinde farklı bir fark/birleştirme aracı kullanmak için olabilir. Bunu denedin mi? –

cevap

4

Bir C++ projesi için * .rc dosyaları ile benzer bir sorun yaşadım ve bunu çözmenin en iyi yolunun, utf-8 olarak depodaki her şeyi depolamak için git'in bulaşma ve temiz filtrelerini kullanması ve daha sonra utf dönüştürmesi -16 çalışma dizinine yazarken.

Bu şekilde her şey git, böyle fark dosyaları olarak yapar birleştirir ya da her türlü sorun olmadan utf8 metin üzerinde çalışacaktır ancak çalışma kopya mutlu görsel stüdyo tutacak UTF16 sahip olacaktır.

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

:

bu yapılandırmak için kullanılabilir iconv etmiştir Git bir sürümünü kullandığınızdan emin olun (msysgit en son versiyonları yapmak) ve ~/.gitconfig dosyasına aşağıdakileri ekleyin ardından .gitattributes dosya eklemedeki:

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

zaten ikili olarak depolanan UTF16 mevcut dosyalar varsa, o zaman deposundan kaldırmak ve yeniden eklemek onları gerekir.

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" 

Ve şimdi her şey çalışmalıdır.

+3

Bu çözüme dikkat edin - .gitconfig,% 100 kullanıcı bağımlı. Bunu * filtre * kullanmanız önerilir * ne _you_ bakın ve değil * değiştir * ne saklanır. İçerisinde olduğu gibi, birisi bunu kontrol ederse (veya bir veya iki yıl içinde yaparsanız) .gitconfig satırı - * kodunuz derlenmez *. Filtreden [diff "utf16"] kullanmak daha iyidir çünkü .rc *, depoda UTF-16 olarak saklanmalıdır. –

İlgili konular