关键词:子树|模块|子项目|库中|项目|提交

应用子模块和子树来管理方法

  • 时间:
  • 浏览:191

应用子模块和子树来管理方法 Git 项目

应用子模块和子树来协助你管理方法好几个储存库中现有的子项目。

假如你参加了开源系统项目的开发设计,那麼你很可能早已用了 Git 来管理方法你的源代码。你将会遇到过有很多依靠和/或子项目的项目。你是怎么管理他们的?

针对一个开源系统机构,要完成小区和商品的单一来源文本文档和依靠管理方法较为繁杂。文本文档和项目通常会泛娱乐化和越来越数据冗余,这导致他们没办法维护保养。

重要性

假定你要把单独项目做为一个储存库位的子项目,传统式的方式是把该项目拷贝到父储存库中,可是,假如你要想在好几个父项目中应用同一个子项目呢?假如把子项目拷贝到全部父项目中,当有升级时,你必须在每一个父项目中做改动,它是不太行得通的。这会造成父项目中的数据冗余和数据信息不一致,使升级和维护保养子项目越来越很艰难。

Git 子模块和子树

假如你可以用一条指令把一个项目放入另一个项目中,会怎么样呢?假如你随时随地能够把一个项目做为子项目加上到随意数量的项目中,并能够同歩升级改动呢?Git 出示了这种难题的解决方法:Git 子模块submodule和 Git 子树subtree。建立这种专用工具的目地是以更为模块化的水准来适用同用编码的开发设计审批流,致力于 Git 储存库源代码管理方法source-code management与它下边的子树中间搭起一座公路桥梁。

生长发育在桑树上的樱桃树苗

下边是文中要详解的定义的一个真正应用领域。假如你早已很了解树结构,这一实体模型看上去是下边那样:

Git 子模块是啥?

Git 在它默认设置的包中出示了子模块,子模块能够把 Git 储存库置入到别的储存库中。准确地说,Git 子模块偏向子树中的一次提交。下边就是我 Docs-test GitHub 储存库中的 Git 子模块的模样:

文件夹名称@提交 Id 文件格式说明这一储存库是一个子模块,你能立即点一下文件夹名称进到该子树。名叫 .gitmodules 的环境变量包括全部子模块储存库的详细资料。我的储存库的 .gitmodules 文档以下:

你能用下边的指令在你的储存库中应用 Git 子模块:

复制一个储存库并载入子模块

复制一个带有子模块的储存库:

$ git clone --recursive

假如你以前早已复制了储存库,如今想载入它的子模块:

$ git submodule update --init

如果有嵌套循环的子模块:

$ git submodule update --init --recursive

免费下载子模块

串行通信地持续免费下载好几个子模块是很枯燥乏味的工作中,因此 clone 和 submodule update 会适用 --jobs 主要参数:

比如,想一次免费下载 8 身高模块,应用:

$ git submodule update --init --recursive -j 8$ git clone --recursive --jobs 8

拉取子模块

在运作或搭建父项目以前,你需要保证依靠的子项目全是全新的。

拉取子模块的全部改动:

$ git submodule update --remote

应用子模块建立储存库:

向一个父储存库加上子树:

$ git submodule add

复位一个已存有的 Git 子模块:

$ git submodule init

你也能够根据为 submodule update 指令加上 --update 主要参数在子模块中建立支系和跟踪提交:

$ git submodule update --remote

升级子模块的提交

上边提及过,一个子模块便是一个偏向子树中一次提交的连接。假如你要升级子模块的提交,不要担心。你不用显式地特定全新的提交。你只必须应用通用性的 submodule update 指令:

$ git submodule update

如同你平常建立父储存库和把父储存库消息推送到 GitHub 那般加上和提交就可以了。

从一个父储存库中删掉一个子模块

只是手动式删掉一个子项目文件夹名称不容易从父项目中清除这一子项目。要想删掉名叫 childmodule 的子模块,应用:

$ git rm -f childmodule

尽管 Git 子模块看上去非常容易入门,可是针对新手而言,有一定的应用门坎。

Git 子树是啥?

Git 子树 subtree,是在 Git 1.7.11 导入的,让你能把一切储存库的团本做为根目录置入另一个储存库中。它是 Git 项目能够引入和管理方法项目依靠的几类方式之一。它在基本的提交中储存了外界依靠信息内容。Git 子树出示了干净整洁的集成化点,因而非常容易还原他们。

假如你参照 GitHub 出示的子树实例教程来应用子树,那麼不管你何时加上子树,在当地都不容易见到 .gittrees 环境变量。这我们一起没办法辨别哪家是子树,由于他们看上去很像一般的文件夹名称,可是他们确是子树的团本。默认设置的 Git 包中不出示带 .gittrees 环境变量的 Git 子树版本号,因而假如你要想带 .gittrees 环境变量的 git-subtree 指令,务必从 Git 源代码储存库的 /contrib/subtree 文件夹名称 免费下载 git-subtree。

你能像复制别的基本的储存库那般复制一切带有子树的储存库,但因为在父储存库中有全部子树的团本,因而复制全过程将会会不断很长期。

你能用下边的指令在你的储存库中应用 Git 子树。

向父储存库中加上一个子树

要想向父储存库中加上一个子树,最先你需要实行 remote add,以后实行 subtree add 指令:

$ git remote add remote-name $ git subtree add --prefix=folder/ remote-name subtree-branchname

上边的指令会把全部子项目的提交历史时间合拼到父储存库。

向子树消息推送改动及其从子树获取改动

$ git subtree push-all

或是

$ git subtree pull-all

你应该应用哪家?

一切专用工具都是有优点和缺点。下边是一些将会会协助你决策哪样最合适你的特点:

Git 子模块的储存库占有室内空间更小,由于他们仅仅偏向子项目的一次提交的连接,而 Git 子树储存了全部子项目以及提交历史时间。Git 子模块必须在网络服务器中可浏览,但子树是区块链技术的。Git 子模块很多用以根据部件的开发设计,而 Git 子树多用以根据系统软件的开发设计。

Git 子树并并不是 Git 子模块的立即可取代项。有确立的表明来具体指导大家该应用哪样。假如有一个属于你的外界储存库,应用情景是向它回推编码,那麼就应用 Git 子模块,由于消息推送编码更非常容易。假如给你第三方编码,且不容易向它消息推送编码,那麼应用 Git 子树,由于获取编码更非常容易。

自身试着应用 Git 子树和子模块,随后在评价中留有你的应用感受。

猜你喜欢