# git_tutorial **Repository Path**: id-bear/git_tutorial ## Basic Information - **Project Name**: git_tutorial - **Description**: git 使用教程示例项目 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-12-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Git 研发流程规范 ## 深圳市谷熊网络科技有限公司 > 谷熊科技的Git项目管理方法融合了Gitflow和Forking两种常用的项目管理流程,目的旨在简化整个研发管理流程 ### 1. 项目维护者初始化正式仓库 ` git init --bare /path/to/repo.git ` 在码云系统中,项目维护者可以直接通过码云的web gui界面来创建一个项目,项目维护者可以直接使用clone命令将server端的项目克隆到本地 ### 2. 开发者fork正式仓库 只有项目维护者有权直接从他的server端仓库克隆项目到本地,其他开发者需要先将"官方"项目fork到自己的server端仓库,该步骤不需要使用任何Git命令,在Github或者码云中都可以通过点击项目主页右上角的Fork按钮来完成 ### 3. 开发者从自己的server端克隆项目到本地 `git clone https://user@bitbucket.org/user/repo.git` 克隆远程server端项目到本地后,开发者远程仓库别名默认为origin,我们还需要创建一个指向“官方”仓库的远程别名,一般我们将其命名为upstream,具体的创建命令如下: `git remote add upstream https://bitbucket.org/maintainer/repo` 如果“官方”仓库需要验证,则需要使用如下命令提供用户名: `git remote add upstream https://user@bitbucket.org/maintainer/repo.git` 这样做的目的是可以简单的保持“官方”仓库和开发者本地仓库的同步 ### 4. 开发者基于功能在本地开发自己的功能分支 假如功能的名称为feature001,那么开发者应该首先建立一个名为feature001的分支,并将修改commit到该分支: ``` bash git checkout -b feature001 # Edit some code git commit -a -m "Add first draft of some feature" ``` 这里是commit到开发者自己的仓库,如果开发者担心“官方”项目已经往前开发了,可以执行pull命令来获取最新的提交:`git pull upstream master` ### 5. 开发者发布自己的功能分支 一旦开发者准备好了分享新开发完毕的功能,开发者需要做两件事,第一件事是将本地开发完毕的代码,push到server端仓库中。注意,开发者在该步骤push到server端仓库是自己的server端仓库,而不是“官方”server端仓库,具体的push代码如下: ``` git push origin feature001 ``` 上面的origin指的就是开发者自己的server端仓库。开发者需要做的第二件事就是通知项目维护者,开发者想把他开发完毕的功能合并到“官方”仓库中,这一步可以使用Github或者码云中的pull request功能,向项目维护者发送一个pull request请求 ### 6. 项目维护者集成开发者的功能 当项目维护者受到pull request后,同样有两件事要做,第一件事是要在web端review开发者提交的代码,如果初步确定代码没有问题,那么第二步就是给该代码做评注并执行合并操作 ### 7. 项目维护者在测试服务器测试master代码 项目维护者在接受pull request后,应该马上在测试服务器上部署master分支进行测试。如果出现问题,开发者则需要修复bug后再次提交pull request ### 8. 开发者和正式仓库做同步 当项目维护者确认pull request没问题后,所有开发者可以用过如下命令,将“官方”仓库同步到自己本地仓库中: `git pull upstream master` ### 9. 额外步骤 做完上述8个步骤后,开发者的本地仓库feature001分支以及远程仓库feature001分支和“官方”的server端仓库是保持一致了,但是此时开发者本地仓库和远程仓库的master分支并未与“官方”仓库的server端保持一致,开发者可以先切换到master分支: `git checkout master` 然后将“官方”的master分支同步到本地: `git pull upstream master` 随后将本地master分支发布到开发者的server端master即可: `git push origin master` 这样开发者的server端master就和官方的保持一致了,当然读者也可以使用其他方法将“官方” server端master分支与开发者server端master分支保持同步。 ### 10. 常见问题 - “官方” 仓库为什么不建立develop分支来区分正式环境和开发环境? 因为我们做部署“官方”仓库master分支到正式环境之前,会先将master分支部署到测试环境测试,只有测试通过的master分支才会部署到正式环境中,这一步骤其实中一定程度上已经实现了master与develop的分离工作 - 开发者开发功能时为什么直接从本地的master checkout功能分支,而不是建立develop分支后从develop分支checkout功能分支? 开发者完全可以这么做,只要在pull request 的时候保证功能分支有效即可