我经常添加的bash脚本到我的git仓库,和脚本必须在之前的Linux文件系统可执行权限git add
。 但添加的文件推到远程存储库,并在另一个位置拉后,这些文件显示了非可执行的权限。 似乎有纠正问题两种方式:
1. chmod u+x $script
git commit -am "fixing the script permissions... again..."
要么
2. git update-index --chmod=+x $script
不是每次都固定了权限的,是有办法来让Git简单地看时的脚本文件的权限git add
,认识到:“嘿,这这里是一个可执行文件!” 并将其添加到直接与exectuable权限的资料库?
混帐2.9.X / 2.10(Q3 2016)带来了chmod
到git add
本身!
见提交4e55ed3 (2016年5月31日),由爱德华·汤姆森( ethomson
) 。
帮助-通过: 约翰内斯Schindelin( dscho
) 。
(通过合并JUNIOÇ滨野- gitster
-在提交c8b080a ,2016年7月6日)
add
:添加--chmod=+x
/ --chmod=-x
选项
可执行位将不与仓库的路径进行检测(因此不会设置) core.filemode
设置为false,虽然用户仍然可能希望添加文件作为可执行文件与谁做有其他用户的兼容性core.filemode
功能。
例如,Windows用户加入shell脚本不妨将它们与非Windows用户添加为可执行的兼容性。
虽然这可以用一个管道命令(做git update-index --add --chmod=+x foo
), 教学git-add
命令允许用户设置一个文件可执行的命令,他们已经熟悉了 。
你可以看到这个新功能的起源在“ 如何创建文件在Git中执行在Windows模式的权限? ”(2011年2月)
下面是一个脚本来自动应用“混帐更新索引--chmod + x”的可执行文件:
for f in `find . -name '*.sh' -o -regex './s?bin/[^/]+' -o -regex './usr/sbin/[^/]+' -o -regex './usr/lib/[^/]+' `;do
( cd `dirname $f` && git update-index --chmod=+x `basename $f` )
done
没有花哨的bash脚本编程解决方案 :
- 设置
fileMode = true
在你.git/config
文件(或通过运行git config core.filemode true
正如其他人指出的) - 更改文件的权限可执行位并提交此变更。 (
chmod u+x $script
为你指出的那样)。 您只需要操作一次。 - 一键遥控器
你从那里拉下一次,git会设置该文件的提交可执行位。 我也有过类似的问题,这解决了他们。
fileMode = true
告诉混帐跟踪它可以将权限的唯一的事情:可执行位。 这意味着,更改可执行位会被混帐作为工作树改变得到承认和这些更改将被存储在回购您的下一个承诺。
一旦你犯了所需的可执行位,您还可以重置fileMode
以false
那么下一次的git不会与这样的变化打扰你,当你不想提交它们。
我不认为这是可以在做git add
命令,但您可能能够运行一个脚本在运行刚过权git commit
命令,但在提交前被实际创建。
看看在pre-commit钩子。
http://git-scm.com/book/en/Customizing-Git-Git-Hooks
基本上只是中创建一个名为git的你/钩/文件夹中的文件预提交。 (应该有样品已经在你的钩子文件夹,重命名为删除“样品”末启动一个。)
那里有一个疑难杂症。 确保你的脚本运行git stash -q
第一,使您在实际工作筹备的文件的版本。