展示 Git 中索引文件的许可权限

20

这与我最近提出的一个问题有关存储非裸库以便在计算机之间轻松移动, 因此阅读该问题可以有助于了解背景。

要点是fileMode会对一些文件报告差异。我找不到一种一致性地复现它的方法,但它经常发生。 我注意到这个文件在两台机器上都具有644权限,但在其中一台机器上报告755的差异。 这让我想起Git认为可执行位已设置,但我无法弄清楚是否可以实际“看到”Git如何设置该位。


只是为了确保我理解正确:磁盘上的文件始终为644,但提交中的文件有时为755git ls-treegit ls-files -s显示什么?这将告诉您git记录的数字。 - Josh Lee
他们说位未设置。文件本身显示为644,但指示了从未进行的更改。你确实回答了这个问题。看起来git ls-files是显示可执行位状态的答案。如果你把你的评论改成一个答案,我会标记它。 - Rob Wilkerson
2个回答

36

要查看git对提交和索引中的文件的实际状态,可以分别使用 git ls-tree <tree>git ls-files -s <path> 命令。

顺便提一下,似乎git只查看可执行位,并假定其他所有情况都是644。如果想尝试调试此奇怪问题,请参考cache.h文件中的create_ce_mode函数


3
如果你想要尝试调试这个奇怪的问题 - 没有什么可以调试的:这是根据设计完成的。Git 的维护者: "…git 曾经记录了完整的(blob)模式和 0777 的值... 它有一个非常不好的副作用,即生成的树取决于用户的 UMASKs ...一个人记录了一个带有模式 664 的 blob,下一个修改文件的人会记录具有模式 644 的 blob ,这使得很难跟踪有意义的更改... 这个问题已经在很长时间前使用提交 e447947 [on] 2005-04-16 解决了。" - Chris

0
使用如下命令打开gitk:
$ gitk path/to/repository/file

在打开的窗口中,在虚线下面,您可以看到六个数字。最后三个是文件权限。
...
------------------------------- path/to/repository/file -------------------------
index a5e14048..08ce8948 100644
...

在上面的例子中,6个数字是100644,文件权限是644

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接