zoukankan      html  css  js  c++  java
  • 代码管理的思考

    git管理代码仓库遇到的一些问题

    多人多项目同根目录的问题

    root
    --project1
    --project2
    ...
    

    当然这种情况其实不应该出现的,但是由于历史原因,多个项目有公用的一些东西,每个项目都很庞大,导致拆分比较费劲,短期无法做。代码发布流程是内网->dev->master,各个项目每周有例行发布时间,但是由于测试进度不一致导致的代码被别的项目带出,那么应该如何平衡多个项目的发布问题?

    解决方案1

    这里有个前提:每次开发新需求都是从master上拉取自己的开发分支。这样我们在测试内网是没问题,然后在往dev合并的时候要注意,只需要把你的代码merge到dev分支,而不要同步dev到你的开发分支,当然在测试期间要保持你的开发分支纯净(不要修改代码,修改代码另外开一个新分支,毕竟git中建立分支是很方便的)。在dev测试通过之后,就可以把你的开发分支合并到master,此时master就只有你修改过的代码。大体流程如下:
    image.png

    解决方案2

    保证合并到dev的代码是马上会发的(比如今晚或者两天内),那么所有的项目都测试完成再统一进行提交到master。或者说排队发布,只要有一个没发出去,那么别的项目就不可以发到dev。

    代码拆分

    基于以上的项目,我们可以拆分出某个独立的项目,一般来说这些独立的项目没有依赖公共文件,项目所在文件夹也是独立的,因此我们就可以直接拆分出来,并且要把他的git记录单独提取出来。
    创建新分支

    git check -b new branch
    

    剥离对应文件夹

    git filter-branch -f --prune-empty --subdirectory-filter Dir
    

    这样根目录下就只会存在你自己的项目,而且该项目的git记录也都存在而且不包含别人的提交记录。

    关于代码回滚

    我们在开发中可能会不小心提交了不该提交代码,而此时又合并到了dev ,大家想到的可能就是代码回滚,但是要注意几个问题:
    1.回滚记录中有没有别人提交的代码
    2.回滚有可能遇到合并记录的时候,会回滚失败
    3.回滚要不要把之前的commit清除掉
    。。。
    这里着重考虑1,2点问题,如果没有遇到合并记录,那么我们可以单独拉取一个分支,回滚,然后通过cherry-pick拉取别人提交记录,然后再覆盖原来的分支,但是如果别人有很多提交记录的时候,工作量就太大了。所以其实最好就是diff现有代码和线上分支代码,把不该提交的干掉,再重新提交一个commit,这样不用关注别人的提交,也保证每次提交记录的保存。当然回滚的时候可以选择使用revert,这样也会保持提交记录,但是依然会把别人的提交覆盖掉。

  • 相关阅读:
    利用XSLT把ADO记录集转换成XML
    探讨SQL Server中Case 的不同用法
    模拟Windows升级页面特效
    上海,我的奋斗岁月(整理篇)[转帖强烈推荐大家读完]
    根据上排给出十个数,在其下排填出对应的十个数
    【转】从两个排序数列中找到两个数列组合起来中间大的数
    网络每一层的基本协议
    交换两个指针
    先序遍历建树
    反转单链表_字符串_数字
  • 原文地址:https://www.cnblogs.com/Upton/p/8965955.html
Copyright © 2011-2022 走看看