2012-03-24 71 views
17

我想從git pull一些存儲庫通過root用戶從任何目錄。Git拉取決於當前目錄

例如,執行git pull/root/

#> cd ~ 
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull 
/usr/libexec/git-core/git-sh-setup: line 142: cd: /root/.: Permission denied 
Cannot chdir to /root/., the toplevel of the working tree 

和執行git pull/

#> cd/
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull 
Already up-to-date. 

爲什麼當前目錄影響git pull荷蘭國際集團的命令?

如何避免多餘的cd

+0

/root是你的倉庫裏面的一個文件夾?如果是這樣,你不應該有權限問題。 如果/ root不在你的git結構中,那麼要問的問題是爲什麼它首先訪問該文件夾? – bluesman 2012-03-26 18:53:17

+0

你爲什麼試圖以root身份工作? – Ethan 2012-03-30 17:45:15

+0

我正在嘗試使用根,因爲它是eix-sync.conf的內容。 – 2012-03-30 19:52:05

回答

16

在第一個示例中,git命令以用戶dmalikov的形式運行,當前目錄爲/root。由於git pull命令相當於git fetch後跟git merge,並且由於git merge在工作樹上運行,因此git會嘗試尋找工作樹。由於此用戶沒有cd /root權限,因此git命令失敗。

即使你的第二個例子不能像你所期望的那樣工作。如果有實際的更改要被取消(而不是「已經最新」),那麼git pull將失敗,因爲它找不到工作樹。

你有幾個簡單的選擇:

1)您可以只用做做手術的git fetch部分:

sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git fetch 

不給任何錯誤我。

2)可以將cd添加到工作樹:

(cd /home/dmalikov/path/to/repo; sudo -u dmalikov git pull) 
+1

相關:git --git-dir不按預期方式工作:http://stackoverflow.com/questions/1386291/git-git-dir-not-working-as-expected – kenorb 2012-12-07 11:19:30

0

我不認爲有可能避免這個CD,因爲你沒有權限改變目錄回到當前目錄,即/ root的用戶運行git。 /因爲當前目錄明顯起作用,因爲每個人都有權改變到該目錄。

+0

'致命的:不能改回'/ root':權限被拒絕' – 2012-03-24 13:27:08

+0

改變了我的答案。它與最初想的權限而不是 - 工作樹有關。 – ralphtheninja 2012-03-24 14:19:21

2

回答我的評論,到/ root是一個有趣的錯誤

將它與--git-dir的工作你還需要指定一個工作樹目錄

sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git --work-tree=/home/dmalikov/path/to/repo/.git pull 
+1

'致命的:無法改回'/根':權限被拒絕' – 2012-03-26 19:01:22

+0

你在什麼機器上?它會使用你的系統(windows或linux)特定的路徑。 以下在我的本地機器上工作(在Windows上的git bash) '$ git --git-dir =/c/workspace/changes/.git --work-tree =/c/workspace/changes/pull 已經最新「。# – bluesman 2012-03-26 19:20:31

+0

嘗試從dir執行您的命令,您無法通過非root用戶」cd「。 – 2012-03-26 19:42:12