2009-08-27 9 views
5

私は事前コミットのフックを書いており、コミットしようとしている各ファイルの内容全体をチェックしたいと思います。ファイル)。私はそれが私の作業ツリー(それは異なるかもしれません)に存在するのではなく、コミットされるようにファイルをチェックしています。gitインデックスに存在する完全なファイルを表示

gitに付属しているpre-commitフックの例は、diffを取得する方法を示しています(スペースなどを調べることができます)が、コミットされるようにファイル全体を取得する必要があります。

答えて

9

これを試してみてください:

git --work-tree=/path/to/checkout-area checkout-index path/to/file-to-checkout 

--work-treeオプションでは、あなたの本当の仕事・ツリー内のファイルを上書きしないように、作業ツリーとして別の領域を使用するようにgitに指示します。必要に応じて上書きするように指示する場合は、-fオプションを追加することもできますが、スクリプトがそれ自身の後で適切にクリーンアップする場合は、不要にする必要があります。詳細については、man page for checkout-indexを参照してください。

+0

ちょっと、チェックアウトインデックスは私が見つける必要があったものを見つけるために必要なヒントでした。ありがとう! –

6

単一 ファイルのための別の解決策は、(あなたが競合マージ中ではないか、リベースと仮定)である:(path/to/fileはリポジトリのトップディレクトリからの相対である)

$ git show :0:path/to/file 

git cat-file blob :0:path/to/file」(これは、キーワード拡張、行末変換など)を呼び出すことはないと思います。

について

参照区間延長SHA-1の構文マニュアルページgit-rev-parse


1)Jefromi's answerの利点はgit checkout-indexを使用して複数のファイルをチェックアウトすることができますということです。ディレクトリ全体またはプロジェクト全体をチェックアウトすることができます。

+0

私はそれを使用する言い訳を見つけるつもりですが、これはかなり素晴らしいです。 – Cascabel

関連する問題