[解決済み] Git がファイルをバイナリとして扱うかテキストとして扱うかを判断するには?
質問
Git が、ファイルがバイナリかテキストかを自動的に判別することは知っています。
.gitattributes
を使って手動で設定することができるのは知っています。しかし、ファイルをどう扱うかをGitに尋ねる方法はあるのでしょうか?
例えば、2つのファイルを含むGitリポジトリがあるとします。An
ascii.dat
ファイルで、プレーンテキストと
binary.dat
ファイルにはランダムなバイナリが含まれています。Gitは、最初の
.dat
ファイルをテキストとして扱い、2番目のファイルをバイナリとして扱います。さて、私はテキストファイル用のビューアとバイナリファイル用の特別なビューア(例えば16進ダンプを表示する)を持つGitウェブフロントエンドを書きたいと思っています。もちろん、私自身のテキスト/バイナリ・チェックを実装することはできますが、ビューアがGitがこれらのファイルをどのように扱うかの情報に依存する方がより便利でしょう。
では、ファイルをテキストとして扱うかバイナリとして扱うかをGitに尋ねるにはどうすればよいのでしょうか?
どのように解決するのですか?
builtin_diff()
1
コール
diff_filespec_is_binary()
を呼び出す
buffer_is_binary()
を呼び出し、最初の 8000 バイト (短い場合は全長) の中にゼロバイト (NUL "文字") があるかどうかをチェックします。
私は、この「バイナリかどうか」テストが、どのコマンドでも明示的に公開されていることを知りません。
git merge-file
は直接
buffer_is_binary()
を使うので、それを利用することができるかもしれません。
git merge-file /dev/null /dev/null file-to-test
のようなエラーメッセージが表示されるようです。
error: Cannot merge binary files: file-to-test
のようなエラーメッセージが表示され、バイナリファイルが与えられると255の終了ステータスが出力されるようです。しかし、私はこの動作に依存したいかどうか確信が持てません。
もしかしたら
git diff --numstat
の方が信頼できるかもしれません。
isBinary() {
p=$(printf '%s\t-\t' -)
t=$(git diff --no-index --numstat /dev/null "$1")
case "$t" in "$p"*) return 0 ;; esac
return 1
}
isBinary file-to-test && echo binary || echo not binary
バイナリファイルの場合は
--numstat
で始まる出力でなければなりません。
-
TAB
-
TAB、だから我々はそれをテストするだけです。
1
builtin_diff()
のような文字列は
Binary files %s and %s differ
のような文字列があり、見覚えがあるはずです。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] ローカルの Git リポジトリが元々クローンされた URL を特定するにはどうすればよいですか。
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
致命的 リモートレフマスターが見つからない
-
コミットメッセージが空だったため、コミットを中止する git commit
-
giteaを使ったGitサービスの構築
-
ファイル名が長すぎるため、作業ツリーをチェックアウトできない警告が表示されました。クローンには成功しましたが、チェックアウトに失敗しました。
-
git-fatal: 設定されたプッシュターゲットがありません / 警告: store/README.md の LF は CRLF に置き換えられています。
-
[解決済み】Windowsでファイルのエンコードを取得する
-
[解決済み] Git のリモート HEAD を master 以外に指定するように変更する
-
[解決済み] Git タグリスト、コミット sha1 ハッシュの表示
-
[解決済み] ファイル変更時のDockerコンテナの再構築
-
[解決済み] C言語プログラミング:ファイルの内容を全てバッファに読み込む方法 [重複]について