2009-08-28 50 views
6

這可能是一個有關約定,最佳實踐和/或個人喜好的問題:使用git權利(私人回購網站代碼)?

所以我一個git的noob,我的網站代碼是不值得分享,所以我沒有使用的github等。

瞭解git不需要中央存儲庫我認爲:很好,我的工作站和服務器是兩個節點,我只需將更改從我的工作站推送到服務器。

當我開始,代碼只有在服務器上,所以我:

  1. 在服務器:git init
  2. 在工作站:git clone [email protected]:path/to/repo
  3. 歡天喜地所做的更改,並在本地
  4. 致力於在工作站:git push [email protected]:path/to/repo

我得到了奇怪的結果。我在文件中添加了本地出現在服務器上,但對現有文件的更改沒有反映出來。

然後我讀取警告,反對推送到檢出的遠程分支。因此,新的設置是:

  1. git clone --bare,使純倉庫
  2. 把純倉庫我的服務器上(~/repos/mysite.git - 不是公共文件夾)
  3. 代碼本地和:git push [email protected]:repos/mysite.git
  4. 在服務器:git pull ~/repos/mysite.git得到最新的

這是正確?它合乎邏輯嗎?你會做什麼?

回答

4

您的新安裝設置服務器存儲庫的正確方法。

。參閱臨Git的Getting Git on a Server章節以獲取更多信息。

+1

呃專門爲我正在做的一個章節。在問更多的git問題之前,我會閱讀Pro Git ... – EMiller 2009-08-28 16:29:17

+0

這是一個很好的閱讀。玩的開心 :) – spatz 2009-08-28 16:30:17

5

不管你選擇做什麼,你可能都想使用git hooks自動化一下。鉤子是一組腳本,git將在某些事件上執行。這裏相關的是更新後的鉤子(在服務器的倉庫中)。在一個正常的回購,鉤子在.git/hooks,所以在裸回購,他們在hooks。該目錄可能當前包含大量示例鉤子腳本(在最新版本中命名爲*.sample)。您需要創建一個名爲post-update的服務器,其中包含在服務器推入後您想要執行的任何操作(例如,cd到另一個服務器並執行拉動操作)。

至於你的解決方案的細節......你沒有推入檢出分支做正確的事情。您正在做的唯一可能的問題是服務器最終只有用於檢出文件的存儲庫的額外副本。如果你決定你不喜歡的磁盤空間這種浪費,我敢肯定,這會做你想要什麼:

git --work-tree=/path/to/checkout-dir --bare reset --hard 

這告訴git的復位到正常狀態,利用給定的路徑作爲工作目錄,但請記住該存儲庫實際上是裸露的。我以前沒有親自做過這種事情,但它似乎在我的小測試中工作!

注意:如果您決定要推入檢出分支(只有在服務器上的回購將不會用於任何操作,而只是推送並檢出文件的副本)。 。如果你完全確定這一點,你可以在服務器的gitconfig中將receive.denyCurrentBranch設置爲false,在服務器上執行git reset --hard,強制其工作目錄進入它應該處於的狀態。

2

閱讀「爲什麼不「git push」之後,我看到遠程回購的更改了嗎?「在GitFaq(在Git Wiki上)。