如何删除Git子模块?
顺便说一下,有什么理由不能简单地做到
git submodule rm whatever
?
答案 0 :(得分:3281)
通过页面 Git Submodule Tutorial :
要删除子模块,您需要:
.gitmodules
文件中删除相关部分。.gitmodules
更改git add .gitmodules
.git/config
删除相关部分。git rm --cached path_to_submodule
(无尾随斜杠)。rm -rf .git/modules/path_to_submodule
git commit -m "Removed submodule <name>"
rm -rf path_to_submodule
答案 1 :(得分:1962)
一旦你表达了对“
submodule init
”子模块的兴趣,就没有瓷器方式说“我不再对这个子模块感兴趣了”。
“submodule deinit
”就是这样做的方法。
删除过程也使用git rm
(自2013年10月git1.8.5起)。
三步删除过程将是:
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)
# or, if you want to leave it in your working tree and have done step 0
3. git rm --cached a/submodule
3bis mv a/submodule_tmp a/submodule
rm -rf
:我在Daniel Schroeder的answer中提到了这一点,并在Eonil中由the comments进行了总结:
这使
.git/modules/<path-to-submodule>/
保持不变 因此,如果您曾使用此方法删除子模块并再次重新添加它们,则无法实现,因为存储库已损坏。
git rm
:见commit 95c16418:
目前在子模块上使用“
git rm
”会从超级项目和索引的gitlink中删除子模块的工作树。
但.gitmodules
中的子模块部分保持不变,这是现在删除的子模块的剩余部分,可能会激怒用户(与.git/config
中的设置相反,这必须保留用户显示的提醒)对此子模块感兴趣,以便稍后在签出旧提交时重新填充。)让“
git rm
”帮助用户不仅可以从工作树中删除子模块,还可以从submodule.<submodule name>
文件中删除“.gitmodules
”部分并暂存两者。 / p>
git submodule deinit
:它来自this patch:
使用“
git submodule init
”,用户可以告诉git他们关心一个或多个子模块,并希望在下次调用“git submodule update
”时填充它。
但是目前没有简单的方法可以告诉git他们不再关心子模块并且想要摆脱本地工作树(除非用户对子模块内部有很多了解并删除了“submodule.$name.url
”设置从.git/config
和工作树本身。)通过提供“
deinit
”命令来帮助这些用户 对于给定的内容,此会从submodule.<name>
中移除整个.git/config
部分 子模块(或者,如果给出“.
”,那么已经初始化的所有那些)。
如果当前工作树包含修改除非被强制,则失败 抱怨在命令行上给出的子模块时,在.git/config
中找不到url设置,但仍然不会失败。
如果(de)初始化步骤(.git/config
和.git/modules/xxx
)
从git1.8.5开始,git rm
需要 关注:
add
'步骤,记录.gitmodules
文件中子模块的网址:需要为您删除。git rm --cached path_to_submodule
(没有尾随斜线)如果您忘记了最后一步,并尝试将子模块添加为常规目录,则会收到如下错误消息:
git add mysubmodule/file.txt
Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'
注意:自Git 2.17(2018年第二季度)以来,git submodule deinit不再是shell脚本。
这是对C函数的调用。
commit 2e61273见commit 1342476,Prathamesh Chavan (pratham-pc
)(2018年1月14日)
(由Junio C Hamano -- gitster
--合并于commit ead8dbe,2018年2月13日)
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit \
${GIT_QUIET:+--quiet} \
${prefix:+--prefix "$prefix"} \
${force:+--force} \
${deinit_all:+--all} "$@"
答案 2 :(得分:406)
请注意。从git 1.8.5.2开始,将执行两个命令:
git rm the_submodule
rm -rf .git/modules/the_submodule
正如@Mark Cheverton的回答正确指出的那样,如果第二行没有被使用,即使你现在删除了子模块,剩余的.git / modules / the_submodule文件夹也会阻止相同的子模块从被添加回来或将来更换。另外,正如@VonC所提到的,git rm
将完成子模块的大部分工作。
- 更新(2017年5月7日) -
为了澄清,the_submodule
是项目内子模块的相对路径。例如,如果子模块位于子目录subdir/my_submodule
内,则为subdir
。
正如在评论和other answers中正确指出的那样,这两个命令(尽管在功能上足以删除子模块)确实在[submodule "the_submodule"]
的{{1}}部分留下了痕迹(如2017年7月),可以使用第三个命令删除:
.git/config
答案 3 :(得分:363)
这个问题的大多数答案都是过时的,不完整的或不必要的复杂。
使用git 1.7.8或更新版本克隆的子模块将在您的本地仓库中留下最多四个自身痕迹。删除这四条轨迹的过程由以下三个命令给出:
# Remove the submodule entry from .git/config
git submodule deinit -f path/to/submodule
# Remove the submodule directory from the superproject's .git/modules directory
rm -rf .git/modules/path/to/submodule
# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f path/to/submodule
答案 4 :(得分:192)
简单步骤
git config -f .git/config --remove-section submodule.$submodulename
git config -f .gitmodules --remove-section submodule.$submodulename
git rm --cached $submodulepath
rm -rf $submodulepath
rm -rf .git/modules/$submodulename
请注意: $submodulepath
不包含前导或尾部斜杠。
<强>背景强>
执行git submodule add
时,它只会将其添加到.gitmodules
,但是
完成git submodule init
后,它会添加到.git/config
。
因此,如果您希望删除模块,但能够快速恢复它, 然后这样做:
git rm --cached $submodulepath
git config -f .git/config --remove-section submodule.$submodulepath
首先git rebase HEAD
和git commit
是个好主意
最后,如果你把它放在一个脚本中。
答案 5 :(得分:81)
除了建议之外,我还必须rm -Rf .git/modules/path/to/submodule
能够添加一个具有相同名称的新子模块(在我的情况下,我用原始替换叉子)
答案 6 :(得分:52)
删除使用以下内容添加的子模块:
git submodule add blah@blah.com:repos/blah.git lib/blah
执行命令
git rm lib/blah
就是这样。
对于旧版本的git(大约1.8.5),请使用:
git submodule deinit lib/blah
git rm lib/blah
git config -f .gitmodules --remove-section submodule.lib/blah
答案 7 :(得分:48)
您必须删除.gitmodules
和.git/config
中的条目,并从历史记录中删除该模块的目录:
git rm --cached path/to/submodule
如果你在git的邮件列表上写,可能有人会为你做一个shell脚本。
答案 8 :(得分:41)
您可以使用别名来自动化其他人提供的解决方案:
[alias]
rms = "!f(){ git rm --cached \"$1\";rm -r \"$1\";git config -f .gitmodules --remove-section \"submodule.$1\";git config -f .git/config --remove-section \"submodule.$1\";git add .gitmodules; }; f"
将它放在您的git配置中,然后您可以执行:git rms path/to/submodule
答案 9 :(得分:40)
总结一下,这就是你应该做的:
设置path_to_submodule
var(无尾部斜杠):
path_to_submodule=path/to/submodule
从.gitmodules文件中删除相关行:
git config -f .gitmodules --remove-section submodule.$path_to_submodule
从.git / config
中删除相关部分 git config -f .git/config --remove-section submodule.$path_to_submodule
仅从索引中取消并删除$ path_to_submodule(以防止丢失信息)
git rm --cached $path_to_submodule
跟踪对.gitmodules进行的更改
git add .gitmodules
提交超级项目
git commit -m "Remove submodule submodule_name"
删除现在未跟踪的子模块文件
rm -rf $path_to_submodule
rm -rf .git/modules/$path_to_submodule
答案 10 :(得分:38)
如果由于您添加,提交并推送了一个已经是Git存储库(包含.git
)的文件夹而意外添加了 ,则您将没有{{1}要编辑的文件,或.gitmodules
中的任何内容。 In this case all you need是:
.git/config
FWIW,在执行git rm --cached subfolder
git add subfolder
git commit -m "Enter message here"
git push
之前,我还删除了.git
文件夹。
答案 11 :(得分:24)
我发现deinit
对我有用:
git submodule deinit <submodule-name>
git rm <submodule-name>
来自git docs:
<强> DEINIT 强>
取消注册给定的子模块,即删除整个
submodule.$name
来自.git / config的部分及其工作树。
答案 12 :(得分:21)
在对此网站上的所有不同答案进行试验后,我最终得到了这个解决方案:
#!/bin/sh
path="$1"
if [ ! -f "$path/.git" ]; then
echo "$path is no valid git submodule"
exit 1
fi
git submodule deinit -f $path &&
git rm --cached $path &&
rm -rf .git/modules/$path &&
rm -rf $path &&
git reset HEAD .gitmodules &&
git config -f .gitmodules --remove-section submodule.$path
这将恢复与添加子模块之前完全相同的状态。您可以立即再次添加子模块,这在大多数答案中是不可能的。
git submodule add $giturl test
aboveScript test
这样可以让您在没有更改提交的情况下进行干净的结帐。
用以下方法测试:
$ git --version
git version 1.9.3 (Apple Git-50)
答案 13 :(得分:17)
我目前正在做的2012年12月(结合大部分答案):
oldPath="vendor/example"
git config -f .git/config --remove-section "submodule.${oldPath}"
git config -f .gitmodules --remove-section "submodule.${oldPath}"
git rm --cached "${oldPath}"
rm -rf "${oldPath}" ## remove src (optional)
rm -rf ".git/modules/${oldPath}" ## cleanup gitdir (optional housekeeping)
git add .gitmodules
git commit -m "Removed ${oldPath}"
答案 14 :(得分:14)
这是我做的:
1。)从.gitmodules文件中删除相关部分。您可以使用以下命令:
git config -f .gitmodules --remove-section "submodule.submodule_name"
2。)暂停.gitmodules
更改
git add .gitmodules
3。)从.git/config
删除相关部分。您可以使用以下命令:
git submodule deinit -f "submodule_name"
4.。)删除gitlink(没有尾部斜杠):
git rm --cached path_to_submodule
5.)清理.git/modules
:
rm -rf .git/modules/path_to_submodule
6。)提交:
git commit -m "Removed submodule <name>"
7.删除现在未跟踪的子模块文件
rm -rf path_to_submodule
答案 15 :(得分:13)
我最近发现了一个git项目,其中包含许多有用的git相关命令:https://github.com/visionmedia/git-extras
安装并输入:
git-delete-submodule submodule
然后事情就完成了。子模块目录将从您的仓库中删除,并且仍然存在于您的文件系统中。然后,您可以提交更改,如:git commit -am "Remove the submodule"
。
答案 16 :(得分:10)
我不得不将John Douthat的步骤更进一步,cd
进入子模块的目录,然后删除Git存储库:
cd submodule
rm -fr .git
然后我可以将这些文件作为父Git存储库的一部分提交,而不需要对子模块的旧引用。
答案 17 :(得分:8)
以下是我认为必要或有用的4个步骤(首先是重要的步骤):
git rm -f the_submodule
rm -rf .git/modules/the_submodule
git config -f .git/config --remove-section submodule.the_submodule
git commit -m "..."
理论上,第1步中的git rm
应该处理它。希望OP问题的第二部分可以在某一天得到积极回答(这可以在一个命令中完成)。
但截至2017年7月,第2步对于删除.git/modules/
中的数据是必要的,否则,您不能将来再添加子模块。
由于所有git submodule
命令似乎都有效,因此您可以通过tinlyx's answer注意到git 1.8.5+的上述两个步骤,因为所有the_submodule
命令似乎都有效。
第3步删除文件.git/config
中git submodule deinit
的部分。这应该是为了完整性。 (该条目可能会导致较旧的git版本出现问题,但我没有测试版本。)
为此,大多数答案建议使用git config -f .git/config --remove-section
。我发现使用git deinit
时更明确,更容易混淆。根据{{3}},git commit
:
取消注册给定的子模块...如果你真的想删除一个 来自存储库的子模块和使用git-rm [1]的提交 的不是强>
最后但并非最不重要的一点是,如果你没有git submodule summary
,那么在执行fatal: Not a git repository: 'the_submodule/.git'
* the_submodule 73f0d1d...0000000:
时(从git 2.7开始),你/可能会收到错误:
{{1}}
无论您是执行步骤2还是3,都可以。
答案 18 :(得分:8)
使用 git v2.7.4 简单的 3 个步骤就可以了。
git submodule deinit -f -- a/submodule
git rm -f a/submodule
git commit
答案 19 :(得分:7)
我刚刚找到.submodule(忘记确切名称)隐藏文件,它有一个列表......你可以单独删除它们。我只有一个,所以我删除了它。很简单,但它可能会搞砸Git,因为我不知道是否有任何附加到子模块的内容。到目前为止似乎还不错,除了libetpan通常的升级问题,但是(希望)不相关。
注意到没有人发布手动删除,所以添加了
答案 20 :(得分:7)
project dir: ~/foo_project/
submodule: ~/foo_project/lib/asubmodule
- - - - - - - - - - - - - - - - - - - - - - - - -
run:
1. cd ~/foo_project
2. git rm lib/asubmodule &&
rm .git/modules/lib/asubmodule &&
git submodule lib/asubmodule deinit --recursive --force
答案 21 :(得分:6)
那很简单:
$factory->defineAs
删除该部分.gitmodules
git add .gitmodules
git submodule deinit <path to submodule>
您将必须手动删除项目中的模块文件。
答案 22 :(得分:4)
如果您刚刚添加了子模块,例如,您只是添加了错误的子模块,或者您将其添加到了错误的位置,只需执行git stash
然后删除该文件夹即可。这假设添加子模块是您在最近的仓库中做的唯一事情。
答案 23 :(得分:4)
总而言之,这是您应该做的:
设置path_to_submodule var(无斜杠):
path_to_submodule=path/to/submodule
从.gitmodules文件中删除相关行:
git config -f .gitmodules --remove-section submodule.$path_to_submodule
从.git / config删除相关部分
git config -f .git/config --remove-section submodule.$path_to_submodule
仅转储并删除索引中的$ path_to_submodule(以防止丢失信息)
git rm --cached $path_to_submodule
跟踪对.gitmodules所做的更改
git add .gitmodules
提交超级项目
git commit -m "Remove submodule submodule_name"
删除现在未跟踪的子模块文件
rm -rf $path_to_submodule
rm -rf .git/modules/$path_to_submodule
答案 24 :(得分:2)
为了读者的利益,本文试图对它进行总结,并给出逐步指导,说明如果事情无法按预期进行,该如何做。以下是git
版本2.17
及更高版本中经过测试且安全的方式,摆脱了子模块:
submodule="path/to/sub" # no trailing slash!
git submodule deinit -- "$submodule"
git rm -- "$submodule"
2.20.1
和Ubuntu 18.04 2.17.1
的测试。"$submodule"
只是为了强调名称的位置,并且必须注意空格等"$submodule"
。 (我不是Windows)警告!
切勿自己触摸
.git
目录的内部!在.git
内进行编辑会进入阴暗面。不惜一切代价远离!是的,您可以为此归咎于
git
,因为过去git
中缺少许多方便的东西。就像再次删除子模块的正确方法一样。我认为
git submodule
的文档中有一个非常危险的部分。 建议您自己删除$GIT_DIR/modules/<name>/
。 在我的理解中,这不仅是错误的,而且是非常危险的,并且将来会引起重大的头痛!参见下文。
请注意
git module deinit
是与之直接成反比
git module init
但是
git submodule deinit -- module
git rm -- module
也与之相反
git submodule add -- URL module
git submodule update --init --recursive -- module
因为某些命令基本上需要做的不仅仅是一件事情:
git submodule deinit -- module
.git/config
git rm
.gitmodules
git submodule add
.git/modules/NAME/
git submodule init
,所以更新.git/config
git submodule update
,因此,以非递归方式检出模块.gitmodules
git submodule update --init --recursive -- module
这不能完全对称,因为使其严格对称没有太大意义。根本不需要两个以上的命令。另外,“拉入数据”是隐式的,因为您需要它,但是不会删除缓存的信息,因为根本不需要这样做,并且可能会擦除珍贵的数据。
这确实使新手感到困惑,但基本上是一件好事:git
只是做了显而易见的事情并且做到了正确,甚至没有尝试做更多的事情。 git
是一种工具,必须做得可靠,而不仅仅是另一个“ Eierlegende Wollmilchsau”(“ Eierlegende Wollmilchsau”对我来说是“瑞士军刀的某种邪恶版本”。)
所以我理解人们的抱怨,说:“为什么不git
对我来说不明显”。这是因为这里的“明显”取决于观点。在每种情况下的可靠性都更为重要。因此,在所有可能的技术情况下,通常对您而言显而易见的事情并不是正确的选择。请记住:AFAICS git
遵循技术路线,而不是社交路线。 (因此,聪明的名字是:git)
以上命令可能由于以下原因而失败:
git
年纪太大了。然后使用较新的git
。 (请参见下面的操作方法。)git clean
的角度来看,您的子模块不干净。然后,首先使用该命令清理您的子模块。 (请参见下文。)git
不支持。然后,您处于阴暗面,事情变得丑陋而复杂。 (也许使用另一台机器可以修复它。)git
超级用户。)可能的修复方法如下。
git
如果您的计算机过旧,则submodule deinit
中没有git
。如果您不想(或不能)更新git
,则只需使用另一台机器上的git
来更新! git
是要完全分发的,因此您可以使用另一个git
来完成工作:
workhorse:~/path/to/worktree$ git status --porcelain
不得输出任何内容!如果是这样,请先清理东西!workhorse:~/path/to/worktree$ ssh account@othermachine
othermachine:~$ git clone --recursive me@workhorse path/to/worktree/.git TMPWORK && cd TMPWORK
othermachine:~/TMPWORK$ git commit . -m . && exit
workhorse:~/path/to/worktree$ git fetch account@othermachine:TMPWORK/.git
workhorse:~/path/to/worktree$ git merge --ff-only FETCH_HEAD
。如果这不起作用,请使用git reset --soft FETCH_HEAD
git status
再次干净为止。之所以能够这样做,是因为有了第一步,您之前已经将它清理干净了。此othermachine
可以是某些VM,也可以是Windows下的某些Ubuntu WSL。甚至是chroot
(但我假设您不是root用户,因为如果您是root
,则应该更容易将其更新为较新的git
。)
请注意,如果您不能ssh
进入,则有许多方法可以传输git
存储库。您可以将工作树复制到某些USB记忆棒(包括.git
目录)中,然后从记忆棒中克隆。克隆副本,只是为了以一种干净的方式再次获取内容。如果您的子模块不能直接从其他计算机访问,则这可能是PITA。但这也有解决方案:
git config --add url.NEWURLPREFIX.insteadOf ORIGINALURLPREFIX
您可以使用此乘法,并将其保存到$HOME/.gitconfig
中。像
git config --add 'url./mnt/usb/repo/.insteadof' https://github.com/
重写类似的URL
https://github.com/XXX/YYY.git
进入
/mnt/usb/repo/XXX/YYY.git
如果您开始习惯这种强大的git
功能,这很容易。
手动清洁是个好习惯,因为这样您可能会发现一些忘记的事情。
git status
和git clean -ixfd
是你的朋友rm
和deinit
的选项。如果您是专业人士,则-f
的选项(例如git
)会很好。但是当您来到这里时,您可能在submodule
领域并不那么有经验。因此,总比后悔要安全。示例:
$ git status --porcelain
M two
$ git submodule deinit two
error: the following file has local modifications:
two
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'two' contains local modifications; use '-f' to discard them
$ cd two
$ git submodule deinit --all
error: the following file has local modifications:
md5chk
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'md5chk' contains local modifications; use '-f' to discard them
$ cd md5chk
$ git submodule deinit --all
error: the following file has local modifications:
tino
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'tino' contains local modifications; use '-f' to discard them
$ cd tino
$ git status --porcelain
?? NEW
$ git clean -i -f -d
Would remove the following item:
NEW
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers 4: ask each
5: quit 6: help
What now> 1
Removing NEW
$ cd ../../..
$ git status --porcelain
$ git submodule deinit two
Cleared directory 'two'
Submodule 'someunusedname' (https://github.com/hilbix/src.git) unregistered for path 'two'
您看到,-f
上不需要submodule deinit
。如果情况是干净的,则为git clean
。另请注意,不需要git clean -x
。 这意味着git submodule deinit
无条件删除将被忽略的未跟踪文件。这通常是您想要的,但请不要忘记。有时,被忽略的文件可能很宝贵,例如缓存的数据可能需要数小时至数天才能重新计算。
$GIT_DIR/modules/<name>/
?人们可能想删除缓存的存储库,因为他们害怕以后会遇到问题。的确如此,但是遇到“问题”才是解决问题的正确方法!因为修复很容易,而且操作正确,您以后就可以过上幸福的生活。与您自己删除数据相比,这避免了更多麻烦的事情。
示例:
mkdir tmptest &&
cd tmptest &&
git init &&
git submodule add https://github.com/hilbix/empty.git two &&
git commit -m . &&
git submodule deinit two &&
git rm two &&
git commit -m . &&
git submodule add https://github.com/hilbix/src.git two
最后一行输出以下错误:
A git directory for 'two' is found locally with remote(s):
origin https://github.com/hilbix/empty.git
If you want to reuse this local git directory instead of cloning again from
https://github.com/hilbix/src.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
为什么会出现此错误?因为.git/modules/two/
以前是从https://github.com/hilbix/empty.git填充的,现在应该从其他地方,即https://github.com/hilbix/src.git重新填充。如果您从https://github.com/hilbix/empty.git
现在该怎么办?好吧,完全按照指示执行!使用--name someunusedname
git submodule add --name someunusedname https://github.com/hilbix/src.git two
.gitmodules
然后看起来像
[submodule "someunusedname"]
path = two
url = https://github.com/hilbix/src.git
ls -1p .git/modules/
给出
someunusedname/
two/
通过这种方式,由于two/
具有两个不同的(并且可能不兼容的)上游存储库,以后您可以切换分支/向前和向后提交,并且永远不会再遇到麻烦。最好的是:您也将两者都保留在本地缓存。
git
为止。)但是,如果您删除了缓存的目录,则两个不同的检出都将相互绊倒,因为您将不会使用--name
选项,对吗?因此,每次执行结帐操作时,您可能不得不一次又一次地删除.git/modules/<module>/
目录。这非常麻烦,并且很难使用git bisect
之类的东西。
因此,将这个模块目录保留为占位符是非常技术性的原因。建议删除.git/modules/
以下内容的人可能并不了解,或者忘记告诉您,如果git bisect
之类的强大功能如果遇到子模块不兼容的情况,将几乎无法使用。
上面显示了另一个原因。查看ls
。您在那看到什么?
好吧,模块two/
的第二个变体不在.git/modules/two/
下,而是在.git/modules/someunusedname/
下!因此,git rm $module; rm -f .git/module/$module
之类的事情是完全错误的!您必须咨询module/.git
或.gitmodules
才能找到要删除的正确内容!
因此,不仅大多数其他答案都陷入了这一危险陷阱,even very popular git
extensions had this bug(it's now fixed there)!因此,如果您不完全了解自己在做什么,最好将其放在.git/
目录下!
从哲学的角度来看,抹除历史总是错误的! Except for quantum mechanics和往常一样,但这是完全不同的。
仅供参考,您可能会猜到:hilbix是我的GitHub帐户。
答案 25 :(得分:1)
我创建了一个bash脚本来简化删除过程。它还检查未保存的回购中是否有更改,并要求确认。
已经在os x
上进行了测试,很想知道它是否也可以在常见的Linux发行版上工作:
https://gist.github.com/fabifrank/cdc7e67fd194333760b060835ac0172f
答案 26 :(得分:1)
在git 2.17及更高版本中,它只是:
@FXML
void textDayWeek(ActionEvent event) {
String dateBarras = txtDate.getText();
String[] split = dateBarras.split("/");
try {
data = new Data(Integer.parseInt(split[0]), Integer.parseInt(split[1]), Integer.parseInt(split[2]));
} catch (MonthInvalidException me) {
if (Integer.parseInt(split[1]) > 12 || Integer.parseInt(split[1]) < 1)
throw Alert alert = new Alert(Alert.AlertType.ERROR);
alerta.setTitle("error");
alert.setHeaderText("ERROR");
alert.setContentText(me);
}
}
答案 27 :(得分:0)
git rm <submodule path> && git commit
来删除子模块。可以使用git revert
撤消该操作。
.gitmodules
文件中的部分。 $GIT_DIR/modules/<name>/
。来源:git help submodules
答案 28 :(得分:0)
要删除git
子模块,需要执行以下4个步骤。
.gitmodules
文件中的相应条目。条目可能如下所述[submodule "path_to_submodule"]
path = path_to_submodule
url = url_path_to_submodule
git add .gitmodules
git rm --cached <path_to_submodule>
。git commit -m "Removed submodule xxx"
并推送。下面还需要另外2个步骤才能完全清除本地克隆副本中的子模块。
.git/config
文件中的相应条目。条目可能如下所述[submodule "path_to_submodule"]
url = url_path_to_submodule
rm -rf .git/modules/path_to_submodule
这些第5和第6步不会创建任何需要提交的更改。
答案 29 :(得分:0)
如果需要使用bash脚本在一行命令中执行以下操作:
$ cd /path/to/your/repo && /bin/bash $HOME/remove_submodule.sh /path/to/the/submodule
在名为$HOME
的{{1}}目录中创建bash脚本文件:
remove_submodule.sh
答案 30 :(得分:0)
在最新的git中,只需执行4个操作即可删除git子模块。
.gitmodules
中的相应条目git add .gitmodules
git rm --cached <path_to_submodule>
git commit -m "Removed submodule xxx"
答案 31 :(得分:0)
这对我有用。上面的答案在终端中显示了这一点,没有其他事情发生
Unhashable error