为什么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 <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: crontab
no changes added to commit (use "git add" and/or "git commit -a")
我希望GIT检测到任何类型的文件模式更改。当我通过git部署我的文件时,我遇到了问题,他们的文件模式与我的存储库中的文件模式不同。
答案 0 :(得分:11)
唯一的文件模式Git轨道位于“可执行”位。由于0644
和0664
都不意味着文件可以以任何方式执行,因此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
位(u+x
)是否已设置:来自cache.h:
#define ce_permissions(mode) (((mode) & 0100) ? 0755 : 0644)
此宏用于将操作系统级文件权限映射到Git文件权限。
如果您需要跟踪存储库中的文件权限,则必须找到不同的方法。您可以尝试的一件事是在存储库中存储一个脚本,该脚本将所有文件权限重置为您指定的任何值。您可以在提交之前自动创建脚本(不是使用Git本身,而是使用您喜欢的任何其他语言或工具),并且可以在拉动后执行脚本。
答案 1 :(得分:1)
之前我遇到过这个问题,但没有解决方法。 唯一的方法是在将代码推送到服务器时保存权限。从服务器提取代码时恢复文件的权限。 我写了一个脚本来完成这项工作,你可以参考网址:sr-perm
答案 2 :(得分:-2)
这是告诉git跟踪模式更改的标志
git config core.fileMode true // or false
core.fileMode If false, the executable bit differences between the index and the working copy are ignored; useful on broken filesystems like FAT. See git-update-index(1). True by default.
如果仍未跟踪您的更改,请使用以下命令:
umask 022
它将&#34;修复&#34; 此问题。
umask 002
将设置具有组可写权限的新创建文件。
您可以将其添加到~/.profile
,将其设置为默认的git beahavior
git(){(umask 0022; command git "$@")}