[英]Using git right (for private repo website code)?
這可能是關於慣例,最佳做法和/或個人偏好的問題:
所以我是一個git noob,我的網站代碼不值得分享,所以我不使用github等。
知道git不需要中央存儲庫我想:很棒,我的工作站和服務器是兩個節點,我只是將更改從我的工作站推送到服務器。
當我開始時,代碼只在服務器上,所以我:
git init
git clone me@myserver:path/to/repo
git push me@myserver:path/to/repo
我得到了奇怪的結果。 我在本地添加的文件出現在服務器上,但未反映對現有文件的更改。
然后我讀了一個警告,不要推送到已檢出的遠程分支。 所以新的設置是:
git clone --bare
- 打造裸機庫 ~/repos/mysite.git
- 不是公用文件夾) git push me@myserver:repos/mysite.git
git pull ~/repos/mysite.git
獲取最新信息 這是正確的嗎? 這合乎邏輯嗎? 這是你會做的嗎?
無論你選擇做什么,你可能想要使用git hooks自動化它。 鈎子是一組git將在某些事件上執行的腳本。 這里的相關內容是更新后的掛鈎(在服務器的存儲庫中)。 在一個普通的回購中,鈎子是在.git/hooks
,所以在一個裸倉庫中,它們是hooks
。 該目錄當前可能包含許多示例鈎子腳本(在最近的版本中名為*.sample
)。 您需要創建一個名為post-update
,其中包含在推送服務器之后要執行的任何操作(例如cd到其他repo並執行pull)。
至於你的解決方案的細節......你做的是正確的事情,不要進入檢出分支。 您正在做的唯一可能的問題是服務器最終會得到一個額外的存儲庫副本,僅用於檢出文件。 如果你決定不喜歡這種浪費的磁盤空間,我很確定這會做你想要的:
git --work-tree=/path/to/checkout-dir --bare reset --hard
這告訴git使用給定的路徑作為工作目錄重置為正確的狀態,但要記住存儲庫實際上是裸的。 我以前沒有親自做過這種事情,但它似乎對我的小測試有用!
注意:如果你決定要進入簽出分支,那么(只有當服務器上的repo永遠不會被用於推送和簽出文件的副本時)...如果你是完全確定這一點,你可以在服務器的gitconfig中將receive.denyCurrentBranch設置為false,在服務器上執行git reset --hard
,強制它的工作目錄進入它應該處於的狀態。
閱讀“為什么我不會在”git push“之后看到遠程倉庫中的變化?” 在GitFaq (在Git Wiki上)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.