[解決済み] gitオブジェクトを抽出するためにコマンドラインツールでDEFLATEを行うには?
2023-06-06 16:10:12
質問
DEFLATEアルゴリズムのコマンドラインラッパーを探しています。
DEFLATEを使って圧縮されたファイル(git blob)があり、それを解凍したいのです。gzipコマンドは、gzipフォーマットではなく、DEFLATEアルゴリズムを直接使用するオプションを持っていないようです。
理想的には、私はこれを行うことができる標準的なUnix/Linuxツールを探しています。
edit: これは私の問題のためにgzipを使おうとしたときに得られた出力です。
$ cat .git/objects/c0/fb67ab3fda7909000da003f4b2ce50a53f43e7 | gunzip
gzip: stdin: not in gzip format
どのように解決するのですか?
UPDATEしてください。
Mark Adlerは、git blobは生のDEFLATEストリームではなく、zlibストリームであることを指摘しました。これを解凍するには
pigz
ツールで解凍できます。このツールはいくつかのLinuxディストリビューションにプリパッケージされています。
$ cat foo.txt
file foo.txt!
$ git ls-files -s foo.txt
100644 7a79fc625cac65001fb127f468847ab93b5f8b19 0 foo.txt
$ pigz -d < .git/objects/7a/79fc625cac65001fb127f468847ab93b5f8b19
blob 14file foo.txt!
kriegaex により編集されました。
Git Bash for Windows のユーザーは
pigz
はデフォルトでは利用できません。プリコンパイルされた32/64ビット版を見つけることができます。
はこちら
. 私は64ビット版を試しましたが、うまく動きました。例えば
pigz.exe
を直接
c:\Program Files\Git\usr\bin
をパス上に置くようにします。
歴史的な理由で保存されている、私のオリジナルの回答です。
のヒントを理解するならば、私は
ウィキペディアの記事
にあるヒントを理解するならば、Marc van Kempen によって言及された
puff.c
から
zlib
を直接呼び出します。
これは小さな例です。
#include <assert.h>
#include <string.h>
#include "puff.h"
int main( int argc, char **argv ) {
unsigned char dest[ 5 ];
unsigned long destlen = 4;
const unsigned char *source = "\x4B\x2C\x4E\x49\x03\x00";
unsigned long sourcelen = 6;
assert( puff( dest, &destlen, source, &sourcelen ) == 0 );
dest[ 4 ] = '\0';
assert( strcmp( dest, "asdf" ) == 0 );
}
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み】"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 実装 サイバーパンク風ボタン
おすすめ
-
gitlab をアップロード ! [リモート拒否] dev -> dev (受信前のフックが拒否されました)
-
致命的 リモートレフマスターが見つからない
-
[解決済み] キーフィンガープリントが原因でHerokuにプッシュできない
-
[解決済み] 単一のgitコミットに対して設定されたユーザーを上書きする
-
[解決済み] 単一ファイルのマージをやり直す
-
[解決済み] Gitブランチの名前をローカルとリモートで変更できますか?重複
-
[解決済み] 以前のコミットにファイルを追加するには?
-
[解決済み] GitHubのウェブサイト上でディレクトリやフォルダの名前を変更するには?
-
[解決済み] gitで、stashを適用せずに、追跡されていないstashedファイルを表示する方法はありますか?
-
[解決済み] 別のユーザーでコードをコミットするにはどうすればよいですか?