当前位置: 首页 > 知识库问答 >
问题:

如何在Windows上的Git中创建文件执行模式权限?

益麻雀
2023-03-14

我在Windows中使用Git,想通过一次提交将可执行shell脚本推送到git repo中。

通常我需要执行两个步骤(git提交)。

$ vi install.sh
$ git add install.sh  
$ git commit -am "add new file for installation" # first commit
[master f2e92da] add support for install.sh
 1 files changed, 18 insertions(+), 3 deletions(-)
 create mode 100644 install.sh
$ git update-index --chmod=+x install.sh
$ git commit -am "update file permission"        # second commit
[master 317ba0c] update file permission
  0 files changed
  mode change 100644 => 100755 install.sh

怎么才能把这两步合二为一呢?git配置?windows命令?

参考:请参阅第二次提交的Windows上的Git文件权限中的问题

共有3个答案

张坚白
2023-03-14

如果文件已经设置了x标志,git update index--chmod=x什么都不做,git认为没有什么要提交的,即使该标志没有保存到repo中。

您必须首先删除标志,运行 git 命令,然后将标志放回去:

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

然后git看到更改并允许您提交更改。

提交者所需的git配置(鸣谢:Nabi的回答):

git config core.filemode false

克隆器所需的git配置:

git config --global core.autocrlf input
端木令雪
2023-03-14

事实上,如果 git-add 有一个 --模式标志就好了

git 2.9. x/2.10(2016年第三季度)实际上允许(感谢Edward Thomson):

git add --chmod=+x -- afile
git commit -m"Executable!"

这使得整个过程更快,即使<code>核心也能工作。filemode设置为false。

参见爱德华·汤姆森(2016年5月31日)的提交4e55ed3。
助攻:约翰内斯·辛德林
(合并者:朱尼奥·哈马诺 -- 吉斯特 -- 在提交 c8b080a, 06 Jul 2016)

对于< code>core.filemode设置为false的存储库中的路径,将不会检测到(因此不会设置)可执行位,尽管用户可能仍然希望将文件添加为可执行文件,以便与具有< code>core.filemode功能的其他用户兼容。< br >例如,添加shell脚本的Windows用户可能希望将它们作为可执行文件添加,以便与非Windows用户兼容。

虽然这可以通过管道命令(< code > git update-index-add-chmod = x foo )来完成,但是教授< code>git-add命令允许用户使用他们已经熟悉的命令来设置文件可执行文件。

朱皓
2023-03-14

没有必要分两次提交,您可以在一次提交中添加文件并将其标记为可执行:

C:\Temp\TestRepo>touch foo.sh

C:\Temp\TestRepo>git add foo.sh

C:\Temp\TestRepo>git ls-files --stage
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

如您所知,添加后,模式为0644(即不可执行)。但是,我们可以在提交之前将其标记为可执行:

C:\Temp\TestRepo>git update-index --chmod=+x foo.sh

C:\Temp\TestRepo>git ls-files --stage
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

现在文件是模式0755(可执行)。

C:\Temp\TestRepo>git commit -m"Executable!"
[master (root-commit) 1f7a57a] Executable!
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100755 foo.sh

现在我们有了一个单一的提交和一个可执行文件。

 类似资料:
  • 我在Windows中使用Git,想通过一次提交将可执行shell脚本推送到git repo中。 通常我需要执行两个步骤()。 怎么才能把这两步合二为一呢?git配置?windows命令? 参考:请参阅第二次提交的Windows上的Git文件权限中的问题

  • 注意2:在Jenkins/Configuration/under shell中,我提到了C:\cygwin\bin\mintty.exe 下面是输出 $C:\cygwin\bin\cygpath-w C:\cygwin\bin\mintty.exe[workspace]$C:\cygwin\bin\mintty.exe-xe D:\539707\tomcat-7.0.12\temp\hudson4

  • 我不熟悉bat文件,并开始实现它。我有一个启动我的应用程序的linux应用程序命令列表。我有一个要部署的windows系统,用于git bash来执行这些命令,但在每次系统重启时都必须手动启动应用程序,所以我开始实现在系统启动时映射的bat文件 使用上面的脚本,我打开了git bash。还需要执行以下命令 必须使用git bash执行上述命令,因为它是开源命令,不在windows中执行。git b

  • 我在windows power shell中使用代码git init创建了一个git文件夹,但我看不到创建它的文件夹。如果git文件夹是隐藏的,那么我如何访问它们并使它们可见,因为我希望它们显示在Visual Studio代码中?

  • 免责声明:这个问题有一个类似的解决方案,可以说是“如何在Windows上从命令行运行Java程序?”的重复,但我仍然相信它可以帮助那些像我一样问同样错误问题的人。 正如在注释中可以发现的那样,我的错误是期望编译器溢出一个无扩展的可执行文件(像C中一样),但相反,我只看到一个.class文件正在创建,导致我错误地运行 如果发生这种情况,只需运行,不带扩展名,代码将正确运行。

  • 我在netbeans中编写了一些利用swing的GUI程序,它工作得很好。我通过右键单击project>Clean and build创建了jar文件,所有的资源都来自项目属性。dist文件夹中的jar文件通过命令行执行,使用 但是每当我双击jar文件时,它就会显示“找不到主类。程序将退出”。我参考了这些链接,但没有结果:在netbeans中生成可执行jar