2016-07-15 49 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' 

這樣,你應該給予工作許可一次並且運行。