我有一个项目有一个子模块,它是一个独立的头(它是这样设计的)。现在我必须对分离头中的文件进行一些更改。以下是我的所作所为。
当我处于分离的头部路径( /user/project/base ((d4b9ede...))
git add testFile.py
git commit -m "made some change in this file"
git checkout -b temp
git checkout master
git pull
git merge temp
git branch -d temp
git push
在此之后,当我打开gitlab项目时,我可以看到远程服务器中所做的更改。但是当我克隆同一个项目时,我似乎没有看到对该文件所做的更改。我在这里做错了什么?
答案 0 :(得分:2)
子模块确实是“按照这种方式设计的”:超级项目列出了子项目中所有内容的提交ID,因此签出超级项目可以获得每个子项目在其特定提交ID处具有分离的HEAD。
这就是您没有看到更改的原因:您的子项目在其master
分支上有一个新提交,但您的超级项目不使用该分支(至少,不在任何分支中)直接的方式)。
这意味着在您完成并提交并且已经推动某些子模块的某些更改之后,您必须也,分别移动到您的超级项目并告诉git这个单独的东西 - 超级项目 - 现在应该通过它的(新)提交ID引用子项目中的新提交。
自从我上次这样做(git 1.5 / 1.6)以来,这似乎发生了变化,因此旧方法 - cd
到超级项目并仔细git add
子模块,确保不使用即使自动填充确实希望在那里有/
,路径名中的斜杠也不再是唯一的方法(尽管毫无疑问它仍然有效)。这些天你也可以使用git submodule update --remote
,也可以选择--no-fetch
。这确实要求您首先推送子模块更新(并使用超级项目中记录的分支设置,其.git/config
或其.gitmodules
,默认为master
- 这是{{ 1}}分支,或其他一些分支,最后重新进入图片)。
更新超级项目以便它知道新的提交ID后,您必须提交到超级项目并推送它。
Pro Git book和this blog posting都有关于子模块的其他信息。我个人仍然试图避免子模块;他们的“sobmodules”昵称在1.6天的git中非常合适,并且可能仍然是基于该博客帖子(最近更新于2016年1月中旬)。