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

Bre*_*eak 171 git

刚刚将some.sh文件转换为可执行文件(chmod 755 ...),权限已更新,但未更新内容.有没有办法将文件提交到git中,以便在clone/checkout/pull上恢复/设置可执行位?

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

Vin*_* B. 173

默认情况下,如果更改文件权限,git将更新文件权限.

如果在修改权限时没有看到任何更改,则可能在git中有一个忽略文件模式的配置.

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

[core]
    filemode = false
Run Code Online (Sandbox Code Playgroud)

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

git config core.filemode true
Run Code Online (Sandbox Code Playgroud)

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

  • 这个答案错了​​!Git只跟踪文件是否可执行.它不会跟踪其他文件权限,如可写或可读.请阅读/sf/answers/786217771/了解更多信息. (32认同)
  • 使用git在Windows上进行权限更改(实际更改文件权限并提交):http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html (8认同)
  • 您可以在查看文件时看到它(例如,在[Rails gitignore文件](https://github.com/rails/rails/blob/master/.gitignore)上,您将找到100644作为文件权限) (2认同)

eww*_*ink 165

@fooMonster文章为我工作

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh
Run Code Online (Sandbox Code Playgroud)

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

# git update-index --chmod=+x script.sh
Run Code Online (Sandbox Code Playgroud)

提交更改

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

  • 这仅适用于"可执行"标志 (21认同)
  • 应该注意的是,你实际上必须使用'-x/+ x'.您不能设置任何其他权限或位掩码. (6认同)
  • 命令顺序应该是: `# git update-index --chmod=+x script.sh` `# git ls-tree HEAD` `# git commit -m "更改文件权限"` `# git push` (3认同)
  • 请注意,使用“git commit -a”对我没有任何作用,但是在命令行上设置消息却可以。有点怪癖 (2认同)

Oth*_*eus 27

不适合我.

模式是真的,文件烫发已经改变,但是git说没有工作要做.

git init
git add dir/file
chmod 440 dir/file
git commit -a
Run Code Online (Sandbox Code Playgroud)

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

  • 正确 - "git"实际上只跟踪文件是否可执行,而不是完整的*nix权限集.所以你必须在可执行文件之间切换一个文件,而不是认为你已经改变了一些值得提交的东西...... (49认同)
  • 好吧,在`git`中有一个`post-checkout`钩子,它会覆盖一些情况,但我不确定是否会覆盖更新工作树中文件的所有可能的东西.你可能最好只在repo中添加一个相应的shell脚本来设置相应的东西.或者,有一些项目可以增加`git`来存储元数据,但我从来没有尝试过任何一个... (2认同)
  • 我将文件权限更改为 777 并执行了 `git update-index --refresh`,但差异显示 `old mode 100644 new mode 100755`。它没有更新所有权限 (2认同)