为什么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部署我的文件时,我遇到了问题,他们的文件模式与我的存储库中的文件模式不同.
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对常规文件有效.".所有其他文件权限都被重新解释为0755
或0644
取决于是否设置了0100
bit(u+x
):来自cache.h:
#define ce_permissions(mode) (((mode) & 0100) ? 0755 : 0644)
此宏用于将操作系统级文件权限映射到Git文件权限.
如果需要跟踪存储库中的文件权限,则必须找到不同的方法.您可以尝试的一件事是在存储库中存储一个脚本,该脚本将所有文件权限重置为您指定的任何值.您可以在提交之前自动创建脚本(不是使用Git本身,而是使用您喜欢的任何其他语言或工具),并且您可以在提取后执行脚本.