一个项目下两个模块,被git识别为两个项目,导致只能推送一个模块上去
Posted 夜中听雪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个项目下两个模块,被git识别为两个项目,导致只能推送一个模块上去相关的知识,希望对你有一定的参考价值。
问题重现
使用IDEA创建了一个maven父项目,然后在父项目里建立了maven子模块(Module),然后点IDEA下方的Terminal,输入vue create web
,在父项目下建立了一个vue的子模块。项目结构如下:
- maven父项目
- maven子Module(后端)
- vuecli子Module(前端)
然后在码云gitee上建立一个新仓库,本地用git clone git@gitee.com:snow_night/community-vueclli.git
把项目克隆到本地,把clone得到的.git
文件夹复制到maven父项目下。接着在IDEA里用上方绿钩和绿箭头进行commit和push。
这时就会出现以下问题:一个项目下两个模块,被git识别为两个项目,导致只能推送一个模块上去。
当你推送另一个模块时会报如下错误:
error: failed to push some refs to 'gitee.com:snow_night/community-vueclli.git'
To gitee.com:snow_night/community-vueclli.git
! refs/heads/master:refs/heads/master [rejected] (fetch first)
hint: Updates were rejected because the remote contains work that you do
Done
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
如果你强制推送,可以把另一个模块的文件夹推送上去,但是无法在码云gitee上点开该文件夹。
解决方法
方法一:IDEA里File->Setting->Version Control
首先清空仓库,会把代码和提交记录一起清空掉。
然后本地git clone git@gitee.com:snow_night/community-vueclli.git
把项目克隆到本地,把clone得到的.git
文件夹复制到maven父项目下,然后IDEA重新打开父项目,在IDEA里File->Setting->Version Control,在这里会看到两条记录,就对应着被识别的两个项目,把他们都用减号删掉,然后再次commit->push,可以看到会成功把整个父项目push上去了。
(不建议)方法二:不用IDEA推送,用命令行Git Bash Here推送,就不会识别成两个项目了。
关联远程库,然后推送。
# 在要推送的项目的目录下,打开Git Bash Here
$ git init
$ git remote add origin git@gitee.com:snow_night/community-vueclli.git
# git pull <远程主机名> <远程分支名>:<本地分支名>
$ git pull --rebase origin master # 这句命令,会把远程库里的master分支的内容(不是hello-world文件夹)拉取到当前文件夹里,但master分支此时不是追踪分支。
$ git add .
$ git commit -m "提交个Springboot项目"
# git push <远程主机名> <本地分支名>:<远程分支名>。如果加上参数"-u",那么提交的本地分支就会成为追踪分支。
$ git push origin master
你下次用IDEA打开父项目,IDEA也会右下角弹窗提示The directory <Project>\\web is registered as a Git root, but no Git repositories were found there.
这样的信息,要求你配置IDEA里File->Setting->Version Control。
以上是关于一个项目下两个模块,被git识别为两个项目,导致只能推送一个模块上去的主要内容,如果未能解决你的问题,请参考以下文章
如何让 EGIT 识别一个 Eclipse 项目中的两个 Git 存储库?
Eclipse 导入外部项目无法识别为web项目并且无法在部署到tomcat下