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

我在Windows中使用Git,并希望通过一个提交将可执行shell脚本推入git repo。

通常我需要做两个步骤( git commit )。

 $ 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 

我怎样才能把这两个步骤结合起来? gitconfiguration? Windows命令?

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

在两次提交中不需要这样做,您可以添加文件并在一次提交中将其标记为可执行文件:

 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 

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

确实,如果git-add有一个--mode标志,那将会很好

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

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

这使得所有进程更快,并且即使core.filemode设置为false也能正常工作。

见Edward Thomson( ethomson ) 提交的4e55ed3 (2016年5月31日) 。
帮助: Johannes Schindelin( dscho ) 。
(由Junio C gitster合并- gitster -在提交c8b080a ,2016年7月6日)

add :add --chmod=+x / --chmod=-x选项

对于core.filemode设置为false的存储库中的path,可执行位将不会被检测到(因此不会被设置),尽pipe用户可能仍希望将文件添加为可执行文件,以便与具有core.filemode其他用户function。
例如,添加shell脚本的Windows用户可能希望将其添加为可执行文件,以便与非Windows上的用户保持兼容。

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

您必须运行以下命令:

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

承诺git,你应该好好去!

如果文件已经设置了+ x标志,那么git update-index --chmod=+x什么都不做,git认为没有任何提交,即使标志没有被保存到回购中。

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

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

那么 git会看到一个变化,并允许您提交更改。

注意事项首先你必须确定在configurationgit文件filemode设置为false ,或者使用以下命令:

 git config core.filemode false 

然后你可以用这个命令设置0777权限:

 git update-index --chmod=+x foo.sh