Dav*_*Eyk 98 git git-submodules
这是我.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 initgit submodule updategit submodule update --initgit submodule sync.git/config并运行git submodule init.它只复制先前存在的子模块并忽略新的子模块..git/config手动输入新的子模块定义并运行git submodule update.只有以前存在的子模块才能更新.在各种组合中,但是git根本不会.git/config根据新内容进行更新.gitmodules,也不会创建external/pyfacebook文件夹并拉出子模块的内容.
我错过了什么?手动干预(手动添加子模块条目.git/config)是否真正需要,为什么?
编辑:手动干预不起作用.手动添加新的子模块条目.git/config不会做任何事情.新的子模块被忽略.
Dav*_*ler 80
我有同样的问题 - 事实证明.gitmodules文件已提交,但实际的子模块提交(即子模块的提交ID的记录)不是.
手动添加它似乎可以解决问题 - 例如:
git submodule add http://github.com/sciyoshi/pyfacebook.git external/pyfacebook
Run Code Online (Sandbox Code Playgroud)
(即使没有从.git/config或.gitmodules中删除任何内容.)
然后提交它以正确记录ID.
为这个工作答案添加一些进一步的评论:如果git子模块init或git子模块更新不起作用,那么如上所述git submodule add url应该可以解决问题.人们可以通过交叉检查
git config --list
Run Code Online (Sandbox Code Playgroud)
并且应该获取要在git config --list命令的结果中提取的子模块的条目.如果在配置结果中有子模块的条目,那么现在通常的git子模块更新--init应该拉你的子模块.要测试此步骤,您可以手动重命名子模块,然后更新子模块.
mv yourmodulename yourmodulename-temp
git submodule update --init
Run Code Online (Sandbox Code Playgroud)
要查明子模块中是否有局部更改,可以通过git status -u(如果要查看子模块中的更改)或git status --ignore-submodules(如果您不希望看到更改)看到它子模块).
pal*_*lik 52
git版本2.7.4.此命令更新本地代码
git submodule update --init --force --remote
Qui*_*fox 33
你最近升级到git版本1.7.0.4吗?我做了,现在有类似的问题......
编辑:我解决了我的问题,但绝对不知道问题出在哪里.我手动从.git/config和.gitmodules中删除了子模块条目,并使用ususal步骤重新添加了我的子模块(git submodule add etc ...)... Worksforme但是没有为该线程添加任何值.
Ale*_*yuv 15
有同样的问题,当git忽略init和update命令,并没有做任何事情.
怎么修
如果符合要求,它将起作用.否则,将执行所有命令而不发送任何消息和结果.
如果你做了所有这些,但它仍然不起作用:
git submodule add git@... path/togit submodule initgit submodule update.gitmodules以及您的模块文件夹(注意,文件夹的内容不会提交).git/config还没有任何子模块git submodule init- 您将看到模块注册的消息git submodule update - 将获取模块.git/config你会发现注册的子模块DZe*_*Zet 11
这意味着子模块 Haven\xe2\x80\x99 未正确设置,并且git submodule add必须执行命令。子模块如何工作的详细解释:
如果子模块未正确添加:
\n如果未正确提交,并且子模块及其相应的文件夹尚未记录在索引中,则首先需要通过单独添加 .gitmodules 文件中的每个子模块,git submodule add然后才能继续。
有什么git submodule add作用?
当带有子模块的存储库已正确设置并且有人已执行命令时git submodule add,该命令已完成以下操作:
当您克隆超级项目时,第 3点和第 6 点相关,第6 点指示 a 是否git submodule add已正确执行并已提交。\n您可以通过查看子模块应驻留的文件夹是否已存在且为空来检查第6点(注意:这不需要 .keep 或 .gitignore 机制就位,因为这是 Git 机制的一部分。)克隆超级项目后,您还可以执行 agit submodule以查看需要哪些子模块。
然后您可以继续执行以下操作:
\ngit submodule
将显示树中存在的子模块及其相应的提交哈希代码,可以作为初始检查以查看需要哪些子模块
\ngit submodule init
将子模块参数从 repo\xe2\x80\x99s .gitmodules 文件复制到您的私有 .git/config 文件(点4)
\ngit submodule update
将子模块克隆到由超级项目确定的提交,并在超级项目的 .git/modules/ 文件夹下创建 submodules\' .git 文件夹(点2和5)
\ngit submodule update --remote
与 update 相同,但将子模块设置为远程存储库可用的分支上的最新提交,类似于随后进入每个 submodule\xe2\x80\x99s 文件夹并执行git pull
或 --->: \ngit submodule update --init --remote
这是以上所有内容的总和。
\n或者,当存储库设置正确时,您还可以使用git clone该--recursive标志来包含子模块,并自动对其执行初始化和更新。
答案中似乎(也)有很多混乱。
git submodule init是不打算神奇生成的东西的.git /配置(从.gitmodules)。它的目的是在克隆父项目后在一个完全空的子目录中设置一些东西,或者拉一个添加以前不存在的子模块的提交。
换句话说,您git clone通过git submodule update --init --recursive.
您没有跟git submodule add ...在git submodule init(或git submodule update --init)后面,这不应该起作用。事实上,如果一切正常,添加将已经更新适当的 .git/config。
编辑
如果以前不存在的 git 子模块是由其他人添加的,并且您执行了git pull该提交,则该子模块的目录将完全为空(当您执行git submodule status新子模块的哈希值应该是可见的,但会-在前面有一个它。)在这种情况下,你需要在你的后面加上git pull一个git submodule update --init(--recursive当它是子模块中的子模块时加上),以便检出新的、以前不存在的子模块;就像在对带有子模块的项目进行初始克隆之后一样(显然您之前也没有这些子模块)。
认为手动设置.gitmodules就足够了是错误的
git version 2.22.0在撰写本文时,我的本地人。
所以我来到这个线程想知道为什么git submodule init不起作用;我设置了.gitmodules文件并继续执行git submodule init...
重要的
git submodule add company/project.git includes/project是必需的(第一次添加模块时),这将:
.git/config.gitmodules文件includes/project在本例中)。你必须那么git commit您已经添加子模块之后,这将提交.gitmodules和跟踪的子模块的位置。
再次克隆项目时,它将具有.gitmodules和 空的子模块目录(例如includes/project在本例中)。在这一点上.git/config还没有子模块配置,直到git submodule init运行,记住这只有效,因为.gitmodulesANDincludes/project在主 git repo 中被跟踪。
另请参阅:
小智 8
我遇到了同样的问题,但上述解决方案都没有帮助。.gitmodules 和 .git/config 中的条目是正确的,但命令git submodules update --init --recursive什么也没做。我还删除了子模块目录并确实运行git submodules update --init --recursive并取回了子模块目录,但与以前完全相同的提交。
我在这个页面上找到了答案。命令是:git submodule update --remote
对我来说,问题是存储库的前开发人员已将该submodules/thing文件夹作为常规文件夹提交,这意味着当我尝试运行时git submodule add ...,它会失败:'submodules/thing' already exists in the index,但尝试更新子模块也会失败,因为它发现路径没有包含一个子模块。
要修复此问题,我必须删除该submodules/thing文件夹,提交删除,然后运行git submodule add命令将其正确添加回来:
git submodule add --force --name thing https://github.com/person/thing.git submodules/thing
Run Code Online (Sandbox Code Playgroud)
根据戴夫·詹姆斯·米勒的回答,我可以确认它对我有用。这里重要的是提交子项目提交 ID。仅仅在 .gitmodules 中添加条目是不够的。
这是一个合适的提交:
https://github.com/dirkaholic/vagrant-php-dev-box/commit/d5f4c40bdbd80eefbb5ac6029823733f591435ae
有点不可思议,但是今天我跑了,
git submodule init接着又git submodule sync跟着git submodule update,它开始拉动我的子模块...魔术?也许!这确实是Git上最烦人的经历之一。
刮一下。我实际上是通过这样做使它工作的git submodule update --init --recursive。希望这可以帮助。
PS:确保您位于git根目录中,而不是子模块中。
| 归档时间: |
|
| 查看次数: |
78708 次 |
| 最近记录: |