2011-08-11 23 views
2

這裏的情況是:混帳:克隆的正確順序,推拉

生產服務器

  • 網站(/家/ A/WWW)
  • 網站B(/家/ B/WWW)
  • 網站C(/家/ C/WWW /)

開發計算機

[現在還是空的,因爲我們設定的事情了......不斷開發擁有自己的客戶端機器,我們將編輯文件]

我做了什麼

在製作:

cd /home/a/www/ 
git init 
add . 
commit -m "Initial loading of files" 


cd /home/b/www/ 
git init 
add . 
commit -m "Initial loading of files" 


cd /home/c/www/ 
git init 
add . 
commit -m "Initial loading of files" 

所以現在所有的項目都在單獨的git項目中。現在想法是將它們加載到每個開發人員的計算機上,然後他們可以對其進行編輯並在必要時進行上傳。說我想編輯項目B:

cd ~/ 
git clone ssh://server/home/b/www/ website_b 

開發者然後編輯該網站,並準備上傳的變化:

cd ~/website_b 
git commit -a -m "I have made some changes" 
git push 

認爲這是正確的做法,並認爲這會將生產服務器上的更改上傳到/home/b/www/。但是,我收到了一堆警告,事情變得混亂起來。我有和這裏一樣的問題:git: updating the current branch

但是,我對git很陌生,很難理解概念和工作流程。分支,樹幹,主人,出身,對我來說都有點不清楚。我現在想讓事情變得簡單,並讓它工作。我們從不與一個項目同時工作超過1人,並且我們不需要創建子項目(分支機構?)。最起碼到現在。我只是想讓git工作。我想:

  • 從生產服務器下載當前項目
  • 進行更改
  • 上傳到

這就是全部。這裏出了什麼問題,或者我應該閱讀/學習/練習以更好地理解這一點?

+1

未來,請不要發佈類似「但是,我得到一堆警告,事情混淆起來」的事情。始終包含您所得到的確切錯誤。我們如何解釋「事情搞砸了」? – meagar

+0

警告與我鏈接的文章相同,所以這就是爲什麼我沒有再次複製它們的原因。這個問題不是特別關於那些錯誤。不過,我明白你的意思,並將其考慮在內,謝謝。 – user852091

回答

3

您的工作流程非常好。唯一的問題是,你從開發者機器上推送的服務器上的回購應該(不應該是*)被稱爲bare回購。

所以,當你在服務器上創建的項目,這樣做:

git init --bare .

,這將建立回購裸您可以放心地推給他們。

現在,如果您希望將服務器中的服務器提供的文件從git clone從中央裸回購服務器發送到您將服務於該文件的位置,並且具有hooks(如後接收)在裸回購協議中的git pushgit pull您將用於爲您的網站提供服務。

看看這裏的詳細信息,該流量:http://toroid.org/ams/git-website-howto

* - 你推到可以是具有工作目錄正常回購回購,也就是簽出文件(非裸露的回購協議沒有這些,只有回購的元數據和對象)。但是,對於您正在推行的回購協議,您有一個很好的做法。在這裏尋找更詳細的解釋,爲什麼會是這樣:http://gitready.com/advanced/2009/02/01/push-to-only-bare-repositories.html

1

有一些可能出現的問題,我能夠馬上發現,但可能有多種:

a)用戶連接雖然SSH做推如果以這種方式訪問​​,至少需要.git存儲庫上的文件io權限才能推送到遠程存儲庫。

b)在成功推送到遠程存儲庫並附上了工作目錄之後,您將而不是自動檢出新提交。工作目錄將保持在遠程推送之前的狀態。

我強烈建議您使用gitosis(不建議使用)或gitolite來設置您的(中央)開發存儲庫。然後,您可以從開發服務器推送到實時服務器。但請注意,您必須明確簽出現場服務器上的新提交(我相信git checkout HEAD應該爲您執行此操作)。您可以使用後推鉤自動化chechout。 另一種選擇是讓實時服務器在開發服務器上運行git pull,我個人更喜歡它。它不需要顯式結帳,並且必須從實時服務器發出,這允許更好的訪問控制。