博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GIT 如何合并另一个远程Git仓库的文件到本地仓库里某个指定子文件夹并不丢失远程提交记录?...
阅读量:6269 次
发布时间:2019-06-22

本文共 2034 字,大约阅读时间需要 6 分钟。

问题背景:
    最近在重新整理手中的一个项目,目前该项目分为PC项目,手机项目,某第三方接口项目,第三方接口服务项目和手机项目
    因为之前规划的原因,原来的四个项目是分两个解决方案来管理的
    PC解决方案:
#PC解决方案,2015年从Vss迁移到Git 一共三个项目#F:\WWW\F.COM\WWWFlight.slnFlight.suoWeb #PC项目Qr #第三方接口项目 2015年新增项目,也使用PC解决方案但用分支进行管理,维护单独的通用项目,目前已经将通用项目分离到单独的分支进行单独维护(仅添加要引用的Dll即可) QunarTTS #第三方接口服务项目2015年新增项目,也使用PC解决方案但用分支进行管理,维护单独的通用项目,目前已经将通用项目分离到单独的分支进行单独维护(仅添加要引用的Dll即可)#所有通用项目,仅 PC&手机&第三方项目提供统一的支持BLLModelCommon WebHelp SqlServerDALDBUtilityLanguagesFlightAPI #机票ApiMobile #手机项目,需要从另一解决方案合并过来

  

 
手机解决方案:
#手机解决方案,所有DLL都会引用PC通用项目的DLL#因为当时考虑手机跟PC的View和大部分功能不一样,所以单独一个解决方案来做#F:\WWW\F.COM\MobileWebAppWebApp.csproj #手机项目WebApp.sln #解决方案WebApp.suo

  

 
因为最近客户的业务有所调整,所以涉及到以上四个全部的项目,在处理的时候出现了以下问题
  1. 因为 PC,第三方接口,接口服务都共同维护了通用项目,所以导致我频繁在这三个项目之前切换合并(保存通用项目文件一致) 已解决
  2. 手机解决方案同其他项目一样,都使用同一通用项目的Dll但不单独维护,为什么要独立一个解决方案,决定合并到PC解决方案以分支的方式管理
于是我就开始尝试对以上问题进行解决
  1. 将PC,第三方接口,接口服务等所有通用项目从三个分支里分离到单独的分支里统一管理
    其他项目如果要更改通用文件必须切换到分支然后生成再切换回来重新添加新的Dll即可(确保通用项目文件一致性)
  2. 将手机解决方案中的项目合并到PC解决方案里,然后以新的分支Mobile进行维护
问题1已经解决,当我在 把手机解决方案的项目合并到PC解决方案里,遇到此问题:
GIT 如何合并另一个远程Git仓库的文件到本地仓库里某个指定子文件夹并不丢失远程提交记录?
 
我这样获取远程Git的信息"git pull remote-address"时,手机项目文件是在PC仓库的根目录" F:\WWW\F.COM\WWW " 而我希望手机项目文件是在该根目录下Mobile目录下的“ F:\WWW\F.COM\WWW\Mobile ”
经过我反复测试和使用其他命令fetch等都没有解决,于是把自己的问题发在了群里,在跟群友沟通了N个小时后也没有解决我的问题,不过某个群友说可以使用subtree子目录的方式试试
于是在网上找各种资料做各种测试,终于经过二天的时间完成解决问题
 
合并必须满足以下条件:
1. 必须完整的 合并远程仓库(手机项目)的所有文件和提交记录本地仓库(PC项目)
2.远程的所有文件必须是在本地指定的目录 “ F:\WWW\F.COM\WWW\Mobile ”而不是在本地仓库的根目录
3.合并后只有一个git仓库(将远程提交合并到本地提交) “ F:\WWW\F.COM\WWW\.git ”
 
以下为真实测试的信息:
  1. 在本地新建Git仓库
  2. 在新仓库添加文件和更改,产生提交历史(也可以创建分支,Tag等)
  3. 在本地创建新分支并切换(栗子中直接在master操作的)
  4. 使用“git remote add -f demo2 f:\demo\d2”添加远程仓库 (demo2为远程仓库名, f:\demo\d2为远程仓库地址),将会获取远程提交历史,但没有远程文件
  5. 使用“git subtree add --prefix=d/2  f:\demo\d2 master --squash”引入外部仓库, --prefix=d/2 为在本地创建的子目录(子目录如果存在需要删除),后面是远程地址和分支名, 将会pull远程文件到本地目录如f:\w\d\2
  6. 使用“git merge -s subtree demo2/master”合并远程分支到当前分支,demo2/master 为 远程仓库/远程分支名
  7. 使用“git remote remove demo2”删除远程仓库分支,并删除合并自远程仓库的所有分支和Tag(不删除会出现 "demo2/master"这样的分支和Tag)
  8. 在本地进行操作,提交commit .....
 
 
使用“git remote remove demo2”删除远程仓库分支
 
 
感谢群里的朋友和网上的资料!
 
参考:
                 
    
    
    
 

转载地址:http://qvlpa.baihongyu.com/

你可能感兴趣的文章
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>
vue part3.3 小案例ajax (axios) 及页面异步显示
查看>>
软件测试(二)之 Failure, Error & Fault
查看>>
浅谈MVC3自定义分页
查看>>
.net中ashx文件有什么用?功能有那些,一般用在什么情况下?
查看>>
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
角色权限分配
查看>>
明小子动力上传拿webshell.zip
查看>>
ES6 Module export与import复合使用
查看>>
第三篇、image 设置圆角的几种方式
查看>>
关于Vs2010 C#使用DirectX的问题
查看>>
EPP(Eclipse PHP)语法高亮仿EditPlus配置
查看>>
OA账号架构权限的问题
查看>>
030——VUE中鼠标语义修饰符
查看>>
python编辑csv
查看>>
sql游标的使用与exec的两种用法
查看>>
数据结构
查看>>
78/90 Subsets --back tracking
查看>>