Git:使用可执行文件
Git: Working with executables
我有一个项目,其中有一个 .sh
文件,一旦被其他人拉取,它必须处于可执行模式。现在,我已经在我的本地机器上更改了它的权限。但是我希望它也可以 pushed/pulled 作为可执行文件,这样其他用户就不必一直执行 运行 chmod
命令。
我被告知有两种可能的解决方案:.gitattributes
和 git update-index --chmod=+x script.sh
,但是我不确定根据我的情况我应该遵循什么。
我看过 this post here and this 那里的回答,我在想哪个更适合我的情况。我希望这个过程自动完成,而不是每次都由用户完成,已添加。
有什么想法吗?
您是否考虑过 Git 钩子?
也许这是适合您的解决方案
.git/hooks/post-checkout:
#!/bin/sh
chmod +x script.sh
在这里您可以找到更多关于 Git hooks 的信息。
您必须决定哪个适合您。你上面给的两种方法都可以接受,几乎一样。
您应该知道如何为可执行文件授予工作权限。在 Linux 中,真正的方法是 "chmod"。您也可以起诉 git 钩子。对于正常方法,我更喜欢这个:
git add file.sh #this could be py file or something
git update-index --chmod=+x file.sh #make it executable
git commit -m "here the commit" #commit it
git push #push it
所以如果你想用另一种方式来做,你应该试试这个:
#!/usr/bin/bash
chmod +x file.sh
你可以 运行 它。但是在 运行 它之前,您应该将工作权限授予您为其他脚本授予工作权限而创建的脚本 :)
或者您可以动态授予权限:
su -c 'chmod +x file.sh'
这样一来,你应该给予一次工作许可,它运行s.
因为你用 linux 标记了这个问题,你可以签入文件。现在你已经在你的计算机上更改了它:
% chmod +x script.sh
Git 会注意到文件已更改:
% git status
On branch old2
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: script.sh
你可以通过 diff 查看该文件实际上现在是可执行文件:
% git diff foo.sh
diff --git a/foo.sh b/foo.sh
old mode 100644
new mode 100755
模式100644
反映的是不可执行文件,模式100755
反映的是可执行文件,类似于Unix文件权限位。 (如果您 除了更改权限外 还更改了文件,您也会看到更改。)
当您签入此文件并且您的协作者拉取您的更改时,该文件也将为他们提供可执行文件。
请注意,这不会在没有执行位概念的系统(即 Windows)上自动工作,在 的情况下,您将需要做something with update-index
。
请注意也,这取决于您的系统是否正确配置了core.filemode
。在所有非 Windows 系统上,该值应设置为 true
。
% git config core.filemode
true
如果出于某种原因,该命令 returns false
并且您使用的是非 Windows 计算机,运行:
% git config core.filemode true
重新启用它。
我有一个项目,其中有一个 .sh
文件,一旦被其他人拉取,它必须处于可执行模式。现在,我已经在我的本地机器上更改了它的权限。但是我希望它也可以 pushed/pulled 作为可执行文件,这样其他用户就不必一直执行 运行 chmod
命令。
我被告知有两种可能的解决方案:.gitattributes
和 git update-index --chmod=+x script.sh
,但是我不确定根据我的情况我应该遵循什么。
我看过 this post here and this 那里的回答,我在想哪个更适合我的情况。我希望这个过程自动完成,而不是每次都由用户完成,已添加。
有什么想法吗?
您是否考虑过 Git 钩子?
也许这是适合您的解决方案
.git/hooks/post-checkout:
#!/bin/sh
chmod +x script.sh
在这里您可以找到更多关于 Git hooks 的信息。
您必须决定哪个适合您。你上面给的两种方法都可以接受,几乎一样。
您应该知道如何为可执行文件授予工作权限。在 Linux 中,真正的方法是 "chmod"。您也可以起诉 git 钩子。对于正常方法,我更喜欢这个:
git add file.sh #this could be py file or something
git update-index --chmod=+x file.sh #make it executable
git commit -m "here the commit" #commit it
git push #push it
所以如果你想用另一种方式来做,你应该试试这个:
#!/usr/bin/bash
chmod +x file.sh
你可以 运行 它。但是在 运行 它之前,您应该将工作权限授予您为其他脚本授予工作权限而创建的脚本 :)
或者您可以动态授予权限:
su -c 'chmod +x file.sh'
这样一来,你应该给予一次工作许可,它运行s.
因为你用 linux 标记了这个问题,你可以签入文件。现在你已经在你的计算机上更改了它:
% chmod +x script.sh
Git 会注意到文件已更改:
% git status
On branch old2
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: script.sh
你可以通过 diff 查看该文件实际上现在是可执行文件:
% git diff foo.sh
diff --git a/foo.sh b/foo.sh
old mode 100644
new mode 100755
模式100644
反映的是不可执行文件,模式100755
反映的是可执行文件,类似于Unix文件权限位。 (如果您 除了更改权限外 还更改了文件,您也会看到更改。)
当您签入此文件并且您的协作者拉取您的更改时,该文件也将为他们提供可执行文件。
请注意,这不会在没有执行位概念的系统(即 Windows)上自动工作,在 的情况下,您将需要做something with update-index
。
请注意也,这取决于您的系统是否正确配置了core.filemode
。在所有非 Windows 系统上,该值应设置为 true
。
% git config core.filemode
true
如果出于某种原因,该命令 returns false
并且您使用的是非 Windows 计算机,运行:
% git config core.filemode true
重新启用它。