初めて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
属性があります。
だから、ルシの答えに示されているように:
*.sql text working-tree-encoding=UTF-16LE eol=CRLF
これらのファイルがMicrosoftSQL Management Studio(または使用しているMS SQL Serverの管理ツールのバージョンで呼び出されるもの)によって生成された場合、保存されるファイルはUCS-2(またはUTF-16)でエンコードされます。 2バイトエンコーディング。これはGitの目には実際にはテキストではありません。
あなたは「の例を見ることができますGitは言う『Binary files a… and b… differ
のために』*.reg
ファイル」
「gitでファイルを非バイナリとして設定する」で述べたように:
「Gitが私のファイルをバイナリとしてマークするのはなぜですか?」答えは、ファイルの最初の8000文字内のどこかにNUL(0)バイトが表示されているためです。
通常、これはファイルがUTF-8以外のものとして保存されているために発生します。したがって、UCS-2、UCS-4、UTF-16、またはUTF-32として保存される可能性があります。ASCII文字を使用する場合、これらすべてにNUL文字が埋め込まれています
ネオは言及コメントで(とで、なぜGitは、バイナリファイルとしてこのテキストファイルを扱うのですか?):
SSMSに保存されたファイルのエンコーディングをUTF-8に変更するには、[ファイル]メニューの[詳細な保存オプション]メニュー項目から[署名付きのUTF-8]を選択します。
iso
:それは役立ちますかどうかを確認するために、そのコマンドのDOS2UNIXの」をcomputerhope.com/unix/dos2unix.htm
リンクされた質問から受け入れられた回答と他のいくつかのコメントを使用して、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)
}
$Contents = Get-Content -LiteralPath $MyPath
この古い質問には新しい答えがあります—gitは最近オプションを増やしました working-tree-encoding
まさにこれらの理由で。gitattributesのドキュメントを参照してください[これはまったく新しいので、manページが一致していることを確認してください!]
SQLファイルのエンコーディングを調べます。 file
(たとえば)Windowsマシンでbomのないutf-16の場合は、gitattributesファイルに追加します
*.sql text working-tree-encoding=UTF-16LE eol=CRLF
utf-16リトルエンディナン(bom付き)の場合は
*.sql text working-tree-encoding=UTF-16 eol=CRLF
2008 R2のSSMSでこの問題に苦しんでいる人のために(はい、それでも!)、デフォルトのエンコーディングを次のように設定できます。
場所は異なる場合があります。これは、Windows 764ビットのデフォルトインストールで使用されるディレクトリです。
これは、新しい.SQLファイルのテンプレートとして使用されます。必要なエンコーディングを使用して保存します(私の場合、Windows行末のあるWindows-1252)。[保存]ボタンの右側にある矢印を使用すると、エンコーディングを選択できます。
gitやSSMSの煩わしさを避けるために、開発チームとエンコーディングを調整する必要があります。
C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\SqlWorkbenchProjectItems\Sql
C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio\SqlWorkbenchProjectItems\Sql
これは、SSMS 2012を使用して、私がうまくいった簡単な回避策です。ツール=>オプション=>環境=>国際設定で、言語を「英語」から「Microsoft Windowsと同じ」に変更すると(再起動を求められる場合があります)変更を有効にするためのSSMS)、新しいファイルのデフォルトのエンコーディングとしてUTF-16を使用しなくなりました-私が作成するすべての新しいファイルには、8ビットのエンコーディングスキームであるCodepage 1252(ファイル=>高度な保存オプション)がありますと問題がないようですGit Diff
この問題を解決する方法は、ファイルに8ビットエンコーディングを使用させることです。このPowerShellスクリプトを実行して、現在のディレクトリとそのサブディレクトリにあるすべての.SQLファイルのエンコーディングを変更できます。
Get-ChildItem -Recurse *.sql | foreach {
$FileName = $_.FullName;
[System.Io.File]::ReadAllText($FileName) | Out-File -FilePath $FileName -Encoding UTF8;
}
[System.IO.File]::WriteAllLines($MyPath, $MyFile, $Utf8NoBomEncoding)