首页 > 其他分享 >如何移除子模块?

如何移除子模块?

时间:2023-10-15 23:45:34浏览次数:33  
标签:git 删除 deinit 如何 submodule 模块 移除 rm

内容来自 DOC https://q.houxu6.top/?s=如何移除子模块?

如何移除Git子模块?
为什么我不能执行git submodule rm module_name命令?


自从 git1.8.3 (2013年4月22日) 起:

一旦你表达了对子模块的兴趣,git submodule init,就没有了“我不再对这个子模块感兴趣”的Porcelain方式。

git submodule deinit -f -- a/submodule 是这样做的方法。

删除过程也使用 git rm(自 git1.8.5 2013年10月起)。

总结

3步删除过程如下:

0. mv a/submodule a/submodule_tmp

1. git submodule deinit -f -- a/submodule    
2. rm -rf .git/modules/a/submodule
3. git rm -f a/submodule
# Note: a/submodule (no trailing slash)

# 或者,如果你想把它留在工作树里,并已经执行了步骤0
3.   git rm --cached a/submodule
3bis mv a/submodule_tmp a/submodule

解释

rm -rf: 这是 Daniel Schroeder(https://stackoverflow.com/users/2753241/daniel-schroeder)在回答(https://stackoverflow.com/a/26505847/6309)中提出的,并由 Eonil(https://stackoverflow.com/users/246776/eonil)在评论(https://stackoverflow.com/questions/1260748/how-do-i-remove-a-git-submodule/16162000?noredirect=1#comment41729982_16162000)中提到的:

这样会保留 .git/modules/<path-to-submodule>/ 不变。

所以如果你曾经用这种方法删除了一个子模块,然后重新添加它们,它将不可能,因为仓库已经被破坏了。


git rm: 参见 commit 95c16418(https://github.com/git/git/commit/95c16418f0375e2fc325f32c3d7578fba9cfd7ef):

目前使用 "git rm" 删除子模块会将子模块的工作树从超级项目的目录中移除,并将gitlink从索引中移除。
但是 .gitmodules 中的 submodule.<submodule name> 部分仍然没有改变,这是已删除子模块的遗留物,可能会让用户感到困扰(与 .git/config 中的设置相反,这个必须留作提醒用户他们对该子模块感兴趣,以便稍后在检出较旧的提交时重新填充)。

让 "git rm" 帮助用户通过不仅从工作树中删除子模块,还通过从 .gitmodules 文件中删除 "submodule.<submodule name>" 部分并执行两个步骤来帮助用户。


git submodule deinit: 它源于这个补丁(http://git.661346.n2.nabble.com/PATCH-v3-submodule-add-deinit-command-td7576946.html):

使用 git submodule init,用户可以告诉git他们对一个或多个子模块感兴趣,并希望在下一次调用 git submodule update 时将其填充。
但是目前没有简单的方法让他们告诉git他们不再关心一个子模块,并希望删除本地工作树(除非用户对子模块的内部非常了解,并自己从 .git/config 中删除了 submodule.$name.url 设置以及工作树)。

通过提供一个 'deinit' 命令来帮助这些用户。

.git/config 中删除整个 submodule.<name> 部分(对于给定的子模块)(或者对于所有已初始化的子模块,如果给定了'.')。
失败,如果当前工作树包含修改,除非强制。
抱怨,对于在命令行上给出的子模块,无法在 .git/config 中找到url设置,但尽管如此不失败。

这将处理(de)初始化步骤(.git/config.git/modules/xxx)。

自 git1.8.5 起,git rm 还负责:

  • 'add' 步骤,它记录了子模块在 .gitmodules 文件中的url:它是需要删除的。
  • 子模块的特殊条目(如 此问题 所示):git rm 从索引中删除它:
    git rm --cached path_to_submodule(无结尾斜杠)

这将删除存储在索引中的特殊模式为"160000"的目录,将其标记为子模块根目录。

如果您忘记最后一步,并尝试将曾经的子模块作为常规目录添加,您将收到类似于以下错误消息:

git add mysubmodule/file.txt 
Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'

注意:自Git 2.17(2018年第二季度)以来,git submodule deinit不再是一个shell脚本。

它是一个调用C函数的命令。

参见commit 2e61273commit 1342476(2018年1月14日)由[Prathamesh Chavan(pratham-pc)]提交。

(合并者:Junio C Hamano -- gitster --(2018年2月13日),提交信息:git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit ${GIT_QUIET:+--quiet} ${prefix:+--prefix "$prefix"} ${force:+--force} ${deinit_all:+--all} "$@"

标签:git,删除,deinit,如何,submodule,模块,移除,rm
From: https://www.cnblogs.com/xiaomandujia/p/17766465.html

相关文章

  • 如何实现Python中的切片操作
    内容来自DOChttps://q.houxu6.top/?s=如何实现Python中的切片操作Python中的切片符号是如何工作的?也就是说,当我编写代码像a[x:y:z]、a[:]、a[::2]等时,我如何理解哪些元素最终会进入切片?请在适当的地方包括参考资料。有关切片符号设计决策的更多讨论,请参见为什么切片和范围......
  • 不抖机灵!让工程师来告诉你做芯片是如何烧钱的!
    这是IC男奋斗史的第33篇原创本文3742字,预计阅读8分钟。大家应该都知道做芯片是一件非常烧钱的事情。经常看到新闻通稿,某某公司融资了xx亿,外行乍看之下觉得好多钱啊,但实际上可能只够该公司烧一年。那么做芯片到底有多烧钱?钱都花在哪哪些地方了?这篇文章杰哥将从芯片设计公司的角度......
  • 如何转产品工程师?
    这是IC男奋斗史的第31篇原创本文2232字,预计阅读6分钟。前几天杰哥在《ATE测试工程师是做什么的?》这篇文章中给大家详细介绍了芯片测试工程师(TestEngineer,简称TE)岗位。今天杰哥想给大家介绍另外一个与TE密切相关的岗位——产品工程师(ProductEngieer,简称PE)。对于简单的SOC芯......
  • 造题记录:如何出强制在线题
    今天造了一个数据结构题,具体题面是什么就不说了,题目名称是sosomst。输入格式是,第一行\(n,typ\),接下来两行的点权,然后是一棵树。输出\(n-1\)行的数字,树边强制在线。以下是我生成这题数据的方法。std.cpp肯定是自己写了,但是先不要实现强制在线。将std.cpp编译为可执行文件......
  • Python 模块EasyGui详细介绍
    0. 安装 EasyGuipipinstall easygui 官网:http://easygui.sourceforge.net1.一个简单的例子在EasyGui中,所有的GUI互动均是通过简单的函数调用,下边一个简单的例子告诉你EasyGui确实很Easy!importeasyguiasgimportsyswhile1:g.msgbox("嗨,欢迎进入第一......
  • JS操作增加Class属性和移除删除Class属性
    直接上代码functiongo(a){if(a=='shifu'){//移除属性varshop=document.getElementsByClassName("shop")[0];shop.classList.remove("ns-border-color");//增加属性......
  • mybatisplus3.5.3版本,数据权限如何使用
    1、添加依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.......
  • 正则表达式 and re 模块
    元字符:^  $  []  {}  ()  .  \  ?  *  +^只能放在正则表达式的前方,且也只能从目标字符串的首部开始匹配$只能放在正则表达式的后方,且也只能从目标字符串的尾部开始匹配[]字符集{}匹配字符的长度范围,为一个闭区间()其中字符串代表一个整体......
  • 3-ocserv基于pam_access模块进行用户访问控制
    ocserv基于pam_access模块进行用户访问控制一、配置ocserv的PAM文件打开/etc/pam.d/ocservvim/etc/pam.d/ocserv在默认/etc/pam.d/ocserv配置中的@includecommon-auth下方插入pam_access.so模块进行用户访问控制:authrequiredpam_access.so请确保这行在auth......
  • 远程服务器ssh和本地终端断开了怎么办,如何恢复?
    很遗憾,如果只是单纯的在本地终端执行,那断开了就是断开啦,重新开始吧孩纸~_~那就没有办法解决了吗?!!迟早都是要断开的事,工程量一大不就死定了!! 很好,其实真的有办法可以解决这个问题,而且很简单:1.首先,ssh远程连接到服务器2.命令行输入tmux,即开启一个会话,这个会话的作用就是,只要你不手......