使用子模块并非没有任何缺点。首先,你在子模块目录中工作时必须相对小心。当你运行git submodule update,它会检出项目的指定版本,但是不在分支内。这叫做获得一个分离的头——这意味着 HEAD 文件直接指向一次提交,而不是一个符号引用。问题在于你通常并不想在一个分离的头的环境下工作,因为太容易丢失变更了。如果你先执行了一次submodule update,然后在那个子模块目录里不创建分支就进行提交,然后再次从上层项目里运行git submodule update同时不进行提交,Git会毫无提示地覆盖你的变更。技术上讲你不会丢失工作,但是你将失去指向它的分支,因此会很难取到。

为了避免这个问题,当你在子模块目录里工作时应使用git checkout -b work创建一个分支。当你再次在子模块里更新的时候,它仍然会覆盖你的工作,但是至少你拥有一个可以回溯的指针。

切换带有子模块的分支同样也很有技巧。如果你创建一个新的分支,增加了一个子模块,然后切换回不带该子模块的分支,你仍然会拥有一个未被追踪的子模块的目录

$ git checkout -b rackSwitched to a new branch "rack"    $ git submodule add git@github.com:schacon/rack.git rackInitialized empty Git repository in /opt/myproj/rack/.git/...Receiving objects: 100% (3184/3184), 677.42 KiB | 34 KiB/s, done.Resolving deltas: 100% (1952/1952), done.    $ git commit -am 'added rack submodule'[rack cc49a69] added rack submodule2 files changed, 4 insertions(+), 0 deletions(-)    create mode 100644 .gitmodules    create mode 160000 rack    $ git checkout masterSwitched to branch "master"    $ git status# On branch master# Untracked files:# (use "git add ..." to include in what will be committed)## rack/

你将不得不将它移走或者删除,这样的话当你切换回去的时候必须重新克隆它——你可能会丢失你未推送的本地的变更或分支。

最后一个需要引起注意的是关于从子目录切换到子模块的。如果你已经跟踪了你项目中的一些文件但是想把它们移到子模块去,你必须非常小心,否则Git会生你的气。假设你的项目中有一个子目录里放了 rack 的文件,然后你想将它转换为子模块。如果你删除子目录然后运行submodule add,Git会向你大吼:

$ rm -Rf rack/    $ git submodule add git@github.com:schacon/rack.git rack'rack' already exists in the index

你必须先将rack目录撤回。然后你才能加入子模块:

$ git rm -r rack    $ git submodule add git@github.com:schacon/rack.git rackInitialized empty Git repository in /opt/testsub/rack/.git/    remote: Counting objects: 3184, done.    remote: Compressing objects: 100% (1465/1465), done.    remote: Total 3184 (delta 1952), reused 2770 (delta 1675)Receiving objects: 100% (3184/3184), 677.42 KiB | 88 KiB/s, done.Resolving deltas: 100% (1952/1952), done.

现在假设你在一个分支里那样做了。如果你尝试切换回一个仍然在目录里保留那些文件而不是子模块的分支时——你会得到下面的错误:

$ git checkout master    error: Untracked working tree file 'rack/AUTHORS' would be overwritten by merge.

你必须先移除rack子模块的目录才能切换到不包含它的分支:

$ mv rack /tmp/    $ git checkout masterSwitched to branch "master"    $ ls    README rack

然后,当你切换回来,你会得到一个空的rack目录。你可以运行git submodule update重新克隆,也可以将/tmp/rack目录重新移回空目录。

!爆享折扣!

▼▼▼原价129今日拼团仅需 ¥99人专享首单限时优惠 ¥19.9!!!但!仅限前100个名额???

git 子模块_Git子模块的问题相关推荐

  1. git中submodule子模块的添加、使用和删除

    背景 项目中经常使用别人维护的模块,在git中使用子模块的功能能够大大提高开发效率. 使用子模块后,不必负责子模块的维护,只需要在必要的时候同步更新子模块即可. 本文主要讲解子模块相关的基础命令,详细 ...

  2. git submodule获取子模块

    从github上获取工程,经常会出现依赖其它github上代码的情况,这时如果每一个都手动下载,实在太麻烦了.其实git给我们提供了相互引用的功能,可以在工程中直接引入其它的代码库,这样可以保证每次使 ...

  3. git submodule add子模块的添加,--recurse-submodules递归克隆子项目

      git submodule add 可将其他仓库作为本仓库的子模块,并保持父项目和子项目相互独立.面对比较复杂的项目时,经常会用到. 语法 将URL的仓库作为本仓库的子模块.执行后,git会将UR ...

  4. 如何“ git clone”包括子模块?

    我正在尝试将子模块放入存储库中. 问题是当我克隆父仓库时,子模块文件夹完全为空. 有什么方法可以使git clone parent_repo实际上将数据放入子模块文件夹中吗? 例如, http : n ...

  5. GIT带着子模块拉取代码

    根据supper的父项目配置获取对应子项目.父模块仅进行拉取操作, 拉取完毕后,进入子模块进行构建操作 使用命令: #父级+子集一起clone git clone --recursive git地址 ...

  6. submodule切换分支_git子模块分支会随主项目的分支切换吗?

    Recently I got to know git submodules. They appear to be self-sufficient projects with their own git ...

  7. [转]使用Git Submodule管理子模块

    本文转自:https://blog.csdn.net/qq_37788558/article/details/78668345 实例代码: 父项目:https://github.com/jjz/pod ...

  8. eclipse查看git地址_Git大文件管理:函数计算和OSS支持的Git LFS服务器

    此服务器支持Batch API和File Locking API.项目地址与文档: https://github.com/zhxxch/git-lfs-one/​github.com LFS 是个好东 ...

  9. eclipse查看git地址_git下载及使用

    一.git下载安装 官网下载:Git 如果官网下载太慢可以使用下面的下载地址 国内的淘宝npm镜像下载,网址:git-for-windows Mirror 安装一直next就可以了 二.git下载与上 ...

最新文章

  1. R语言ggplot2可视化自定义图例标签间距实战:自定义图例标签间距、自定义图例与图像之间的间距
  2. 牛逼!有人用漫画带你了解 Linux 内核长啥样
  3. CTF-压缩包套娃爆破脚本
  4. 【转】Asp.NET大文件上传开发总结(一)
  5. Cpp / shared_ptr 配置删除器的方法
  6. java 重载 大于_详解java重载与覆写的区别
  7. 诺基亚c7微信 服务器忙,诺基亚C7怎么刷机
  8. 【UE4】UE4文件系统
  9. discuz wooyun-2010-080723
  10. 太阳直射点纬度计算公式_高中地理——每日讲1题(欧洲的气候、太阳高度角、日出时间)...
  11. 网络邻居没有查看工作组计算机,解决Windows 10 系统看不到网上邻居工作组里的其他计算机-win7网上邻居...
  12. 计算机英语念法,电脑的英文读音标准带音标的
  13. 【shaderforge学习笔记】 Rotator节点
  14. Java实现png图片转pdf
  15. 【一周头条盘点】中国软件网(2018.2.26~2018.3.2)
  16. Archlinux arm的国内镜像源(for Banana Pi / Raspberry Pi , etc)
  17. GPS授时服务器在电厂视频监控系统中的应用
  18. 【京东电商网站主界面仿写——HTML第一部分】
  19. avc水平什么意思_西方经济学中AVC是什么意识?
  20. mysql注入带外通道攻击_MySQL注入攻击与防御

热门文章

  1. hexo+github 一小时搭建个人博客
  2. 基础知识—条件判断语句-switch语句
  3. entity framework mysql guid,c# – 自动生成不是Entity Framework中主键的GUID列
  4. php b+树,PHP利用b+树概念实现树形数组
  5. TRUNCATE恢复-bbed
  6. 数据库半年回顾:国外波澜不惊,国内势如破竹
  7. 多方安全计算:隐私保护集合求交技术
  8. 【华为云技术分享】云图说丨初识标签管理服务:给你的云资源贴个条
  9. python读写配置文件使用总结与避坑指南
  10. 是什么造成了数据库的卡顿