2

仮想マシン イメージをコンパクトに保存するためのバージョン管理システムのいくつかのアイデアと機能に基づくbupバックアップ プログラム ( https://github.com/bup/bup )があります。git

オプションが渡されたときにバックアップ内に格納されているオブジェクトの sha1 のようなハッシュ (16 進数と同じ長さ) を表示できるサブコマンドがあります ( bup「-s , --hash : 各ファイル/ディレクトリのハッシュを表示するだけです。 」)。しかし、sha1 のようなハッシュは、元のファイルの出力と等しくありません。bup ls-sman bup-lssha1sum

オリジナルgitはデータの前に `blob NNN\0' 文字列を付けてデータの sha1 ハッシュを計算します。ここで、NNN はバイト単位のオブジェクトのサイズで、10 進数で書かれています。およびhttps://stackoverflow.com/a/28881708/

接頭辞 `blob NNN\0' をテストしましたが、まだ同じ sha1 サムではありません。

bupで使用されるファイルのハッシュサムを計算する方法は何ですか? それは線形の sha1 ですか、それともマークル ツリーのようなツリーのようなバリアントですか? ディレクトリのハッシュは何ですか?

lsbup のコマンドのソースはhttps://github.com/bup/bup/blob/master/lib/bup/ls.pyで、ハッシュは 16 進数で出力されていますが、ハッシュはどこで生成されたのでしょうか?

def node_info(n, name, 
    ''' ....
    if show_hash:
        result += "%s " % n.hash.encode('hex')

そのハッシュは、bupバックアップの作成時に生成され(bup index+bup saveコマンドによってファイルがバックアップ内に配置された場合)、印刷されただけbup lsです; または、毎回再計算されbup ls、bup バックアップの整合性テストとして使用できますか?

4

1 に答える 1