使用git版本控制仅更新和提交文件权限


187

只需将some.sh文件转换为可执行文件(chmod 755 ...),即可更新权限,但不会更新内容。有没有一种方法可以将文件提交到git中,以便在克隆 / 签出 / 拉取时恢复/设置可执行位?

更新:如何跟踪新权限已提交到github

Answers:


190

默认情况下,如果更改执行权限,git将更新执行文件权限。它不会更改或跟踪任何其他权限。

如果在修改执行权限时没有看到任何更改,则可能是git中的配置忽略了文件模式。

.git文件的config文件夹中查看您的项目,您应该看到以下内容:

[core]
    filemode = false

您可以true在您喜欢的文本编辑器中将其更改为,或运行:

git config core.filemode true

然后,您应该能够正常提交文件。它只会提交权限更改。


谢谢!如何跟踪权限更改已提交到github
BreakPhreak 2012年

2
你可以看到它,当你查看一个文件(例如,对Rails的gitignore文件,你会发现100644的文件权限)
文森特B.

8
使用git在Windows上进行权限更改(实际上是更改文件权限并提交):blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html
fooMonster 2013年

38
这个答案是错误的!Git仅跟踪文件是否可执行。它不会跟踪其他文件权限,例如可写或可读。阅读stackoverflow.com/a/11231682/2311074了解更多信息。
亚当

对我来说webstorm没赶上变化,但是git status,我看到的变化..
Townsheriff

192

@fooMonster文章对我有用

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

如您所见,该文件具有644权限(忽略100)。我们想将其更改为755:

# git update-index --chmod=+x script.sh

提交更改

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh

7
应该注意的是,您实际上必须使用“ -x / + x”。您不能设置任何其他权限或位掩码。
Devolus

请注意,using git commit -a并没有为我做任何事情,但是在命令行上设置了消息。一个怪癖
JonnyRaa

命令顺序应为: # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin

29

不为我工作。

该模式为true,文件权限已更改,但是git表示没有任何工作要做。

git init
git add dir/file
chmod 440 dir/file
git commit -a

问题似乎是git只识别某些权限更改。


51
正确- git实际上仅跟踪文件是否可执行,而不跟踪完整的* nix权限。因此,您必须在可执行文件之间切换文件,否则就不能认为您已更改了值得提交的内容……
twalberg 2013年

我找不到清晰的文档:可以使用哪种事后触发来相应地设置烫发?
Otheus

2
好吧,中有一个post-checkout钩子git可以解决某些情况,但是我不确定这是否涵盖了更新工作树中文件的所有可能方法。您可能最好在回购中添加一个额外的shell脚本来相应地进行设置。另外,那里有几个可以扩充git以存储元数据的项目,但是我从未真正尝试过其中的任何一个……
twalberg 2013年

1
我将文件权限更改为777并做了git update-index --refresh,但差异显示old mode 100644 new mode 100755。它并没有更新所有权限
hudac

看到@tishma答案在这里stackoverflow.com/questions/14557106/…。这就是为我工作的东西
gary69 '18
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.