2016-07-15 111 views
1

我有一个项目,其中有一个.sh文件,并且一旦被其他人拖动就必须处于可执行模式。现在,我已经在本地机器上更改了它的权限。不过,我希望它可以作为可执行文件进行推/拉,以便其他用户不必一直运行chmod命令。Git:使用可执行文件

我已被告知有关两种可能的解决方案:.gitattributesgit update-index --chmod=+x script.sh,但我不确定我应该遵循什么,根据我的情况。

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

有什么想法?

+1

如果您将其设置为可执行文件并推送它应该足够。 – PeeHaa

+0

这是新东西吗?情况并非如此。 –

+1

你在Windows上吗?如果没有,Git应该检测可执行位并进行适当的设置。你不应该做任何事情。 –

回答

2

既然你已经标记了这个问题与,你可以检查该文件中现在,你已经改变了它在您的计算机上。

% 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 

如果由于某种原因,该命令返回false和你是一个非Windows计算机上运行:

% git config core.filemode true 

重新启用它。

+0

是的,所有的系统都是基于UNIX的系统,所以是的,我认为Git独占鳌头。谢谢。 –

0

你认为Git挂钩?

也许这可能是为你解决

.git/hooks/post-checkout: 

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

在这里你可以找到更多关于Git hooks

0

你必须决定哪个适合你。你在上面给出的两种方法可以接受,他们几乎相同。

您应该知道如何为可执行文件提供工作权限。在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' 

这样,你应该给予工作许可一次并且运行。