如何在GIT中向文件添加chmod权限?


180

我想git commit .sh文件,但是当我在另一台服务器中签出该文件时希望它可执行。

有没有一种方法,而无需在签出文件的服务器中手动chmod u + x该文件?

Answers:


288

根据官方文档,您可以使用update-index子命令在任何跟踪的文件上设置或删除“可执行”标志。

要设置标志,请使用以下命令:

git update-index --chmod=+x path/to/file

要删除它,请使用:

git update-index --chmod=-x path/to/file

引擎盖下

虽然这看起来像常规的unix文件权限系统,但实际上不是。Git在其内部存储中为每个文件维护一个特殊的“模式”:

  • 100644 用于常规文件
  • 100755 对于可执行文件

您可以使用ls-file带有--stage选项的子命令来可视化它:

$ git ls-files --stage
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0       .gitignore
100755 0ac339497485f7cc80d988561807906b2fd56172 0       my_executable_script.sh

默认情况下,当您将文件添加到存储库时,Git将尝试遵循其文件系统属性并相应地设置正确的文件模式。您可以通过将core.fileMode选项设置为false 来禁用此功能:

git config core.fileMode false

故障排除

如果在某个时候未设置Git文件模式,但是文件具有正确的文件系统标志,请尝试删除模式并再次设置它:

git update-index --chmod=-x path/to/file
git update-index --chmod=+x path/to/file

奖金

从Git 2.9开始,您可以暂存文件并在一个命令中设置标志:

git add --chmod=+x path/to/file

当我对test.sh,git commit和push以及在另一台服务器中进行检出时,这些文件的权限如下:-rw-rw-r-- 1个用户user 12 Dec 5 11:42 test.sh
Henley Chiu

我只是在我的一个存储库上执行了测试,它可以按预期工作。权限是使用Windows下提供的命令在文件上设置的。在我的一台服务器(Debian)上,该文件以前具有-rw-r--r--权限,现在设置为-rwxr-xr-x。您在本地和远程计算机上使用什么git版本?
Antwane '16

我本地的git版本1.9.5,执行结帐的服务器上的git 1.7.1。
亨利·邱

刚刚尝试使用git 1.7.10在另一台(旧)服务器上进行克隆,它仍然可以正常工作,该文件具有x权限。也许您在某个时候犯了一个错误,或者克隆到远程服务器上的用户有权限问题
Antwane

请注意,您只能更改(设置或清除)执行权限。Git不跟踪任何其他权限(例如读取或写入权限)。
丹·安德森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.