一个项目下两个模块,被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下

我可以让 git 将 UTF-16 文件识别为文本吗?

在 ssh-agent 中同时加载两个 ssh-keys 时,克隆(更新)git 子模块失败

Git 学会git,探索GitHub,掌握新知识 完

python内存数据库pydblite