显示git索引中存在的完整文件

Bry*_*ves 6 git

我正在编写一个预提交钩子,并且想要检查即将提交的每个文件的全部内容(特别是对文件进行lint检查).我想lint检查文件,因为它将被提交,而不是因为它存在于我的工作树中(可能不同).

git附带的预提交钩子示例向您展示了如何获取diff(因此您可以检查空间等),但我需要获取整个文件,因为它将被提交.

Cas*_*bel 10

试试这个:

git --work-tree=/path/to/checkout-area checkout-index path/to/file-to-checkout
Run Code Online (Sandbox Code Playgroud)

--work-tree选项告诉git使用不同的区域作为工作树,这样就不会覆盖真正的工作树中的文件.您可能还需要添加-f选项以告知它在必要时进行覆盖,但如果您的脚本在其自身之后正确清理则不需要.有关更多信息,请参阅checkout-index手册页.


Jak*_*ski 5

单个1文件的另一个解决方案是(假设您不是在冲突的合并或rebase期间):

$ git show :0:path/to/file
Run Code Online (Sandbox Code Playgroud)

(path/to/file相对于存储库中的顶级目录).

或" git cat-file blob :0:path/to/file",(我认为)不会调用任何过滤器(关键字扩展,行尾转换等).

请参阅git-rev-parse手册页中有关扩展sha-1语法的部分


1.)Jefromi答案的优点是使用git checkout-index你可以签出多个文件; 你可以检查整个目录甚至整个项目.