自动应用";git更新索引--chmod=&x2B;x";到可执行文件
我经常将bash脚本添加到我的git存储库中,并且这些脚本在自动应用";git更新索引--chmod=&x2B;x";到可执行文件,git,executable,file-permissions,Git,Executable,File Permissions,我经常将bash脚本添加到我的git存储库中,并且这些脚本在git add之前在linux文件系统中具有可执行权限。但在将添加的文件推送到远程存储库并拉入另一个位置后,这些文件显示为不可执行权限。似乎有两种方法可以解决此问题: 1. chmod u+x $script git commit -am "fixing the script permissions... again..." 或 有没有办法让git在git add期间查看脚本上的文件权限,识别“嘿,这是一个可执行文件!”并直接
git add
之前在linux文件系统中具有可执行权限。但在将添加的文件推送到远程存储库并拉入另一个位置后,这些文件显示为不可执行权限。似乎有两种方法可以解决此问题:
1. chmod u+x $script
git commit -am "fixing the script permissions... again..."
或
有没有办法让git在
git add
期间查看脚本上的文件权限,识别“嘿,这是一个可执行文件!”并直接将其添加到具有可执行权限的存储库中,而不是每次都固定权限 我不认为这可以在git add
命令上完成,但是您可以在运行git commit
命令之后,但在实际创建commit之前运行脚本
看看预提交钩子
基本上,只需在.git/hooks/文件夹中创建一个名为pre-commit的文件。
(hooks文件夹中应该已经有示例,重命名它们以删除结尾处的“.sample”以激活一个示例。)
有个问题。确保您的脚本首先运行
git stash-q
,以便您处理文件的实际阶段版本 有几种方法可以做到这一点
- 打开git配置:
vim~/.gitconfig
- 向其中添加别名部分(如果不存在):
[别名] addscr=!sh-c'if[${0:-3}==“.sh”];然后git更新索引--chmod=+x$0;git添加$0'
- 编辑bash配置文件:
vim~/.bashrc
- 在文件末尾添加以下内容: 函数gitadd(){ 如果[${1:-3}=“.sh”]] 然后git更新索引--chmod=+x$1 fi 吉特加1美元 } 别名gitadd='gitadd'
- 编辑bash配置文件:
vim~/.bashrc
- 将以下内容添加到文件末尾:
函数checkShellFile(){ 返回${1:-3}=“.sh” } 别名gitadd='checkShellFile?git addsrcipt“$1”:&&git add“$1”
- 编辑git配置文件:
vim~/.gitconfig
- 向其中添加别名部分(如果不存在):
[别名] addscript=!sh-c'git更新索引--chmod=+x$0&&git添加$0'
以上所有内容均未经测试以下是一个脚本,可自动将
git更新索引--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脚本的解决方案:
.git/config
文件中设置fileMode=true
(或者像其他人指出的那样运行git-config-core.fileMode-true
)chmodu+x$script
正如您所指出的)。你只需要做一次fileMode=true
告诉git跟踪权限的唯一内容:可执行位。这意味着对可执行位的更改将被git识别为工作树中的更改,并且这些更改将在下次提交时存储在repo中
一旦您提交了所需的可执行位,您还可以将您的文件模式
重置为false
,这样下次当您不想提交这些更改时,git就不会因为这些更改而困扰您。git 2.9.X/2.10(2016年第三季度)将chmod
带到git add
本身
参见(2016年5月31日)作者。帮助人:。
(于2016年7月6日被合并)
add
:添加--chmod=+x
/--chmod=-x
选项
将不会检测到可执行位(因此不会
对于core.filemode
设置为false的存储库中的路径,
尽管用户可能仍然希望添加文件作为
与具有core.filemode
功能。例如,添加shell脚本的Windows用户可能希望将其添加为可执行文件,以便与非Windows上的用户兼容 虽然这可以通过管道命令(
git update index--add--chmod=+x foo
)完成,但是教授git add
命令允许用户使用他们已经熟悉的命令设置文件可执行文件
您可以在“”(2011年2月)中看到此新功能的来源。我刚刚通过“Tortoise Git文件夹更新”添加了此功能。右键单击所有文件,并将“执行权限”复选框更新为true,并使用消息提交/推送。Git命令行add/commit也应该可以工作。另一个位置使用的是
filemode=false
?这两个位置都运行linux,因此没有filemode=false
问题。我认为这是git的正常行为——我只是在寻找跳过手动修复步骤的方法。githooks主页上有指针。很快git 2.9/2.10(2016年第3季度)就可以使用一个简单的git add--chmod=+x
了!看。如果这是.gittributes规范的一部分,那就太棒了。比如<代码>*.sh text eol=lf 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