本文最后更新于:2025年1月22日 下午

Git 中的 “mode” 指的是文件的模式位,它决定了文件是常规文件、目录、符号链接,以及文件的权限设置(读、写、执行权限),本记录相关内容。

简介

git 会管理文件的模式,同内容一样会纳入修改范畴。当文件模式被修改时,虽然内容相同但是仍然可以在修改列表中看到他。

1
2
3
diff --git a/SuperBuild/cmake/External-GFlags.cmake b/SuperBuild/cmake/External-GFlags.cmake
old mode 100644
new mode 100755

这表明文件的权限(mode)发生了变化,而不是文件的内容。具体来说:

  • 100644 表示文件之前是普通文件,权限为 -rw-r--r--(所有者可读写,其他人只读)。
  • 100755 表示文件现在是可执行文件,权限为 -rwxr-xr-x(所有者可读写执行,其他人可读可执行)。

文件模式类型

  • 常规文件 (100644): 常规文件的模式位通常表示为 -rw-r--r--,意味着所有者有读和写权限,而组和其他用户只有读权限。
  • 可执行文件 (100755): 可执行文件的模式位通常表示为 -rwxr-xr-x,意味着所有者、组和其他用户都有读和执行权限,所有者还可以写。
  • 符号链接 (120000): 符号链接的模式位表示文件是一个指向其他文件或目录的链接。
  • 目录 (040000): 目录的模式位表示文件是一个目录。

Git 如何跟踪模式变化

  • 提交时:当你使用 git add 命令添加文件到暂存区时,Git 会记录文件的当前模式位。当你提交更改时,这些模式位会被存储在 Git 的对象数据库中。
  • 检出时:当你使用 git checkout 命令检出文件时,Git 会根据存储在对象数据库中的模式位设置文件的权限。

管理文件模式

  • 查看模式变化:使用 git diff --summarygit status 命令可以查看文件模式的变化。

  • 忽略模式变化

    :如果你不希望 Git 跟踪文件权限的变化,可以在全局配置中设置core.fileModefalse

    1
    git config --global core.fileMode false

    或者只在当前仓库中设置:

    1
    git config core.fileMode false
  • 强制设置模式:你可以使用 git update-index命令来强制设置文件的特定模式位:

    1
    git update-index --chmod='+x' <file>

    这个命令会为指定的文件添加执行权限。

注意事项

  • 文件权限在非 Unix 系统上可能不会得到完全的支持。
  • 在团队协作中,文件权限的变化可能会导致混乱,特别是当团队成员使用不同的操作系统时。
  • 在某些情况下,文件权限的变化可能不是由文件内容的变化引起的,例如,当文件从一台机器复制到另一台机器时,权限可能会改变。


文章链接:
https://www.zywvvd.com/notes/tools/git/git-mode/git-mode/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

Git 文件模式 mode
https://www.zywvvd.com/notes/tools/git/git-mode/git-mode/
作者
Yiwei Zhang
发布于
2025年1月22日
许可协议