子模块中的Git pull将创建另一个子模块

时间:2013-05-11 01:35:46

标签: git pull git-submodules

在处理子模块时,git pull存在一个主要问题。我以为我开始理解他们的原则,但显然不是......

我创建了一个简单的git repo Super并在其中创建了一个子模块module。我的第一个问题是在module中进行提交(我添加一个文本文件)并推送代码时,我可以在github上看到文本文件没有进入子模块module但事实上进入超级项目Super(子模块甚至没有在github中显示)。所以,当我在Super中进行git拉取时,我最终得到了我已经在子模块中推送的我的仓库的本地副本中的文本文件...我不确定我做错了什么。这里的代码基本上是:

   cd module (a text file "Test" was added to be commited)
   ~/Super/module [master]: git add -A
   ~/Super/module [master]: git commit -m 'comment'
   ~/Super/module [master]: git push
   cd Super
   ~/Super [master] : git pull
   and now the text file "Test" shows up in my Super next to the submodule "module".

所以这已经存在问题,但我可以忍受。我现在进入我的Super并删除此文本文件并添加对子模块module所做的更改,以便重新指定最新的子模块提交。

(after deleting the text file )
~/Super [master] : git add -A
~/Super [master] : git commit -m 'comment 2'
~/Super [master] : git submodule update
~/Super [master] : git pull
~/Super [master] : git push

我现在进入我的子模块并做一个git pull

~/Super/module [master]: git pull

这将创建超级中所有内容的副本并将其放在子模块module中。因此,如果我在ls中执行module,我会找到一个嵌套的子模块module,这是一个很大的问题。

~/Super/module/module [master]: 

所以我基本上有两个问题:

  • 当我推送子模块时,副本会转到超级项目

  • 在更新我的超级项目后拉入我的子模块时,会创建一个嵌套的子模块。

那里有人可以告诉我我做错了什么吗?我很抱歉,如果这对你们来说似乎显而易见,但我一直坚持这个问题并且非常令人沮丧。

我已经从Super:

添加了.gitmodules文件和.git / config

.gitmodules:

[submodule "module"]
path = module
url = git@github.com:titocazou/Super.git

的.git /配置:

[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@github.com:titocazou/Super.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[submodule "module"]
url = git@github.com:titocazou/Super.git

1 个答案:

答案 0 :(得分:0)

听起来我可能为您的子模块设置了错误的远程路径,因此您的子模块实际上指向与您的父存储库共享的远程。 (基本上,你已经在自己内部复制了你的存储库。)

检查.gitmodules的内容,看看您的子模块实际指向的推送和拉取的远程路径,并确保它与您的父存储库推送和拉出的路径不同。