如何删除Git子模块?
顺便说一句,有什么理由我不能干脆做到
git submodule rm whatever
吗?
是否有一些简单的方法来重命名git子模块目录(除了完成删除它并重新添加新目标名称的整个动作 ).
虽然我们在这,但为什么我不能在父目录中执行以下操作: git mv old-submodule-name new-submodule-name
这是我.gitmodules
文件内容的一部分:
[submodule "src/static_management"]
path = src/static_management
url = git://github.com/eykd/django-static-management.git
[submodule "external/pyfacebook"]
path = external/pyfacebook
url = http://github.com/sciyoshi/pyfacebook.git
Run Code Online (Sandbox Code Playgroud)
但是,.git/config
只包含第一个:
[submodule "src/static_management"]
url = git://github.com/eykd/django-static-management.git
Run Code Online (Sandbox Code Playgroud)
第二个子模块(external/pyfacebook
)由功能分支中的另一个开发人员添加.我现在继承了开发,并检查了功能分支.但是,Git不会为我拉这个子模块.我试过了:
git submodule init
git submodule update
git submodule update --init
git submodule sync
.git/config
并运行git submodule init
.它只复制先前存在的子模块并忽略新的子模块..git/config
手动输入新的子模块定义并运行git submodule update
.只有以前存在的子模块才能更新.在各种组合中,但是git根本不会.git/config
根据新内容进行更新.gitmodules
,也不会创建external/pyfacebook
文件夹并拉出子模块的内容.
我错过了什么?手动干预(手动添加子模块条目.git/config
)是否真正需要,为什么?
编辑:手动干预不起作用.手动添加新的子模块条目.git/config
不会做任何事情.新的子模块被忽略.
最初我有以下(简化)回购结构:
MyRepo
external1/MySub (git submodule)
.gitsubmodules
Run Code Online (Sandbox Code Playgroud)
哪里
$ cat .gitsubmodules
[submodule "external1/MySub"]
path = external1/MySub
url = user@repo:/remoterepo/externals/MySub.git
Run Code Online (Sandbox Code Playgroud)
然后我想将MySubmodule移动到同一个git存储库中的另一个目录,例如external2,所以结构如下:
MyRepo
external2/MySub (git submodule)
.gitsubmodules
Run Code Online (Sandbox Code Playgroud)
我做了什么,并且已经足够了,我只是将(通过操作系统mv
)external1/MySub目录移动到external2/MySub并将.gitsubmodules文件编辑为:
$ cat .gitsubmodules
[submodule "external2/MySub"]
path = external2/MySub
url = user@repo:/remoterepo/externals/MySub.git
Run Code Online (Sandbox Code Playgroud)
在此更改后,我收到以下错误:
$ git status
fatal: Could not chdir to '../../../../../repo/external/MySub': No such file or directory
fatal: 'git status --porcelain' failed in submodule repo/external2/MySub
Run Code Online (Sandbox Code Playgroud)
我错过了什么?这种搬迁需要做出任何其他改变吗?
(我在Windows 8.1上使用git版本1.8.3rc3)
我想添加一个不同名称的git子模块,如:
git submodule add --name foo git@bitbucket.org:ironsand/cookbook-foo.git
Run Code Online (Sandbox Code Playgroud)
我想创建一个名为的git子模块目录foo
,但是使用名称创建存储库cookbook-foo
.
我很可能做错了什么,但我不知道出了什么问题.
如何更改git子模块目录的名称?
伙计们,我只是使用子模块来组织一些Git repos,这里是地址: repos
我想将所有子模块移动到一个名为repos的新目录中,例如,jquery - > repos/jquery.
我更改.gitmodules文件,但似乎不起作用.我该怎么办?
我有以下git结构
- git-repo a
-- subdirectory 2015
--- git-submodule b
-- git-submodule c
--- git-submodule d
Run Code Online (Sandbox Code Playgroud)
我想将git子模块c移动到文件夹2015.我知道"脏方法"这样做(涉及修改.git/config并更改.git/modules文件中的几个文件中的gitdir)
我最近读到git mv应该能够做到这一点,即运行
git mv c 2015/
Run Code Online (Sandbox Code Playgroud)
这适用于没有嵌套子模块的存储库(在我的例子中为d).但是,当我在我的目录上运行此命令时,我收到的错误就像
fatal: Not a git repository: d/../../.git/modules/c/modules/d
fatal: 'git status --porcelain' failed in submodule 2015/c
Run Code Online (Sandbox Code Playgroud)
(注意,执行上述移动后,git状态会出现此错误)
是否有人知道一个干净的方法来执行此移动(即,不涉及手动更改.git/modules文件中的路径)?
编辑:(6/10/2015)
我目前最好的解决方案是不涉及对任何git配置文件的修改(首先要确保对d的所有更改都已提交并推送到某处)
rm c/d -rf
git mv c 2015
cd 2015/c
git submodule update
Run Code Online (Sandbox Code Playgroud)
编辑:(8/10/2015)
一个更少侵入性的解决方法
git mv c 2015
rm 2015/c/d/.git
cd 2015/c
git submodule update
Run Code Online (Sandbox Code Playgroud)
编辑:(21/9/2018)
自从git版本2.19.这已得到修复,并且git mv
表现如预期.