0

Git で以前のバージョンのファイルを効率的に読み取る方法はありますか? (コンテンツ管理システムのデータベースとして Git を使用しており、履歴を表示する必要があります)。

Git はファイルの完全なバージョンを保存するのではなく、差分のみを保存するため、以前のバージョンが必要な場合は、ディスクから読み取るだけでなく、差分を使用して計算するように Git に依頼する必要があります。

GitHub はどうやらそれを行っているようで、たとえば、以前のバージョンのファイルが表示されます。HTTPリクエストごとに本当に計算するのですか、それとも何らかの方法で最適化しますか?

4

1 に答える 1

4

Erratum: git は常にフル バージョンのファイルを保存します。したがって、どのリビジョンを表示しても同じように効率的です。

これは、差分 (パッチ) のみを保存する他のリビジョン システムとは対照的です。特に Cvs は、まさにこの理由から (多くのユーザーがいる大規模なリポジトリの場合)、深い履歴やトランク以外のブランチにアクセスするのが厄介でした。


参考までに、特定のバージョンの特定のファイルに便利にアクセスするには (sha/reference):

git show HEAD:full/path/to/file

head をタグ、ブランチ、または git sha (長い 16 進数) に置き換えます

パスは、ファイル システムのルートではなく、git リポジトリのベースに対する相対パスです。これについて言及するのは、何度か噛まれたからですcd.ディレクトリに入ることができず、フルパスを指定しないことを期待しています.


ウィキペディア (すべての真実と善の本拠地) は私をバックアップします。

Git は、ファイルの各リビジョンを一意の BLOB オブジェクトとして保存します。ブロブ間の関係は、ツリー オブジェクトとコミット オブジェクトを調べることで見つけることができます。新しく追加されたオブジェクトは、zlib 圧縮を使用して全体が保存されます。

ウィキペディアが苦手な場合は、 git internals マニュアルを注意深く読んで確認してください。

于 2012-08-30T04:41:05.753 に答える