簡體   English   中英

如何處理嵌套的git存儲庫?

[英]How to handle nested git repositories?

我有一個新項目,整個項目都受版本控制。

項目目錄如下所示:

/projectname
--/web
   --nodeapp.js
--/mobile
   --androidapp

所以目前,.git位於/projectname項目的根/projectname 是否有可能將兩個子目錄放入自己的倉庫? 例如, /web目錄包含將通過Heroku部署的節點應用程序,Heroku部署使用git進行部署,因此我需要該部分作為自己的repo,因為顯然將整個項目(包括android)部署到Heroku將是愚蠢。

我讀過子模塊可能對這個用例有好處,但我不太確定這是否正確,以及它是如何在我的情況下使用它們。 謝謝!

是否有可能將兩個子目錄放入自己的倉庫?

是。 這正是子模塊的意義所在。 當你這樣做時會發生什么,子目錄的git add存儲該目錄中當前檢出的提交的id。

您不需要使用git submodule命令。 它經常需要做的任務,但它們是顯而易見的,而且幾乎所有這些任務都是直接的oneliner - 而那些不是,並不比那更難的。 子模塊命令最有用的功能是將實際存儲庫從子目錄中提升到現有存儲庫中的一個方便(和任意)的角落,這樣你仍然可以不受懲罰地破壞你的工作樹。


以下是您如何找到所有當前跟蹤的子模塊,無論您是否已告知子模塊命令:

git ls-files -s|grep ^16            # ls-files -s output: mode id stage path

提交中的所有子模塊,無論您是否告訴子模塊命令:

git ls-tree -r $id|grep ^16         # ls-tree -r output:  mode type id path

$id可以是例如master ,或@ aka HEAD

Id是子模塊的跟蹤狀態

git rev-parse :path/to/it           # from index i.e. last add/checkout/reset/etc 
git rev-parse $id:path/to/it        # from $id, e.g. `master` or `3fac3`

找出目前在子模塊中檢出的內容:

(cd "$submodule"; git rev-parse HEAD)

檢查子模塊中的正確提交:

(id=`git rev-parse :"$submodule"` && cd "$submodule" && git checkout $id)

......等等。

那么,submodule命令真正為你做了什么? 除了上方的提升,它確實增加了唯一的事情是一個方便的地方,以保持筆記-例如,哪來的默認現場找到這些提交? git submodule命令已經確定.gitmodules是一個存儲這樣的東西的好地方。 就像所有git一樣,唯一重要的是提交。 包括.gitmodules文件在內的所有其他文件只是方便但可有可無的筆記。

是的,子模塊似乎非常適合你。

使用子模塊,您將擁有一個外部存儲庫“projectname”,以及兩個內部存儲庫“web”和“mobile”。

Git子模塊將在外部和內部存儲庫之間創建強大的版本關系。 外部存儲庫將始終指向內部存儲庫中的特定提交。

我發現git subtreesubmodule更容易學習如何使用。 這往往更容易與團隊協作者共享,而不是處理子模塊。

首先添加web遠程

git remote add weborigin https://path.to/remotes/plugin.git

創建指定新文件夾前綴的子樹

weborigin是遠程名稱, master是指子樹的存儲庫上的master分支。 --prefix指的是子樹存儲庫根目錄的文件夾路徑

git subtree add --prefix=web weborigin master

weborigin正常提交

git subtree pull --prefix=web weborigin master

在超級項目中提交的提交將被后向移植

git commit -am "new changes to be backported"

checkout new branch for merge,設置為跟蹤子樹repo

git checkout -b backport weborigin/master

櫻桃挑選后衛

git cherry-pick -x --strategy=subtree master

將更改推回到插件源

git push weborigin backport:master

暫無
暫無

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

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