Windows上的Git文件权限


172

我已经阅读了一些有关Git中文件权限的问题,但我仍然有些困惑。我在GitHub上有一个由另一个仓库分叉的仓库。合并后,它们应该相同。然而:

$ git diff --summary origin/epsilon master/epsilon
 mode change 100644 => 100755 ants/dist/sample_bots/csharp/compile.sh
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/MyBot.coffee
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/ants.coffee
 mode change 100644 => 100755 ants/util/block_test.sh
 mode change 100644 => 100755 manager/mass_skill_update.py
 mode change 100644 => 100755 worker/jailguard.py
 mode change 100644 => 100755 worker/release_stale_jails.py
 mode change 100644 => 100755 worker/start_worker.sh

我试过更改文件权限,但它不会更改diff结果。

Answers:


344

我在这里找到了如何在Windows上更改权限的解决方案:http : //blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

例如,以下命令将用户执行权限添加到任意文件:

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

6
+1:正是我需要确保我从Windows提交的shell脚本(已core.filemode设置为false)实际设置了执行位。
tomlogic 2013年

以我
为例

5
在Windows中,使用Git的bash,我需要一个--add标志,以执行某种原因:git update-index --add --chmod=+x <file>。在此之后,该文件已经在舞台使用chmod
杰弗森Quesado

在git bash或cmd.exe提示符下均不再有效。

106

关于stackoverflow的另一个问题: 如何使Git忽略文件模式(chmod)更改?

尝试:

git config core.filemode false

git-config(1)

   core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.

谢谢。我也看到了 尝试了一下,没有什么区别。
Synesso 2011年

3
我遇到了与OP类似的问题,无论hard我如何尝试重置都无法提取更改。这对我有用。
Jo-Herman Haugholt 2011年

11
[项目] /。git / config可能包含相同的设置,并将覆盖〜/ .gitconfig。如果您尝试全局设置,请确保未在本地覆盖它。
Binary Phile 2013年

1
不幸的是,我发现这在NTFS上也是必要的。
Marc.2377 '19

1
那就是答案!
Andrew Surdu

29

方便的Git Bash衬垫:

find . -name '*.sh' | xargs git update-index --chmod=+x

它将所有.sh文件标记为可执行文件。之后,您仅需要git commit


2
@ benoit-blanchon一线小修正... 必须引用.sh。找 。名称' .sh'| xargs git update-index --chmod = + x
史蒂文(Steven)轻松

没错,我编辑了答案。谢谢@SteventheEasilyAmused。
Benoit Blanchon

15

如果您使用Cygwin git(我也想使用Linux git),则很有可能在$ projdir / .git / config的项目级别上设置了core.filemode设置。我发现我必须执行以下操作才能使Cygwin git和Windows git在Windows文件系统上很好地共存,而不会一直显示不存在的文件模式更改:

  • 删除$ projdir / .git / config中的行设置core.filemode
  • 在Windows git中,运行“ git config --global core.filemode false”

这使我的Cygwin git可以继续查看通常与文件模式相关的更改,同时指示Windows git忽略其看到的文件模式更改,这些更改通常是误报。


5

我通过在Ubuntu中更改文件权限,提交,推送和全部确定来修复它。似乎在Windows / NTFS上无法与msysgit一起使用。


我cna建议将GitHub用于Windows。Wonderfull的界面和非常漂亮的外壳,我什至使ssh密钥设置和git flow安装相对容易。
Sangoku

5

首先使用以下命令检查文件权限。

git ls-files --stage

然后更改权限。这里的“ x”代表执行权限。

git update-index --chmod=+x 'scriptname.ext'

现在重新验证权限。

git ls-files --stage

==============================================

如果您使用的是Windows PC,但在Linux机器上进行部署。首先执行以下命令,使其兼容在Linux机器上运行

dos2unix scriptname.ext scriptname.ext


有没有办法做类似的事情git update-index --chmod=1777 'scriptname.ext'
Alex Barker

您是否导航到脚本文件所在的路径?@alex
Sireesh Yarlagadda
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.