2013-08-07 5 views
7

친구와 저는 같은 .cs 파일에서 동시에 작업하고 있고 병합 충돌이있을 때 충돌이 있지만 파일이로드되지 않습니다. .cs 파일은 바이너리 파일이기 때문에 일반적인 "HEAD" ">>>". 그래서 우리는 .gitattributes 파일에 여러 가지 (* .cs 텍스트 등)를 추가하여 git이 작업을하지 않는 텍스트 파일로 취급하도록했습니다.Git cant diff 또는 utf-16 인코딩의 .cs 파일 병합

우리는 git이 다른 .cs 파일과 다를 수 있다는 것을 깨달았을 때 그 사실을 알았습니다. 그 이유는 유니 코드 인코딩에 중국어 문자가 포함되어 있기 때문입니다.

그래서 우리는 git diff를 만들거나 utf-16 또는 utf-8 형식의 파일을 병합합니까?

내가 푸시하면, gitlab이 정확히 무엇이 다른지 보여줍니다. 그래서 나는 자식이 서버에서 어떻게 diff 될 수 있는지 알지 못한다.하지만 bash에서는 그렇지 않다.

+1

다음 질문은 동일한 문제를 논의하고 있다고 생각합니다. http://stackoverflow.com/questions/777949/can-i-make-git-recognize-a-utf-16-file-as-text –

+0

예, 나는 그것을 시도했다. 그러나 diff 표시 "@@@@@@@" 그래서 많은 도움이 아니라 병합 중 하나가 – user1879789

+0

해결 방법을 다른 diff/병합 도구를 사용할 수 있습니다. 너 그거 해봤 니? –

답변

4

C++ 프로젝트의 * .rc 파일과 비슷한 문제가있어서이 문제를 해결하는 가장 좋은 방법은 git의 얼룩과 필터를 사용하여 저장소에있는 모든 것을 utf-8로 저장 한 다음 utf로 변환하는 것입니다. 작업 디렉토리에 쓸 때 -16.

이 방법은 diffs, merges 또는 utf8 텍스트에서 아무런 문제없이 작동하는 모든 작업을 수행하지만, 작업 복사본에는 utf16이있어 시각적 스튜디오를 행복하게 유지할 수 있습니다.

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

:

이렇게 구성하려면 사용 가능한 iconv와 한 자식의 버전을 사용하고 있는지 확인 (msysgit의 최신 버전 수행)와 사용자의 ~/.gitconfig 파일에 다음을 추가 그런 다음 .gitattributes 파일 추가에 :

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

이미 바이너리로 저장 UTF16 기존 파일이있는 경우에, 당신은 저장소에서 제거하고 다시 추가를해야합니다.

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" 

이제 모든 것이 작동합니다.

+3

이 솔루션에주의하십시오. - gitconfig는 100 % 사용자에 종속적입니다. 나는 그것을 저장하고 * 변경하지 않고 무엇을 보는지 필터링하는 * 것을 권합니다. 마찬가지로, 다른 사람이 .gitconfig 행을 제외하고 이것을 체크 아웃하면 (또는 1 년이나 2 년 만에) * * 코드가 컴파일되지 않습니다 *. .rc *는 저장소에 UTF-16으로 저장해야하므로 [diff "utf16"]을 필터보다 사용하는 것이 좋습니다. –