在Windows 7上使用git-bash更新文件权限

blu*_*lds 24 git cygwin windows-7-x64 git-bash

如何git-bash在Windows 7上更新文件权限?

我试过以下但没有成功:

$ ls -al scripts/script.sh
-rw-r--r--    1 myUid   Administ       70 Sep  8 11:24 scripts/script.sh

$ git update-index --chmod=+x scripts/script.sh

$ ls -al scripts/script.sh
-rw-r--r--    1 myUid   Administ       70 Sep  8 11:24 scripts/script.sh

$ chmod +x scripts/script.sh

$ ls -al scripts/script.sh
-rw-r--r--    1 myUid   Administ       70 Sep  8 11:24 scripts/script.sh
Run Code Online (Sandbox Code Playgroud)

Yog*_*ogu 50

您可能在Windows上使用NTFS或FAT32,并且这些文件系统不支持可执行权限.相反,cygwin查看文件名和内容以确定它是否可执行:

如果文件名以.bat,.com或.exe结尾,或者其内容以#!开头,则认为文件是可执行的.

所以你应该确保bash文件以shebang(例如#!/bin/bash)开头.然后,您应该能够只执行该文件,而忽略该权限输出ls.

  • 什么是“shebang”? (3认同)
  • @EdwardBlack就像`#/ bin/bash`,我相应地澄清了这个问题. (2认同)

Sht*_*fan 11

您的脚本开头很可能没有“shebang”。因此 Windows 不知道应该使用哪个二进制文件来运行该脚本。因此,权限会被默默地忽略。

例如:

#!/usr/bin/sh
Run Code Online (Sandbox Code Playgroud)

或者

#!/usr/bin/bash
Run Code Online (Sandbox Code Playgroud)

看起来 git-bash 会自动检测到它,因为即使没有 chmod 命令,可执行属性也会被设置。此外,无法使用 chmod 禁用它。


Kyl*_*Mit 6

如果要在已部署到linux文件系统的Windows环境中更新脚本,即使允许它们在本地运行,您仍然可能会发现自己需要在推入之前授予执行权限。

从这篇关于在Windows上使用git repo时更改文件权限的文章开始:

  1. 在Windows上打开像git-bash这样的bash终端
  2. 导航到.sh要授予执行权限的文件
  3. 使用以下命令检查现有权限:

    git ls-files --stage 
    
    Run Code Online (Sandbox Code Playgroud)

    应该返回类似100644的东西

  4. 使用以下命令更新权限

    git update-index --chmod=+x 'name-of-shell-script'
    
    Run Code Online (Sandbox Code Playgroud)
  5. 再次检查文件权限

    git ls-files --stage 
    
    Run Code Online (Sandbox Code Playgroud)

    哪个应该返回类似100755

  6. 提交更改并推送!

Windows上的git bash

  • @LahiruChandima,[Windows 终端](https://github.com/microsoft/terminal) - 强烈推荐。 (2认同)