Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Git:处理可执行文件_Linux_Git_Bash_Executable_Gitattributes - Fatal编程技术网

Linux Git:处理可执行文件

Linux Git:处理可执行文件,linux,git,bash,executable,gitattributes,Linux,Git,Bash,Executable,Gitattributes,我有一个项目,其中有一个.sh文件,它必须在其他人拉取后处于可执行模式。现在,我已经更改了它在本地计算机上的权限。但是,我希望它也能作为可执行文件被推/拉,这样其他用户就不必一直运行chmod命令 我被告知有两种可能的解决方案:.gittributes和git update index--chmod=+x script.sh,但鉴于我的情况,我不确定我应该遵循什么 我看到这里的帖子和那里的答案,我在想哪一个更适合我的情况。我希望这个过程是自动完成的,而不是由用户每次,补充说 有什么想法吗? <

我有一个项目,其中有一个
.sh
文件,它必须在其他人拉取后处于可执行模式。现在,我已经更改了它在本地计算机上的权限。但是,我希望它也能作为可执行文件被推/拉,这样其他用户就不必一直运行
chmod
命令

我被告知有两种可能的解决方案:
.gittributes
git update index--chmod=+x script.sh
,但鉴于我的情况,我不确定我应该遵循什么

我看到这里的帖子和那里的答案,我在想哪一个更适合我的情况。我希望这个过程是自动完成的,而不是由用户每次,补充说


有什么想法吗?

< P >你考虑过Git挂钩吗? 也许这是你的解决方案

.git/hooks/post-checkout:

#!/bin/sh
chmod +x script.sh

在这里你可以找到更多关于你的信息。

你必须决定哪一个适合你。您在上面给出的两种方法都是可以接受的,而且几乎相同

您应该知道如何为可执行文件授予工作权限。在Linux中,真正的方法是“chmod”。你也可以起诉git hooks。对于以正常方法进行的操作,我更喜欢:

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'

通过这种方式,您应该授予工作权限一次,它就会运行。

既然您已将此问题标记为,您只需将文件签入即可。现在您已经在计算机上更改了它:

% 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
模式
100644
反映不可执行文件,模式
100755
反映可执行文件,类似于Unix文件权限位。(如果您除了更改权限之外还更改了文件,您也会看到更改。)

当您签入此文件并且您的合作者拉入您的更改时,该文件也将成为可执行文件


请注意,在没有执行位概念的系统(即Windows)上,这不会自动工作,在这种情况下,您将需要这样做

还要注意,这取决于您的系统是否正确配置了
core.filemode
。在所有非Windows系统上,此值应设置为
true

% git config core.filemode
true
如果由于某种原因,该命令返回
false
,并且您在非Windows计算机上,请运行:

% git config core.filemode true

重新启用它。

如果您将它设置为可执行文件并推送它,这就足够了。这是新功能吗?以前不是这样,你在Windows上吗?如果没有,Git应该检测可执行位并进行适当的设置。你不应该做任何事情。是的,所有的系统都是基于UNIX的系统,所以是的,我认为Git完全是靠自己的力量实现的。非常感谢。
% git config core.filemode true