我在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上的第二次提交
如果文件已经设置了+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
如果文件已经设置了+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
实际上,如果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.