自动应用“混帐更新索引--chmod = + x”的可执行文件(Automatically appl

2019-07-18 01:57发布

我经常添加的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权限的资料库?

Answer 1:

有几种方法可以做到这一点。

  1. Git的别名
  2. 巴什别名
  3. 甚至结合bash和git的别名
  1. Git的别名

    你总是可以在你的git的别名中使用bash。

    • 打开你的混帐配置:

      vim ~/.gitconfig

    • 添加别名部分(如果不存在):

       [alias] addscr = !sh -c 'if [[ ${0: -3} == ".sh" ]]; then git update-index --chmod=+x $0; git add $0' 
  2. 巴什别名

    • 编辑您的bash配置文件:

      vim ~/.bashrc

    • 在文件的最后补充一点:

       function gitadd(){ if [[ ${1: -3} == ".sh" ]] then git update-index --chmod=+x $1 fi git add $1 } alias gitadd='gitadd' 
  3. 合并的git和bash别名

    • 编辑您的bash配置文件:

      vim ~/.bashrc

    • 此添加到文件的末尾:

       function checkShellFile(){ return ${1: -3} == ".sh" } alias gitadd='checkShellFile ? git addsrcipt "$1" : && git add "$1"' 
    • 编辑您的git的配置文件:

      vim ~/.gitconfig

    • 添加别名部分(如果不存在):

       [alias] addscript = !sh -c 'git update-index --chmod=+x $0 && git add $0' 

以上皆非已通过测试



Answer 2:

混帐2.9.X / 2.10(Q3 2016)带来了chmodgit 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月)



Answer 3:

下面是一个脚本来自动应用“混帐更新索引--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 


Answer 4:

没有花哨的bash脚本编程解决方案

  1. 设置fileMode = true在你.git/config文件(或通过运行git config core.filemode true正如其他人指出的)
  2. 更改文件的权限可执行位并提交此变更。 ( chmod u+x $script为你指出的那样)。 您只需要操作一次。
  3. 一键遥控器

你从那里拉下一次,git会设置该文件的提交可执行位。 我也有过类似的问题,这解决了他们。

fileMode = true告诉混帐跟踪它可以将权限的唯一的事情:可执行位。 这意味着,更改可执行位会被混帐作为工作树改变得到承认和这些更改将被存储在回购您的下一个承诺。

一旦你犯了所需的可执行位,您还可以重置fileModefalse那么下一次的git不会与这样的变化打扰你,当你不想提交它们。



Answer 5:

我不认为这是可以在做git add命令,但您可能能够运行一个脚本在运行刚过权git commit命令,但在提交前被实际创建。

看看在pre-commit钩子。

http://git-scm.com/book/en/Customizing-Git-Git-Hooks

基本上只是中创建一个名为git的你/钩/文件夹中的文件预提交。 (应该有样品已经在你的钩子文件夹,重命名为删除“样品”末启动一个。)

那里有一个疑难杂症。 确保你的脚本运行git stash -q第一,使您在实际工作筹备的文件的版本。



文章来源: Automatically apply “git update-index --chmod=+x” to executable files