我有一个使用 git 来管理文件的 ubuntu 开发系统,但我喜欢在不同(windows)系统上的 QTCreator 中进行编辑,因此我有一个映射到 ubuntu 服务器的 windows 网络驱动器。
但是,似乎每当我保存文件时,它都会在 Windows 上添加执行标志。有时它会从 664 更改为 764,有时我看到它会更改为 777。
因此我在执行 git add 之前一直执行 chmod 644,但是这很麻烦,有时我会忘记。
是否有一个好的方法可以防止 windows/QT 添加 +x,或者只是让“git add”在暂存/提交之前自动 chmod 664 我的 .c 和 .h 文件?
谢谢
答案1
编辑:
一种解决方案可能是将core.fileMode
变量设置为false
。~/.gitconfig
这会使 git 忽略可执行位。
如果您使用的是 FAT 文件系统,您可能也想进行设置core.ignorecase
。true
旧答案
假设你在 Linux 机器上提交,那么你可以使用钩子,在这种情况下.git/hooks/pre-commit
:
#!/bin/sh
find . -type f -not -perm 0644 -exec chmod 644 {} \+
find . -type d -not -perm 0755 -exec chmod 755 {} \+
git add .
这有点粗暴,因为它强制所有文件和目录具有特定的权限。chmod
如果特定文件需要在find
和之间具有其他权限,您可能需要为其添加命令git add
。另一方面,它很短小简单。
更复杂的解决方案可能用于git diff --cached --name-only
检查哪些文件实际上将被提交,并且仅修复这些文件。但这会更复杂,并且无法修复随机权限更改。
#!/bin/sh
FILES=$(git diff --cached --name-only)
chmod 644 $FILES
答案2
如果您需要修复现有 repo 中的文件(例如可执行位),请尝试以下操作:
git ls-files “*.sh” | xargs git update-index –add –chmod=+x
git ls-files “*.exe” | xargs git update-index –add –chmod=+x
git ls-files 比“find”更快