2010-12-09 82 views
2

我已經把我的git的工作結構如下(由於建議在另一個問題git : Small project workgit的鉤權限問題

/live/website 
     | 
     | 
/path/to/staging (bare) 
    |   | 
    |   | 
dev1  dev2 

目前,無論DEV1和DEV2,推動項目的/path/to/staging repo。我在/ path/to/staging中有一個鉤子,它會自動從我的/ live /網站觸發git pull。這樣,我有一個文件的工作副本。

另外/path/to/staging (bare)被初始化爲share = 0777,所以我知道這個份額不是問題。此外,我已將所有文件CHMODED到777並設置棒位。

我創建了/ live /網站回購爲user : root。不過,我在dev1中創建了回購作爲user : dev1。我可以在DEV1微調,但是當我嘗試從DEV1推回購,這是我所面臨的問題:

error: Couldn't set refs/remotes/origin/master 
From /path/to/staging 
! 8b4fddc2 .. e2a0b21 master  -> origin/master (unable to update local ref) 
To path/to/staging 
    8c5fddc2 .. e2a0b21 master -> master 

基本上,我沒有看到文件,成功地轉移到/現場/網站。我認爲這個問題是由於我執行的代碼爲user : dev1。但是,當我瀏覽到/live/website並手動執行git pull作爲user : root時,它成功地取消了由dev1所做的更改並更改了工作文件。

有人可以推薦如果有辦法解決這個問題嗎?因爲它擊敗了自動掛鉤的目的...

別的東西,我認爲做的是鉤,我想改變用戶的:

su root 
password 

然而,在執行時,我不要以爲我在提示符處輸入密碼,因爲我收到錯誤消息是:

hooks/post-receive: line 18: password: command not found 

編輯,

另外,有人可以建議一種方式從推回去?並獲得以前的文件狀態?

回答

1

AFAIK你不能在命令行輸入密碼。但是,您可以使用sudo,將允許的用戶添加到/etc/sudoers而不使用密碼,因此您可以運行命令sudo -u webside-user-name 'cd /live/website && git fetch && git checkout master'

+0

Rudi:我看着那個文件,它說,我只能通過做sudo visudo來修改。但是,當我嘗試執行該命令時:`sudo:visudo:command not found`。所以編輯是我遇到的問題。就git目錄結構而言,你知道爲什麼我在執行pull時遇到問題嗎?我的意思是,`/ live/website`是一個共享庫。我保證,我通過做`git repo-config core來做到這一點。sharedRepository true` – g1t 2010-12-09 08:26:59

0

我正在使用類似的工作流程,而且我甚至沒有root用戶訪問實時網絡服務器,它仍然正常工作。下面是我使用的腳本(這是一個後收到鉤,我想這可能是一個post-update掛鉤,而不是,但我還沒有測試過):

 
#!/bin/sh 
# To enable this hook, make this file executable by "chmod +x post-receive". 
GIT_WORK_TREE=/path/to/htdocs git checkout -f 

然後你就可以通過運行測試鉤鉤/後領取。如果它在你手動測試時工作,它應該在你運行「git push」時工作。