2012-07-06 87 views
3

我們有一些開發人員推動服務器上的遠程裸回購,並希望做一些類似於自動推送的操作,以便在該中央裸回購中使用git p4進行夜間執行。但是我遇到了一個障礙,因爲它似乎無法在工作樹之外運行git p4提交。git p4從裸倉庫提交?

建議如何處理這種情況?

回答

1

我對每隔幾分鐘運行一次腳本做類似的事情,並在git和p4之間進行雙向同步。但是如果沒有檢出的git樹和p4回購庫,git-p4就無法工作。在所有你結束了3個版本的源:

  1. 裸git倉庫
  2. 簽出的混帳回購協議爲「混帳P4」做它在
  3. P4結賬工作,從提交到P4 。

開發人員使用名爲'dev'的分支推送到裸Git回購(在gitolite上)。然後,每隔幾分鐘,還有,做一個腳本:

  1. 更新已簽出的git樹(GIT拉--rebase)
  2. 拉下最新上游P4變爲P4 /主(GIT P4同步)
  3. 針對P4世界
  4. 底墊git的世界(GIT底墊P4 /主)
  5. 發送的git變化至P4(GIT P4提交)
  6. 改寫 '開發' 分支(混帳推產地+ HEAD:DEV)

Gotchas

  1. 合併衝突。這些實際上很少發生,但可能會導致一些問題。 (1)和(5)之間的變化,我不得不在整個事情上添加一些鎖定,以便開發人員不會丟失更改。鎖定只是創建一個鎖定目錄,然後在其中一個鉤子腳本中使用它來延遲推送。

  2. RCS關鍵字。較新版本的'git p4'現在可以處理RCS關鍵字,但最初並沒有,所以整個事情偶爾會因爲合併衝突而卡住。

設置過程需要一段時間,但現在已經進行了18個月,100多名開發人員的事件很少。

+0

嗨盧克,thx在這看起來很有希望。我會嘗試一下,讓你知道它是如何發生的。 – ruedaminute 2012-07-13 14:59:06

0

它可能是最簡單的不使用git-p4,但只是有一個結帳的git樹,這也是一個強制結帳,並從那裏腳本的一切? 即做一個git拉,分析輸出編輯適當的文件,添加新的,刪除刪除的,然後提交到perforce?