Windows上Git文件的权限

我已经阅读了一些关于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

我尝试过更改文件权限,但它没有改变不同的结果。

124828 次浏览
来自stackoverflow的另一个问题: 如何让Git忽略文件模式(chmod)的更改? < / p >

先看看什么核心。Filemode设置为“-”

git config core.filemode

试着将其设置为false:

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.

我通过修改Ubuntu中的文件权限来解决这个问题,提交,推送等等。似乎它不能在Windows/NTFS上与msysgit一起工作。

我发现如何改变权限的解决方案(也)在Windows这里:http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

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

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

方便的Git Bash一行代码:

find . -name '*.sh' | xargs git update-index --chmod=+x
它将所有.sh文件标记为可执行文件。 之后,你只需要git commit.

如果您使用Cygwin git(我认为也可以使用Linux git),那么很有可能使用您的内核。文件模式设置已经在项目级别的$projdir/中设置。git /配置。我发现我必须做以下事情来让我的Cygwin git和我的Windows git在Windows文件系统上很好地共存,而不存在的文件模式更改总是显示:

  • 删除行设置核心。文件模式在$projdir/.git/config
  • 在Windows git中,执行"git config——global core "。filemode假”

这允许我的Cygwin git继续看到文件模式更改,这通常是相关的,同时指示Windows git忽略它看到的文件模式更改,这通常是误报。

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

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

就我而言,我不小心移动了shebang线,所以

#! /bin/sh


成为

   #! /bin/sh

git-bash权限检查失败。 删除前导空格后,脚本重新可执行