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

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


当前回答

方便的Git Bash一行代码:

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

它将所有.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.

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

git ls-files --stage

然后修改权限。这里“x”表示执行权限。

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

现在重新验证权限。

git ls-files --stage

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

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

dos2unix scriptname。分机scriptname.ext

我通过修改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文件标记为可执行文件。 在那之后,你只需要提交。