2011-03-18 15 views
1

Fedor是我的私人git服務器,它包含一個裸 - 初始化repo.git文件。我該如何處理這種推動私人git服務器生產的git配置?

Vadim是我的生產服務器,它包含一個定期回購。我需要Vadim只從Fedor拉動。沒有「舞臺」或中間人。開發者總是會推Fedor,並且我想Fedor在被推動時自動掛上Vadim與最新的repo.git

在這一點上,我一直在做Fedor是:

mkdir myrepo.git 
cd !$ 
git --bare init 

然後,我在本地加Fedor作爲遠程起源推給他。我設置在/var/www/html/foo/Vadim一個git回購和我說Fedor有:

git remote add origin [email protected]:repo.git 

我只用git pull origin master,因爲這不會做任何推動。重申一下,我想讓這個過程自動化,以便當開發人員推到Fedor時,會添加某種鉤子,所以在自動推送後會在Vadim上執行git pull origin master

我打算重新安排Vadim的設置方式,因爲它有一個非常原始的設置。

回答

2

除了你shouldn't push to non-bare repo之外,推動Vadim會更容易。

使用上瓦迪姆裸回購,有post-receive hook確保工作樹被刷新任何推:

$ cat > hooks/post-receive 
#!/bin/sh 
GIT_WORK_TREE=/var/www/www.example.org git checkout -f 
$ chmod +x hooks/post-receive 

這樣的話,你可以在費多爾在自動推定義post-update掛鉤瓦迪姆的裸回購。你可以把它不需要在Vadim額外的存儲庫

+0

感謝您的回覆。那麼這意味着開發者A會推動Fedor(裸回購),這會推動Vadim(裸回購),並且Vadim會在本地更新Vadim的回收樹。有兩個克隆裸倉回購有點違反直覺嗎?還是正常的? – 2011-03-18 06:25:06

+0

@meder:任何需要* push *的上游倉庫應該是裸倉庫,以避免工作樹和倉庫之間的同步問題。這是任何具有「集中」角色的回購的正常設置。 – VonC 2011-03-18 06:30:10

1

一種方法是對Fedor鉤做:

git push vadim master:refs/remotes/from-fedor/master 

...然後有一個post-receive鉤上Vadim說:

  1. 退出除非被更新的裁判是在錯誤refs/remotes/from-fedor/master
  2. 退出除非git status是乾淨的(即git status --porcelain爲空)
  3. 運行git reset --hard refs/remotes/from-fedor/master

,你檢查git status是乾淨也可以插入VonC's suggested answer以及舞臺 - 這很好,因爲如果有人一直調皮與部署庫打Vadim,它將不會覆蓋該人所做的任何更改。

如果你不清楚如何編寫這樣一個鉤子,讓我知道在評論中,我會寫和測試一個例子。

雖然這是完全正確的,它不是通常建議你推到一個純倉庫,我在這裏提出的方法的git FAQ has an example,在那裏你直接推到裁判是看起來像在遠程跟蹤分支遠程存儲庫。


更新

在回答您在下面的意見提出了幾點:

  • 是,在此設置有剛上Fedor和非純倉庫裸倉庫Vadim

  • Fedor的存儲庫中,您將添加一個指向Vadim上的存儲庫URL的「remote」。在上面的例子中我假設你叫這個vadim(即在較低的情況下),你想補充一點的東西,如:git remote add vadim ssh://vadim.whereever/respository/

  • 您設置上Fedor鉤子應該是post-receive掛鉤,看起來例如:

    #!/bin/sh 
    while read oldrev newrev refname 
    do 
        if [ x"$refname" = xrefs/heads/master ] 
        then 
         git push vadim master:refs/remotes/from-fedor/master 
        fi 
    done 
    

    ...並確保您記得製作該可執行文件。

+0

我承認我實際上很困惑。所以Fedor作爲一個裸機回購,而Vadim保持非裸回購?另外,我會在Fedor中添加什麼類型的鉤子?我如何從'Fedor'引用'vadim'?感謝回覆。 – 2011-03-19 03:16:23

+0

@meder:我已經更新了我的答案以解決這些問題 – 2011-03-19 06:51:22