簡體   English   中英

創建子Git存儲庫

[英]Create Child Git Repository

我有一個名為Template的TFS GIT存儲庫。 我們想要從中創建多個子存儲庫,然后能夠將更改從父存儲庫推送到子存儲庫。

順序為:

第1部分

  1. 完成模板的設置並將其標記為v1。
  2. 創建子存儲庫App1
  3. 將模板推送到App1中

第2部分 -將來的某個時候

  1. 更改模板並將其標記為v2。
  2. 將標簽v2推入App1。

我環顧四周,找不到第二部分的實現方法。 有什么想法嗎?

雖然我認為這是一個相對罕見的用例,這是共享代碼的最佳方法,但讓我們來看看它會發生什么。

如果你想在Template回購推更改App1回購,那么內Template ,你需要配置App1為遠程。

/repos/template $  git remote add App1 url/of/app1/repo

然后, Template就像貢獻給App1任何本地存儲庫一樣。 這意味着每次您基於模板創建新的應用程序存儲庫時,都必須將其添加為Template庫中的另一個遠程存儲庫。 還要注意, git push只能與一個遠程對象交互,因此您可能需要組合一個腳本來將更新推送到所有應用程序存儲庫。

Template一句,這感覺很落后-我認為您最好將Template設置為每個應用程序倉庫的遠程站點,並將每個應用程序倉庫設置為監視和pull Template更改。這似乎更像git友好的方式來做您想做的事情-當我們繼續描述push過程的實際工作方式時,這將反映在復雜性中。但是,如果您想要推送過程,則可以讓Template “貢獻”到每個應用程序倉庫通過將應用程序回購視為遙控器是一種方法。)

現在的問題是, push 無法執行合並。 因此,您需要為每個應用程序回購都擁有一個在將Template推送到Template 時才前進的分支,然后仍然有人必須將這些更改合並到用於應用程序本地更改的分支中。 Template推送到應用程序倉庫時,必須確保將新更改推送到應用程序倉庫的模板分支。

實際上,不管使用基於push還是pull的機制,最好都擁有這樣的分支。 唯一的區別是Template驅動分支的更新方式。 但是,如果您使用的是基於拉的模型,則每個存儲庫將負責其單個模板分支與模板存儲庫的上游關系,而不是模板存儲庫(和/或向其發出的推送命令)必須維護所有模板分支關系。

無論如何,那么在App您會遇到類似

T0 <--(template)
  \
   A -- B <--(master)

過一會兒,您可以在Template庫中進行一些更改,然后push這些更改push送到Apptemplate分支

T0 -- T1 <--(template)
  \
   A -- B <--(master)

然后有人將必須將template合並到master並解決所有由此產生的沖突。

T0 ------ T1 <--(template)
  \         \
   A -- B -- M <--(master)

這可以根據需要重復。 當然,如果應用程序倉庫中有多個分支,則需要弄清楚如何將新模板更改傳播到每個分支。 如果每個分支中有許多分支和沖突需要解決,那可能會變得很乏味(盡管您可以利用git rerere來減少麻煩)。 這就是為什么我認為,找到一種方法來分離通用代碼並使用構建系統將其視為依賴項,而不是基於pushpull的方案,如果它對通用類型可行的話,可能會更好。您正在處理的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM