programing

git은 내 .sql 파일이 바이너리 파일이라고 생각하는 이유는 무엇입니까?

nasanasas 2020. 11. 28. 09:36
반응형

git은 내 .sql 파일이 바이너리 파일이라고 생각하는 이유는 무엇입니까?


처음으로 github에 푸시 한 .sql 파일이 있습니다. 그러나 커밋을 보면 다음과 같이 말합니다.

BIN  WebRole/Sql/Database.sql View
Binary file not shown

누군가 "이진 파일이 표시되지 않음"이라고 말하는 이유를 말해 줄 수 있습니까?


확장 프로그램만으로는 GitHub가 텍스트 파일인지 확인하기에 충분하지 않습니다.
그래서 그것은 그 내용을 봐야합니다.

" Git이이 텍스트 파일을 바이너리 파일로 취급하는 이유는 무엇입니까? " 에서 언급했듯이 내용에 텍스트 파일이라고 추측 할만큼 충분한 ASCII 문자가 포함되어 있지 않을 수 있습니다.

.gitattributes 파일사용 .sql하여 바이너리가 아닌 텍스트 여야 함 을 명시 적으로 지정할 수 있습니다.

*.sql diff

업데이트 2018 : " UTF-8 인코딩 문서에서 작동하지 않는 Utf-8 인코딩 "에서 언급 했듯이 Git 2.18 .gitattributes에는 새로운 working-tree-encoding속성이 있습니다.
따라서 Rusi답변 에서 볼 수 있듯이 :

*.sql text working-tree-encoding=UTF-16LE eol=CRLF

으로 kostix는 에 추가 코멘트 :

이러한 파일이 Microsoft SQL Management Studio에서 생성 된 경우 (또는 사용중인 MS SQL Server의 관리 도구 버전에서 호출되는 모든 항목) 저장되는 파일은 UCS-2 (또는 UTF-16)로 인코딩됩니다. Git의 눈에 실제로 텍스트가 아닌 2 바이트 인코딩

"당신은 예를 볼 수 있습니다 힘내라고" Binary files a… and b… differ대한의 " *.reg파일 "

" Set file as non-binary in git " 에서 언급했듯이 :

"Git이 내 파일을 바이너리로 표시하는 이유는 무엇입니까?" 대답은 파일의 처음 8000 자 내에 NUL (0) 바이트가 표시되기 때문입니다.
일반적으로 파일이 UTF-8이 아닌 다른 이름으로 저장되기 때문에 발생합니다. 따라서 UCS-2, UCS-4, UTF-16 또는 UTF-32로 저장 될 수 있습니다. 모두 ASCII 문자를 사용할 때 NUL 문자가 포함되어 있습니다.


Neo 가 주석에서 언급 했듯이 (그리고 Git에서이 텍스트 파일을 바이너리 파일로 취급하는 이유는 무엇입니까? ) :

파일 메뉴의 '고급 저장 옵션'메뉴 항목에서 '서명이있는 UTF-8'인코딩을 선택하여 SSMS에 저장된 파일의 인코딩을 UTF-8로 변경할 수 있습니다.


연결된 질문과 몇 가지 다른 의견에서 받아 들여진 답변을 사용하여 Win10에서 작동하고 실행되는 문제에 대한 해결책으로 이것을 생각해 냈습니다.

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
Get-ChildItem -Recurse *.sql | foreach {
    $MyPath = $_.FullName;
    $Contents = Get-Content $MyPath
    [System.IO.File]::WriteAllLines($MyPath, $Contents, $Utf8NoBomEncoding)
}

2008 R2 용 SSMS (예, 여전히!)에서이 문제로 어려움을 겪는 사람들을 위해 다음과 같이 기본 인코딩을 설정할 수 있습니다.

  • C : \ Program Files (x86) \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \ SqlWorkbenchProjectItems \ Sql 디렉터리를 찾습니다.

위치는 다를 수 있습니다. Windows 7 64 비트에서 기본 설치에 사용되는 디렉토리입니다.

  • 이 위치에서 빈 SQL 파일 SQLFile.sql을 추가 (또는 편집)하십시오.

이것은 새 .SQL 파일의 템플릿으로 사용됩니다. 필요한 인코딩을 사용하여 저장하십시오 (제 경우에는 Windows 줄 끝이있는 Windows-1252). '저장'버튼 오른쪽에있는 화살표는 인코딩 선택을 제공합니다.

git 및 SSMS의 번거 로움을 피하기 위해 개발 팀과 인코딩을 조정해야합니다.


오래된 질문에 새로운 답이 있습니다. git은 최근 working-tree-encoding이러한 이유로 정확하게 옵션을 성장 시켰습니다 . gitattributes 문서 참조 [맨 페이지가 새롭기 때문에 일치하는지 확인하십시오!]

예를 들어 다음을 사용하여 SQL 파일의 인코딩을 찾으십시오. file

Windows 시스템에 bom이없는 utf-16이 있으면 gitattributes 파일에 추가하십시오.

*.sql text working-tree-encoding=UTF-16LE eol=CRLF

utf-16 little endinan (bom 포함)이 만들면

*.sql text working-tree-encoding=UTF-16 eol=CRLF

다음은 SSMS 2012를 사용하여 저에게 도움이되는 빠른 해결 방법입니다. 도구 => 옵션 => 환경 => 국가 별 설정에서 언어를 "영어"에서 "Microsoft Windows와 동일"으로 변경하면 (다시 시작하라는 메시지가 표시 될 수 있습니다.) 변경 사항이 적용되는 SSMS), 더 이상 새 파일의 기본 인코딩으로 UTF-16을 사용하지 않습니다. 이제 내가 만든 모든 파일에는 8 비트 인코딩 체계 인 코드 페이지 1252 (파일 => 고급 저장 옵션)가 있습니다. 문제가없는 것 같습니다.Git Diff


이 문제를 해결하는 방법은 파일이 8 비트 인코딩을 사용하도록하는 것입니다. 이 PowerShell 스크립트를 실행하여 현재 디렉터리 및 해당 하위 디렉터리에있는 모든 .SQL 파일의 인코딩을 변경할 수 있습니다.

Get-ChildItem -Recurse *.sql | foreach {
  $FileName = $_.FullName;
  [System.Io.File]::ReadAllText($FileName) | Out-File -FilePath $FileName -Encoding UTF8;
}

참고URL : https://stackoverflow.com/questions/28145687/why-does-git-think-my-sql-file-is-a-binary-file

반응형