当前位置: 首页 > 后端技术 > PHP

Git多分支并行开发(一个仓库包含多个不同项目)

时间:2023-03-30 01:56:34 PHP

背景最近在使用laravel开发微信小程序的界面。由于服务器PHP版本问题,我使用的是laravel5.6(php7.1,开发环境)和Laravel5.4(php5.6,服务器环境),开发完成后,两个项目的大部分代码都差不多。不想再建一个仓库来存放php5.6的代码,于是尝试在原来的仓库中新建一个分支来存放php5.6的项目,鼓捣了一上午终于弄明白了,现在把它记录下来。主要步骤:在远程和本地仓库新建分支(我搭建的是laravel54);删除远程laravel54分支上的所有文件;将新项目的文件推送到laravel54。Process新建文件夹(我的是laravel5.4)创建git本地仓库,关联远程仓库mu@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4$gitinit在D:/PHP初始化空Git仓库/xampp/htdocs/apple/laravel5.4/.git/木@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$gitremoteaddorigingit@xxxxxxxxxxxxxxxxxxxxx.git创建远程仓库分支laravel54注意,远程分支建立后,本地暂时不能建立其他分支,因为新建的git仓库默认的master分支要等到第一次commit后才会真正建立起来。这时候创建其他分支会报错。稍后将解释解决方案。Mu@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$gitbranchlaravel54fatal:不是有效的对象名称:'master'。只需创建一个新文件而不写入任何内容,然后提交Mu@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$touchclearTheBranch@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$gitaddclearTheBranch@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$gitcommit-m'cleanthisbranch'[master(root-commit)c7c5349]清理这个branch1文件改变,0插入(+),0删除(-)创建模式100644clearTheBranch推送前更新(下面的代码是核心代码)。新创建的分支默认和master分支是一样的,所以在push之前把分支上的内容pull下来。朱@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$gitpulloriginlaravel54warning:nocommoncommitsremote:Enumeratingobjects:2453,done.remote:Countingobjects:100%(2453/2453),done.remote:压缩对象:100%(2320/2320),done.Receiviremote:总计2453(增量1547),重复使用229(增量89)接收对象:100%(2453/2453),1.40MiB|1.38MiB/s,完成。解析增量:100%(1547/1547),完成。从xxxxxxxxxxxxxxxxxxxxx*branchlaravel54->FETCH_HEAD*[newbranch]laravel54->origin/laravel54fatal:refusingtomergeunrelatedhistoryswillreportanerrorat这一次,这是正常的,原因是本地仓库和远程仓库不一样,有相似的commithistory,两者完全不同。拉动的时候只需要加一行代码。代码如下:Mu@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$gitpulloriginlaravel54--allow-unrelated-historiesFromxxxxxxxxxxxxxxxxxxxxx*branchlaravel54->FETCH_HEADMergemadeby'recursive'strategy.......在这一步中,会有一个commit指令用于merge,简单记下来,这只是一个merge指令,并不会真正与mater合并。这一步之后,远程仓库的laravel54分支的文件已经拉下来了,然后建立远程仓库对应的本地分支。创建并切换到本地分支laravel54木@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$gitbranchlaravel54木@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$gitcheckoutlaravel54切换到分支'laravel54'@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$//也可以直接使用gitcheckout-blaravel54删除本地所有文件仓库(.git文件夹除外),然后推送MU@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$gitadd.MU@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$gitcommit-m'删除所有文件'[laravel54d8bf12d]删除所有文件215个文件已更改,32019个删除(-)...朱@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$gitpushoriginlaravel54枚举对象:7,完成。计数对象:100%(7/7),完成。最多使用4个线程进行增量压缩。压缩对象:100%(4/4),完成。写入对象:100%(6/6),683字节|341.00KiB/s,完成。总计6(delta1),重复使用1(delta0)远程:由Gitee.com提供技术支持到xxxxxxxxxxxxxxxxxxxxx.gitc810298..d8bf12dlaravel54->laravel54此时远程仓库的laravel54分支和本地仓库的laravel54分支一样是空白的,这样就可以随意推送新项目了。这时候可以将之前的项目复制到这个文件夹中,然后按照正常的推送流程进行推送。Mu@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$gitadd.warning:LFwillbereplacedbyCRLFin.env.example.Thefilewillhaveitsoriginallineendingsinyourworkingdirectory.........Mu@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$gitcommit-m'laravel54push'[laravel54eba0954]laravel54push113个文件已更改,11583个插入(+)创建模式100644.env.example创建模式100644.gitattributes.......朱@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$gitpushoriginlaravel54Enumeratingobjects:152,完成。计数对象:100%(152/152),完成。使用最多4个线程进行增量压缩。压缩对象:100%(126/126),完成。写入对象:100%(151/151),211.43KiB|2.94MiB/s,完成。总计151(delta14),重用42(delta4)远程:解析增量:100%(14/14),完成。远程:由Gitee.com提供技术支持到xxxxxxxxxxxxxxxxxxxxx.gitd8bf12d..eba0954laravel54->laravel54小总结不用担心推错分支导致分支合并经过以上操作,就可以实现mas了ter分支和laravel54是两个完全不同的项目,可以保持两个项目的并行开发,因为两个分支的提交历史是不同的,所以即使是操作错误,提交了错误的分支,git会给出相应的报错,没有的两个分支会直接合并。下面是代码演示:本地laravel54推送Mu@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$toucha.txtMu@MINGW64/d到远程master分支/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$gitadda.txtMu@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$gitcommit-m'testfilea.txt'[laravel54e246705]testfilea.txt1filechanged,0insertions(+),0deletions(-)createmode100644a.txt朱@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$gitpushoriginmasterToxxxxxxxxxxxxxxxxxxxxx.git![rejected]master->master(fetchfirst)error:failedtopushsomerefsto'git@xxxxxxxxxxxxxxxxxxxxx.git'提示:更新被拒绝,因为远程包含你做的工作提示:本地没有。这通常是由另一个存储库pushhint:tothesameref引起的。你可能想先集成远程changeshint:(例如,'gitpull...')在p之前再次刷新。提示:有关详细信息,请参阅“gitpush--help”中的“关于快进的注意事项”。)$gitlogcommite246705e9894a658d3fb2ea8f51b1ee0dd8ff834(HEAD->laravel54)Author:muyanDate:FriJun2914:50:352018+0800testfilea.txtcommiteba09541b60e496127f6280c3db9611f72504744(origin/laravel54)Author:muyan日期:FriJun2914:36:482018+0800laravel54pushcommitd8bf12d9df1337f9f7e0de723608796a490f66dc作者:muyan日期:FriJun2914:24:0280018+0deleteallfilescommitdcfb2b00f4f8ad0f1f672cde9b9e9ddc79d85239(master)Merge:c7c5349c810298Author:muyanDate:FriJun2913:56:242018+0800Mergebranch'laravel54'ofxxxxxxxxxxxxxxxxxxxxxforclaeringthebranchcommitc7c5349779f868fbc1cf18d742d634c9d3267c32Author:muyanDate:FriJun2913:55:012018+0800cleanthisbranchMu@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$gitreseteba09541b60e496127f6280c3db9611f72504744//返回上一个提交版本Mu@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(laravel54)$gitstatusOnbranchlaravel54Untrackedfiles:(use"gitadd..."includeinwhatwillbecommitted)a.txtnothing添加到提交但存在未跟踪的文件(使用“gitadd”跟踪)本地主分支推送到远程主分支@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$gitadda.txt木@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$gitcommit-m'测试文件a'[masterd3e8bba]测试文件a1个文件被修改,0个插入(+),0个删除(-)创建模式100644a.txt木@MINGW64/d/PHP/xampp/htdocs/apple/laravel5.4(master)$gitpushoriginmasterToxxxxxxxxxxxxxxxxxxxxx.git![rejected]master->master(fetchfirst)error:无法将一些引用推送到'git@xxxxxxxxxxxxxxxxxxxxxxx.git'hint:更新被拒绝,因为远程包含您提示的工作:本地没有。这通常是由另一个存储库pushhint:tothesameref引起的。在再次推送之前,您可能希望首先集成远程changeshit:(例如,“gitpull...”)。提示:有关详细信息,请参阅“gitpush--help”中的“关于快进的注意事项”。理论上可以实现无限并行分支