Linux

推送到 Git Remote 時的權限問題

  • July 13, 2015

過去幾天我一直在嘗試在我的伺服器上設置一個 Git Remote,這樣我就可以將我的網路伺服器的更改推送到它。問題是我在執行此操作時遇到以下錯誤:

$ git push --porcelain --progress --recurse-submodules=check live refs/heads/master:refs/heads/master
'master' pushed: d689cce..4e755fc
Delta compression using up to 4 threads.
Total 3 (delta 2), reused 0 (delta 0)
remote: error: unable to create file .gitignore (Permission denied)        
remote: error: unable to create file .gitignore~ (Permission denied)        
remote: error: unable to create file index.js (Permission denied)        
remote: error: unable to create file package.json (Permission denied)   

現在,我知道這與文件和文件夾的所有權有關,而且我和/或 git 可能對某些文件夾具有寫訪問權,也可能沒有。

問題是我一點也不知道我不能寫入哪個文件夾或如何解決它。

我是從頭開始設置網路伺服器的新手,所以這就是我所做的:

我通過如何使用帶有 VPS 的 Git 設置自動部署來嘗試了解我應該如何啟動和執行遠端。這導致我創建以下兩個文件夾:/var/repo/site.git/var/www/website.

在沒有被告知任何有關權限的情況下,我繼續嘗試按照告知的方式推送到遙控器,立即遇到了第一個權限障礙。

所以我諮詢了一位朋友,他建議我應該創建一個新組,將我的使用者添加到組中,然後/var/repo由該組擁有775讀/寫/執行權限。他還建議我應該按照這裡的建議做,以確保/var/www文件夾具有正確的權限;但即使如此,我仍然無法推送到遙控器,如上面的錯誤所示。

那麼我該怎麼做才能解決這個問題呢?我在這裡有點障礙。

關於我使用的東西的一些資訊:

  • 客戶端作業系統:OSX Yosemite
  • 伺服器作業系統:Ubuntu 15.04
  • Git 客戶端:SmartGit 6.5(為方便起見)
  • 我使用 SSH 而不是 HTTPS 連接到遠端

問題不在於 /var/repo 上的寫訪問權限 - 我相信從您複製/粘貼的錯誤來看,這是正確設置的,並且可能一直如此。

問題是缺少對 /var/www 的寫權限。

按照您已連結到您設置的說明,是一個腳本,該腳本自動將您推送到伺服器上的 git 儲存庫的文件並將它們發佈到 /var/www 中。在我看來,這是一種聰明的方法,但是該腳本(位於文件 /var/repo/hooks/post-receive 中)的執行方式與推送到 git 儲存庫的相同。該使用者似乎沒有寫入 /var/www 的權限

假設您已經按照上一個答案中的步驟進行操作,那麼這兩個附加命令應該可以解決問題:

chown -R root:git-users /var/www/

chmod -R g+rw /var/www/    

引用自:https://serverfault.com/questions/705436