有没有人有一个在目录上使用git hash-object的例子?它在文件上很容易工作*但是不能像我期望的那样工作**
*: git hash-object c:\somefile.txt
**: git hash-object -t tree c:\somedirectory
Run Code Online (Sandbox Code Playgroud)
当我尝试在目录中使用hash-object时,它会抱怨"致命:无法打开'C:\ someDirectory':权限被拒绝"
我不确定是否要获取 git 存储库外部目录的哈希值,但是对于存储库内部的目录,请尝试仅打印哈希值:
git rev-parse HEAD:some/directory
Run Code Online (Sandbox Code Playgroud)
无需使用其他需要额外处理的命令。
这也可以工作,但会提供您可能不想要的其他信息(例如文件模式和其他数据):
git ls-tree HEAD some/directory
Run Code Online (Sandbox Code Playgroud)
根据您希望这样做的原因,以下git命令可能会有用:
git ls-files -s somedirectory | git hash-object --stdin
Run Code Online (Sandbox Code Playgroud)
这给出了一个考虑文件名和内容的哈希值。
它是这样的。的git ls-files -s ....输出文件和它们作为文本到散列的列表stdout,然后git hash-object生成用于从它接收数据的散列stdin。
我的用例如下-我想知道一个分支中目录中的(git管理)文件是否与另一个分支中的文件完全匹配(*)。具体用途是比较“目录哈希”,决定是否需要重新生成缓存的派生文件。
默认情况下git ls-files也会在子目录中列出文件。如果您不希望这样做,请尝试查看“仅在一个目录级别上如何git ls-file的答案。git ls-files还有其他多种选择,包括指定要包含的文件列表的功能。
(*)排除哈希冲突