首页 > 其他分享 >git submodule 实战

git submodule 实战

时间:2022-08-14 16:48:06浏览次数:61  
标签:实战 子仓 git clone init submodule config

1.git submodule指什么

关于git submodule是什么,可以看下面这个链接。

https://www.cnblogs.com/hwx0000/p/14146838.html

2.git submodule init做了什么

当我们git clone某一个git之后,在主目录下会有如下一个文件夹.git和文件.gitmodules(如果父仓下含有子仓)

打开.gitmodules文件,可以看到父仓下所包含的所有的子仓库的信息,一般会有子仓名字,挂载路径,下载地址,有时也会写上branch。

.gitmodules是我们git clone父仓的时候下载下来的,是父仓的文件。

下面开始获取子仓的代码,在主目录下执行git submodule init,会发现在.git文件夹下多了config

config的内容如下,可以发现git submodule init的作用就是将.gitmodules的内容复制一份到config,只不过其中path变成了active属性。

同样一份信息保存两份,有必要吗,当然有必要。

因为我们有时候可能不需要clone所有的子仓,这时我们就可以对config文件进行手动的修改,不clone某些子仓的代码

 

比起手动修改config文件带来的不规范性,我们可以多次使用命令git submodule init <submodule name 1>  <submodule name 2>来添加需要clone的子仓。

当然这时还是没有子仓的代码,下面进入git submodule update。

参考:https://stackoverflow.com/questions/44366417/what-is-the-point-of-git-submodule-init

3.git submodule update

完成上步骤选定需要clone的子仓之后,在主目录下运行git submodule update即可以clone那些上步骤中选定的子仓。

4.当子仓含有子仓

在完成步骤3之后,我们子仓的文件都clone下来了,不过子仓的子仓的代码还是没有,怎么办

方法同上,找到某一个子仓的主目录,可以发现下面从空文件夹,变成如下,并且多了.gitmodules,这表明这个子仓仍然是包含子仓。

在这个路径下运行git submodule init和 git submodule update,就可以clone下来子仓的子仓的代码。

那这里执行完git submodule init之后生成的config放在哪里呢,见下图

5.思考

有点感觉这个过程实在是有点麻烦,幸好项目中包含子仓的子仓只有两个,不多,可以手动的cd到那个文件夹,然后执行git submodule init + update。

我以前并不是这么做的,直接在图形化界面smartgit里面输入父仓的git地址,自动就会帮我把子仓的代码也clone下来,非常方便,不过这次遇到了一个问题

我多次实验发现,smartgit总是提示我下图,一直在clone某个子仓,虽然我一直点击“等待”,仍然不能clone成功。目前推测原因应该是这个子仓特别大,大就会导致时间长,而smartgit时间非常长后,大概8个小时这个级别,好像就会clone不下来,

这时就得只能直接用命令行了。

 

 

标签:实战,子仓,git,clone,init,submodule,config
From: https://www.cnblogs.com/midhillzhou/p/16585707.html

相关文章

  • Git
    Git定义:是n种版本控制器的其中一种版本控制器:就是在开发阶段辅助我们团队开发的工具关于git下载git官网:https://git-scm.com/下载对应版本的客户端具体的安装就......
  • git clone 报错remote:Access denied The requested URL returned error:403
    gitcloneproject_URL命令向远程仓库克隆项目时遇到报错403   error403是服务器拒绝了终端的访问,是账户密码的问题,可是在客户端没有弹出需要输入账户密码的弹窗。......
  • MapReduce入门实战
    MapReduce思想MapReduce是Google提出的一个软件架构,用于大规模数据集的并行运算。概率“Map(映射)”和“Reduce(归约)”以及它们的思想都是从函数式编程语言借鉴的,还有......
  • git rm
    1对于‘Untrackedfiles’直接在文件鼠标右键删除,或者Terminal中del<file>为啥不用gitrm<file>呢?因为其没有被git管理2对于已经被git管理的文件,使用......
  • create GitHub Actions and publish GitHub Actions All In One
    createGitHubActionsandpublishGitHubActionsAllInOnehowtocreateyourownGitHubActionsandpublishitCreateaJavaScriptActionusingTypeScript......
  • github学习笔记(八):分支修改冲突怎么办?
    你在你的分支上工作,我在我的分支上工作。我们修改了同一个文件,合并的时候怎么办?如果使用之前的合并方式,保存同一个文件时势必会出现冲突。分支冲突听谁的?听谁的难道可......
  • 列式存储的分布式数据库——HBase Shell与SQL实战操作(HBase Master高可用实现)
    目录一、前言二、命令行操作(hbaseshell)1)连接HBase2)创建表(create)3)添加数据(put)4)查询数据(scan)5)获取单行数据(get)6)禁用/启用表(disable/enable)7)清空表(truncate)8)删除表(drop)9)开启......
  • git配置用户名和邮箱
    1、本地git客户端配置用户名和邮箱地址的作用:用户每次用git提交代码时都会记录用户名和邮箱。2、git设置用户名和邮箱的命令gitconfig--globaluser.name"username"......
  • Git 使用入门
    学习之前,要明白一个概念:版本控制版本控制什么是版本控制版本迭代,新的版本,需要版本管理器版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、目录或工......
  • 从Git上新拉下来的C#工程,其引用库全部被标记为黄色感叹号解决方法
    解决操作如下:①工具——NuGet包管理器——管理解决方案的NuGet程序包。 ②对缺少的NuGet程序包进行还原。  ③还原完成(解决方案资源管理器中点击刷新),工程恢复正......