2013-06-24 97 views
2

我有一個小型PHP庫,我已經編寫它來支持各種Web項目。這些項目都在git中,圖書館是每個回購協議的子模塊。 Web項目使用git push進行部署,部署腳本需要訪問庫子模塊回購以更新庫。從裸機遠程倉庫克隆時丟失提交

有時對於任何給定的項目,庫都會有自己的分支,直到我將這些更改合併回主分支。

我已經爲該庫設置了裸露的遠程回購站,並且能夠將庫子模塊推送到遠程回購站。這很好,我可以在遠程回購中看到這些提交。但是,當我嘗試部署時,無法找到這些提交。事實上,如果我自己克隆遠程回購,我找不到那些提交。

例如,遠程回購看起來是這樣的: -

git log --graph --oneline --date-order 

* 9c9b880 (BRANCHA) 
* e88ee92 
* 07260c9 
* 40b0963 
* 35b6533 (tag: dev/0.0.2, master) Merge branch 'refs/heads/development' 
|\ 
| * ba3c1bd (HEAD, development) 
| * eefa611 
| * 1b87828 Merge branch 'refs/heads/BRANCHB' into development 
| |\ 
| | * 9078c1c (BRANCHB) 
| |/ 
| * 834e715 
| * a000cd7 
|/ 
* 5985fc9 Initial commit 

但是,如果我克隆遠程回購如下: -

git clone -b BRANCHA http://pathto/repo.git 

克隆的回購則是這樣的: -

git log --graph --oneline --date-order 

* 07260c9 (HEAD, origin/BRANCHA, BRANCHA) 
* 40b0963 
* 35b6533 (tag: dev/0.0.2, origin/master) Merge branch 'refs/heads/development 
|\ 
| * ba3c1bd (origin/development, origin/HEAD) 
| * eefa611 
| * 1b87828 Merge branch 'refs/heads/BRANCHB' into development 
| |\ 
| | * 9078c1c (origin/BRANCHB) 
| |/ 
| * 834e715 
| * a000cd7 
|/ 
* 5985fc9 

如果我做git pullAlready up-to-date.

爲什麼當我克隆時,我最終提交了07260c9,沒有提交9c9b880,爲什麼不拖拽那些後來的提交呢?我是否錯過了遠程裸回購應該如何工作,或者我應該以不同的方式推動裸回購?

+0

你能通過SSH克隆嗎?如果是 - 試試。 – Chronial

+0

是的......並且謝謝你。我現在可以回答我自己的問題:-) – rowatt

回答

4

道具@Chronial指着我在正確的方向...

事實證明,混帳通過SSH是不太一樣的git通過HTTP。也許git-fu專家可以解釋爲什麼,但解決方法很簡單。在遠程回購: -

git update-server-info 

帶來回購作爲取出過與回購的當前狀態同步的http(如取出通過ssh)。

看來,這完全有推到遠程回購後運行,但這是作爲回購協議post-update,那裏每推後,下面的腳本的鉤子目錄重命名文件post-update.sample簡單: -

#!/bin/sh 

exec git update-server-info 
+2

http和ssh的區別在於,git-http是「dump」,而git-ssh是「smart」。這意味着使用git-ssh客戶端和回購將進行對話,客戶可以提問「你的分支是什麼以及它們在哪裏?」。另一方面,使用http,git可以下載那些靜態文件(和**不是**列表目錄)。所以git-http需要一個包含有關哪些分支的基本信息的文件。 'git update-server-info'提供了這個功能。通過運行'git help update-server-info'並查看'.git/info/refs',可以獲得更多信息。 – Chronial

+0

謝謝你解釋! – rowatt