如何在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