我在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命令吗?

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


当前回答

注意,首先你必须确定在config git文件中filemode设置为false,或者使用这个命令:

git config core.filemode false

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

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

其他回答

我必须做的是让它为我工作:

不使用GitHub Desktop来提交,它不会识别更改,因此不会提交 相反,在终端中,我运行git add——chmod=+x foo.sh 然后git提交-m"可执行!"

注意,首先你必须确定在config git文件中filemode设置为false,或者使用这个命令:

git config core.filemode false

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

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

实际上,如果git-add有一个——mode标志就好了

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

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

这使得整个过程更快,即使是核心也能工作。Filemode设置为false。

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

add: add --chmod=+x / --chmod=-x options The executable bit will not be detected (and therefore will not be set) for paths in a repository with core.filemode set to false, though the users may still wish to add files as executable for compatibility with other users who do have core.filemode functionality. For example, Windows users adding shell scripts may wish to add them as executable for compatibility with users on non-Windows. Although this can be done with a plumbing command (git update-index --add --chmod=+x foo), teaching the git-add command allows users to set a file executable with a command that they're already familiar with.

如果文件已经设置了+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

不需要两次提交,你可以添加文件并在一次提交中标记它可执行:

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

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