当前位置:  开发笔记 > 编程语言 > 正文

为什么GIT没有检测到文件模式644和664之间的区别?

如何解决《为什么GIT没有检测到文件模式644和664之间的区别?》经验,为你挑选了1个好方法。

为什么GIT没有检测到文件模式644和664之间的区别,但它检测到755:

$:~/docker/images/php_cron/config$ ls -l crontab 
-rw-r--r--  1 saf  staff  4663 31 Dez 09:38 crontab

$:~/docker/images/php_cron/config$ chmod 664 crontab 
$:~/docker/images/php_cron/config$ ls -l crontab 
-rw-rw-r--  1 saf  staff  4663 31 Dez 09:38 crontab

$:~/docker/images/php_cron/config$ git status
On branch komplett-modularisiert
Your branch is up-to-date with 'origin/komplett-modularisiert'.

nothing to commit, working directory clean
$:~/docker/images/php_cron/config$ chmod 755 crontab 

$:~/docker/images/php_cron/config$ git status
On branch komplett-modularisiert
Your branch is up-to-date with 'origin/komplett-modularisiert'.



Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

    modified:   crontab

no changes added to commit (use "git add" and/or "git commit -a")

我希望GIT检测到任何类型的文件模式更改.当我通过git部署我的文件时,我遇到了问题,他们的文件模式与我的存储库中的文件模式不同.



1> 小智..:

Git轨道的唯一文件模式是"可执行"位.由于既不是0644也不0664意味着文件可以以任何方式执行,Git也不会将其视为一种变化.

从Git索引格式:

  32-bit mode, split into (high to low bits)

    4-bit object type
      valid values in binary are 1000 (regular file), 1010 (symbolic link)
      and 1110 (gitlink)

    3-bit unused

    9-bit unix permission. Only 0755 and 0644 are valid for regular files.
    Symbolic links and gitlinks have value 0 in this field.

重要的部分是"只有0755和0644对常规文件有效.".所有其他文件权限都被重新解释为07550644取决于是否设置了0100bit(u+x):来自cache.h:

#define ce_permissions(mode) (((mode) & 0100) ? 0755 : 0644)

此宏用于将操作系统级文件权限映射到Git文件权限.

如果需要跟踪存储库中的文件权限,则必须找到不同的方法.您可以尝试的一件事是在存储库中存储一个脚本,该脚本将所有文件权限重置为您指定的任何值.您可以在提交之前自动创建脚本(不是使用Git本身,而是使用您喜欢的任何其他语言或工具),并且您可以在提取后执行脚本.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有