2009-08-27 59 views
5

我正在编写一个预先提交的钩子,并且想要检查每个即将提交的文件的全部内容(特别是对文件)。我想lint检查文件,因为它将被提交,而不是它存在于我的工作树中(可能有所不同)。显示完整的文件,因为它们将存在于git索引

git附带的pre-commit hook示例显示如何获取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

是的,结帐索引只是我需要找到我需要找到的提示。谢谢! – 2009-08-27 19:02:09

6

单个 文件另​​一种解决方案是(假设你不冲突的合并过程中或衍合):

$ git show :0:path/to/file 

(其中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 2009-08-27 18:26:42

相关问题