2013-09-25 21 views
1

我有這種情況:如何使用GIT後鉤將更改應用到不同的存儲庫

庫中的含有某種框架(如CakePHP的一個基本設置和一些常用的控制器)。

庫B包含項目,基於存儲庫,與其他文件,以及一些變化/在文件中添加從框架中來。

不幸的是,結構不能被改變,使得A是在B項目的單獨的子文件夾(在控制器中的文件夾是從框架的公共控制器,加上附加的)。

欲實現如下:

一些改變的框架(A)後,我要被施加到不同的存儲庫(B)的那些變化。 A和B被設置爲服務器上的共享裸存儲庫。

據我所知,post-receive(或post-commit?)掛鉤可以處理,但我不知道它是如何完成的。我認爲鉤子應該創建一個從上次更改補丁文件,並以某種方式將此其他幾個倉庫。

是否有人有這樣的例子?

(另一種方法是,基於該框架對所有項目使用一個存儲庫,並且每個項目都是一個分支,但這看起來不太乾淨,我不喜歡將所有項目放入只是一大塊)。

+0

你應該使框架(「'A'」)成爲所有使用它的項目的一部分(使用* git submodule *或* git子樹*)。然後編寫一個腳本,用於更新每個使用它的項目中的子模塊/子樹。這樣,您也可以控制每個項目中使用哪個版本的「A」(這實際上是您要解決的問題,而不是包含框架的技術性)。 – Sigi

回答

0

如果你想從--bare回購A發送補丁(一些服務器上),B(和CDE ...),主要問題是搞清楚了這一點:「其中A版本做BCD,......已經和他們應該有哪些?」

舉例來說,假設有人在A工作做的:

git push origin master:experiment_for_joe devel:featureX 

拿東西,他對他的地方master分支,它給喬(約莫名其妙移動在自己的回購,或許前)和拿東西,他對他的devel分支,並將其命名服務器上featureX

做experiment_for_joe的某些版本(S)和/或featureX去B?或者也許只能到D

假設對此的回答是「不,從不,只要進入deploy就出門」。足夠簡單,但現在問題的另一半:如果B有人添加了三次提交到deploy之前最新和最大的結果,但由於某種原因,C後面有七次提交?如果D上的版本不匹配任何版本回購A會怎麼樣?

假設你可以解決所有這些問題,並踏踏實實地是這樣的:

(等等),那麼,假設BC,等等,都是回購和你想要的所有中間提交展現出來(如果沒有,你可以得到一個大補丁,而不是):

git format-patch $on_B..devel 

讓你的系列帶來B同步所需的修補程序,以及:

git format-patch $on_C..devel 

讓您獲得使C同步所需的一系列修補程序,等等。 (如果目標回購「並不真正匹配」,這些可能需要按摩才能正確應用。)

(如果它們不是回購,請使用git diff $on_B develgit diff-tree和/或一些潛在的管道鑽頭,以獲得直接映射「如何改變B上的內容」爲devel中的內容。但是,如果在此出現任何問題,則兩者可能會不同步並且很難恢復。如果B,C等,回收,你有更多的機會找出你需要做什麼來恢復。)

相關問題