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

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


来自stackoverflow的另一个问题: 如何让Git忽略文件模式(chmod)的更改?

先看看什么核心。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文件标记为可执行文件。 在那之后,你只需要提交。


如果您使用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。分机scriptname.ext


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

#! /bin/sh

成为

   #! /bin/sh

这将使git-bash权限检查失败。 在删除前导空白之后,脚本又可以执行了。