我想在我的Git超级项目中更改Git子模块的目录名.
假设我的.gitmodules文件中有以下条目:
[submodule ".emacs.d/vimpulse"]
path = .emacs.d/vimpulse
url = git://gitorious.org/vimpulse/vimpulse.git
Run Code Online (Sandbox Code Playgroud)
我必须键入什么来移动.emacs.d/vimpulse目录.emacs.d/vendor/vimpulse而不首先删除它(在这里和这里解释
),然后重新添加它.
Git真的需要子模块标签中的整个路径
[submodule ".emacs.d/vimpulse"]
Run Code Online (Sandbox Code Playgroud)
或者是否也可以只存储子项目的名称?
[submodule "vimpulse"]
Run Code Online (Sandbox Code Playgroud) 我有一个项目,用于在路径中包含子模块mysubmodule.我从源代码(1.8.3-rc2)安装了最新的Git并运行git submodule deinit mysubmodule.然后我删除了.gitmodules文件并提交了更改.我还.git从mysubmodule文件夹中删除了该目录.
我现在想mysubmodule直接将文件提交到我的仓库,但是git说没有变化.如果我输入git add mysubmodule它什么都不做.如果我输入git add mysubmodule/file.txt它说fatal: Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'
我还发现,如果您查看一个新版本的repo,它会创建一个mysubmodule目录,尽管没有.gitmodules文件.跑步git submodule init会给你一个No submodule mapping found in .gitmodules for path 'mysubmodule'错误.
我该如何解决?
我有以下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表现如预期.
我得到了git子模块(一厢情愿的想法?),我想出更具体的问题,这是一个好兆头......
我试图找到超级项目引用的子模块的哪个版本,在.gitmodules和中.git/config,但是没有提到......
场景是我正在更改其根位置(从中导入它们)的子模块,然后将它们拉入"子模块化"的位置......
除了从超级项目中提交以将这些更改合并到超级项目仓库之外,我是否还需要git update注册新的拉入式子模块提交?
基本上问题是:
git submodule update只有当我第一次克隆超级项目时,或者每次拉动子模块(来自它自己的回购)后,我才需要" "吗?
谢谢
https://github.com/Uni-/shBrushesCollection
我打开了一个GitHub repo并在GitHub web源编辑器中编写了.gitmodules.当我克隆rpo时,我发现.gitmodules中的子模块没有被初始化.
我想我几乎尝试了所有命令,包括update,init,update --init等等.有没有办法使用当前的.gitmodules文件,而不是子模块添加?