基于git的代码版本管理规范及流程

代码库分类

根据代码库分布的位置及作用,分为以下几类:

  • 主库:位于服务端,所有开发的代码最终都要合到主库。
  • 个人代码库(服务端):从主库fork出来,位于服务端。每个人自已开发的代码,由本地的git库push到每个人自己的个人代码库(服务端),再由个人代码库(服务端)合入主加。
  • 个人工作库:位于每个开发人员的开发机器,从个人代码库(服务端)clone到本地。每个开发人员开发的代码,先commit到个人工作库,再由个人工作库push到个人代码库(服务端)。

人员角色分类

这里说的角色,都是人员在主库上的角色。基于简化的原则,人员分为三类:

  • Owner:拥有主库的所有权限。
  • Committer:具有将开发人员的合并需求(MR)合入主库的权限。基于安全考虑,我们设置为只能通过MR的方式将代码合入主库,而不能直接push到主库。
  • Developer:只能从自己的个人代码库(服务端)提交合并代码的请求(MR),是否能够合入,由Committer进行审核。

基本流程

在主库已经存在的情况下,日常操作流程如下:

  1. 开发人员从主库fork出自己的个人代码库。
  2. 开发人员将自己的个人代码库clone到本地,即个人工作库。
  3. 开发人员在开发了新代码后(包括新增和修改),先将代码commit到自己的个人工作库,再由个人工作库push到个人代码库。
  4. 开发人员提交从个人工作库到主库的MR,Committer审核后,决定是否将MR合入主库。
  5. 每个开发人员从主库pull最新代码到个人工作库。

分支管理

  • 主库缺省的master分支,是用来向生产环境发布的,所有合入的代码,原则上都必须是稳定的。
  • 主库除了master分支外,至少还要有一个活动分支,命名建议为:br_工程名_active,平时日常的开发都基于活动分支开发。即从个人工作库提交MR到主库时,指向的是主库的活动分支。活动分支测试稳定后,将主库的活动分支通过MR的形式,合并到主库的master分支,同时打上tag。
  • 如果软件运行过程中发现必须立即修改的bug,则从主库的master分支中,拉出一个bugfix分支。为修复这个bug的所有开发,都基于bugfix分支。待bugfix分支开发完成,并测试稳定后,将bugfix分支以MR的方合入主库的master分支。然后删除bugfix分支,视情况决定是否打tag。

常见问题

 使用git在本地创建一个项目的过程:

$ makdir  G:\python             ##创建一个项目文件夹
$ cd G:\python                  ##打开文件夹
$ git init                        ##初始化本地git仓库
$ git commit -m 'first commit'     ##提交更新并添加备注“first commit”

  以上为本地仓库创建提交流程

  登录码云,创建一个项目python,添加README文件,复制链接

$ git remote add origin https://git.oschina.net/xxxxxx/python.git     ##连接远程github项目  
$ git push -u origin master        ##将本地项目更新到github项目上去

  容易出现的问题及常用命令:

git status                 ##查看git状态
git pull origin master     ##pull远程仓库
git remote                 ##查看远程仓库及其分支
git rm origin              ##删除本地仓库            

  问题1:执行git remote add xxxx报错fatal: remote origin already exists.

  解决办法:git remote rm origin删除远程仓库的origin,然后再add添加远程仓库

  问题2:执行git push origin master报错fatal: I don't handle protocol 'git@https'

  解决办法:那是因为你用了git@github...的add方式添加了远程仓库,请通过问题1删除远程仓库再重新添加

  问题3:执行git push origin master报错error: failed to push some refs to...

  解决办法:大部分是由于github中的README.md文件不在本地代码目录中导致的, 先通过git pull --rebase origin master进行合并,再通过git push -u origin master上传

  问题4:执行git pull origin master报错fatal: refusing to merge unrelated histories

  解决办法:这是一个常见问题,要把两个不同的项目合并,需要添加一个强制命令:git pull origin master --allow-unrelated-histories

  问题5:如何添加一个.gitignore,或者如何添加一个目录(文件)到ignore中

  解决办法:一、还未添加git的项目:在项目目录下新建一个.gitignore文件(Windows无法新建命名为.gitignore,可以命名为.gitignore.,但是我更推荐使用sublime等工具来创建命名即可),在.gitignore中添加你需要过滤的文件即可。添加完成后git init即可;二、已经进行了git操作的项目,需要通过命令把相应的过滤文件缓存进行清空,清空后将代码push,同步端直接pull即可:

git rm --cached -r [目录名]
git commit -m 'clean ignore files'

  问题6:" refusing to update checked out branch: refs/heads/master, By default, updating the current branch in a non-bare repository is denied, because it will make the index and work tree inconsistent……"

  解决办法:这个错误是我在搭建裸仓库时碰到的,主要原因是git初始默认receive.denyCurrentBrach是拒绝接收push的,我们要向中心仓库push就需要设置它允许接收,在中心仓库输入:

git config receive.denyCurrentBranch ignore

  关于这个bare仓库可以多谈几句,通过bare建立的.git仓库是没有工作区的,所以又称为裸仓库,通常用它作为中心仓库。


  问题7:Git add或commit出现:“ fatal: Pathspec 'xxx' is in submodule 'yyy' 异常”

  解决办法:碰到这个问题是开发某小哥自己在yyy文件夹里搞了一个git仓库,然后另一个小伙直接放到项目中了,结果两个git仓库相互作用,导致项目的git仓库无法添加xxx到项目中,OK,总之这是两个仓库,通常我们到GitHub去clone别人的代码也会碰到这类问题,需要做的很简单,删掉yyy下面的git仓库,并把当前项目git的cache中的yyy清空掉:

git rm -rf --cached yyy
git add .
git commit -m 'add something'
git push origin master

 

  一些经验分享:注意平时在多人操作同一个git仓库时候尽量用不同的分支,在合并代码的时候使用一个主分支即可,此外,如果你忘记了代码的更新状态,在push操作之前尽量先pull

活动分支合入主分支时发生冲突

产生原因

平时基于活动分支开发,如果这个过程中为了修复bug而拉了一个bugfix分支,当bugfix分支开发完成并合入master分支后,如果bugfix分支和活动分支修改了相同的文件,则在活动分支合入master分支时就会产生冲突。

解决方法

  1. 从个人代码库(服务端)clone一个库到本地,即专门用于合并的个人工作库。(也可以用之前的个人工作库,但初学都容易混淆,建议单独clone一个。)
  2. 从主库的活动分支上pull最新的代码到本地。
  3. 从主库的master分支上pull最新的代码到本地。
  4. 此时会产生冲突,手工修复冲突,然后先commit到本地的个人工作库,再push到个人代码库(服务端)。
  5. 提交从个人工作库(服务端)到主库的MR(此时不会再有冲突),然后由Committer审核后将MR合入主库。

转载于:https://www.cnblogs.com/ray-mr-huang/p/9130087.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: App版本管理流程规范是指在开发和发布App时,对于版本进行统一管理规范化的一系列流程。 首先,开发团队需要建立一个版本管理系统,用于记录和跟踪App的版本号和变更内容。版本号一般遵循主版本.次版本.修订版本的命名规则,例如1.0.1。同时,版本管理系统还可以记录每个版本的发布日期、负责人等信息。 其次,在每个版本的开发过程中,开发团队需要建立版本控制机制,确保代码的稳定性和一致性。每次开发完成后,需要对代码进行版本控制,即将代码提交到版本管理系统中,并标记对应的版本号和变更内容。 然后,在开发团队确认一个稳定的版本后,可以进行内部测试。在测试过程中,需要对该版本进行全面的功能测试、性能测试、稳定性测试等,确保版本的质量和稳定性。 接下来,开发团队可以将测试通过的版本交付给产品经理或项目经理,并根据需求和计划对版本进行优化和修改。在此过程中,版本管理系统可以发挥作用,团队可以根据变更内容追溯和管理每个版本。 最后,当开发团队确认版本达到发布标准后,可以进行正式发布。在发布之前,需要制定发布计划和发布流程,包括版本的打包、上传至应用商店或公司的私有平台、灰度发布等。 总的来说,App版本管理流程规范包括版本记录、版本控制、内部测试、优化修改和正式发布等环节,通过统一的流程管理和控制App的版本,确保版本的质量和稳定性,提高团队的协作效率和开发效率。 ### 回答2: app版本管理流程规范是指在开发和发布app的过程中,按照一定的规范流程进行版本管理,确保app的开发、测试和发布的有序进行。 首先,版本管理应该建立在一个版本控制系统的基础上,例如Git。开发团队成员需要在该系统中创建自己的个人分支,或者在主分支上创建自己的特性分支,用于进行开发工作。 其次,开发团队需要根据需求对app进行功能设计和开发。相关的代码、资源文件等需要按照一定的文件夹结构进行组织,并定期进行代码提交。每次提交都需要附带相应的注释,以便后续的版本追踪和代码维护。 接下来是测试阶段。测试人员需要从版本控制系统中获取最新的代码进行测试。在测试过程中,需要编写详细的测试用例和测试报告,记录测试结果和问题。如果发现问题,需要及时在版本控制系统中创建对应的issue,并指派给开发人员进行修复。 一旦测试阶段完成,可以进入发布阶段。在发布前,需要对代码进行审核和打包。审核是为了确保代码质量,打包则是将所有的代码、资源文件和相关文档整合成最终的发布包。发布包需要进行命名、版本号的确认,并结合发布说明文档进行归档和存储。 最后是正式发布。发布人员需要按照预定的发布计划,将发布包上传到指定的发布渠道,例如应用商店或企业内部的分发平台。同时,发布人员还需要更新版本号和发布说明,并在发生问题时及时回滚到之前的版本。 综上所述,app版本管理流程规范的关键是建立版本控制系统、制定开发、测试和发布的规范,并保证团队成员的遵守和执行。这样可以提高开发效率、确保代码质量,并及时响应问题和需求变更。 ### 回答3: App版本管理流程规范不仅可以确保开发团队的高效协作,还能够提高App的质量和稳定性。下面是一个常见的App版本管理流程规范: 1.版本规划:在开始开发新版本之前,团队应该进行版本规划。包括确定新功能和改进的范围,制定开发计划,并确定发布日期。 2.版本控制:使用版本控制系统管理代码库,如Git或SVN。确保每个开发人员都能够从仓库中拉取最新的代码,避免代码冲突。 3.分支管理:在进行开发之前,团队应该基于主线分支创建一个开发分支。在开发分支上进行具体的开发工作,确保主线分支的稳定性。 4.代码审查:开发人员在完成自己的任务之后,应该进行代码审查。通过对代码的检查,可以发现潜在的问题和改进的机会。 5.测试和集成:在开发完成后,应进行单元测试和集成测试,以验证功能的正确性和稳定性。任何发现的问题都应该被记录下来并及时修复。 6.发布准备:在发布版本之前,团队应该进行最后一次的检查和准备工作。包括更新版本号,更新版本说明文档,并准备好发布所需的材料。 7.发布和回滚:发布版本时应该记录发布的具体时间和内容。在发布后的一段时间内,团队应密切监控用户反馈和错误报告,并根据需要及时进行回滚或修复。 8.版本记录:团队应该建立一个版本记录的系统,记录每个版本的信息,包括发布日期、功能、改进和修复等。这有助于团队回顾和评估每个版本的表现。 以上是一个简要的App版本管理流程规范,可以根据实际情况进行调整和补充。通过严格执行这一规范,可以提高团队的开发效率和交付质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值