在git中显示索引文件的权限

在git中显示索引文件的权限,git,permissions,diff,dropbox,Git,Permissions,Diff,Dropbox,这与我最近提出的另一个问题有关,即如何在计算机之间轻松移动,因此阅读该问题的背景知识可能会有所帮助 要点是,fileMode不断报告一些文件的差异。我找不到一种方法来始终如一地复制它,但它经常发生。我注意到,该文件在两台机器上都有644个权限,在其中一台机器上经常报告与755的差异。这让我觉得Git相信已设置了可执行位,但我无法确定是否可以看到Git是如何设置该位的。要查看Git对提交和索引中的文件的实际看法,请分别使用Git ls tree和Git ls files-s 顺便说一句,git似乎

这与我最近提出的另一个问题有关,即如何在计算机之间轻松移动,因此阅读该问题的背景知识可能会有所帮助


要点是,
fileMode
不断报告一些文件的差异。我找不到一种方法来始终如一地复制它,但它经常发生。我注意到,该文件在两台机器上都有644个权限,在其中一台机器上经常报告与755的差异。这让我觉得Git相信已设置了可执行位,但我无法确定是否可以看到Git是如何设置该位的。

要查看Git对提交和索引中的文件的实际看法,请分别使用
Git ls tree
Git ls files-s


顺便说一句,git似乎只查看可执行位,并假设其他所有内容都是
644
。查看是否要调试这个奇怪的问题。

使用gitk,如下所示

$gitk path/to/repository/file
在打开的窗口中,在虚线下可以看到六位数字。 最后三个是文件权限

...
------------------------------- path/to/repository/file -------------------------
index a5e14048..08ce8948 100644
...

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

,这只是为了确保我正确阅读:磁盘上的文件总是
644
,但提交中的文件有时是
755
git-ls-tree
git-ls-s
表示什么?这将告诉您git记录的数字。他们说位未设置。文件本身显示为644,但表示从未进行过更改。不过你确实回答了这个问题。看起来,
git ls files
是显示可执行位状态的答案。如果你将你的评论更改为答案,我会将其标记为“如果你想尝试调试这个奇怪的问题”-没有什么需要调试的:这是设计的。Git的维护者:“…Git用来记录完整的数据(mode&0777)对于blob…它有一个非常不愉快的副作用,即生成的树依赖于用户的umask…一个人使用模式664记录blob,下一个修改文件的人将使用模式644记录blob,这使得跟踪有意义的更改变得非常困难…这个问题很久以前就通过提交e447947[on]2005-04-16解决了。”