master分支
只存线上的代码,只有确定可以上线时的才合并到master上,并且在master的基础上打Tag。
develop分支,简称dev
初次创建dev时,需要从某个版本的master分支拉取,保持开发时本地代码和线上最新的代码相同。dev分支是在开发时的最终分支,具有所有当前版本需要上线的所有功能。
release分支
a、当dev分支已经有了本次上线的所有代码的时候,并且以通过全部测试的时候,可以从dev分支创建release分支了,release分支是为发布新的产品版本而设计的。
b、通过在release分支上进行这些工作可以让dev分支空闲出来以接受新的feature分支上的代码提交,进入新的软件开发迭代周期。
c、在这个分支上的代码允许做小的缺陷修正、准备发布版本所需的各项说明信息(版本号、发布时间、编译时间等等)。
d、比如,此次1.0版本所有的功能版本都已经合并到了dev上,并且所有测试都已经通过了测试,那我就创建新的release分支release/v1.0。切换到新分支,修改最新的版本号等,不允许大的更改。
feature分支
a、用于开发功能的分支,必须从最新的dev分支拉取代码。分支命名基本上是feature/FunctionName。
b、不强制提交到远程仓库,可以本地创建。
c、比如,我要开发登录功能,我从dev分支的最新代码创建新分支命名为feature/login,然后切换到这个新分支开始开发。开发完成后,测试差不多完成,合并到dev分支。
hotfix分支
a、当线上出现bug需要紧急修复时,从当前master分支派生hotfix分支。
b、修改线上bug,修改完成后合并回dev和master分支。
c、比如,在线上登录功能出现问题,我从master拉取代码创建新的分支hotfix/login,修改完成后合并到dev和master上。
以上内容来自:https://blog.csdn.net/weixin_33717117/article/details/91390610
若有问题,请联系我,谢谢。
以下内容为工作生活所浓缩,正文如下:
项目的开展与推进(首先确认,单干 还是 组团)
1、需求分析
- 向用户初步了解需求,列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,如果有特殊需求的页面,也得备注下来。
- 深入了解和分析需求,这里得输出明确的功能需求文档(doc或者其他的方式)
- 和用户再次确认需求
2、概要设计
- 系统的基本处理流程
- 系统的组织结构
- 模块划分
- 功能分配
- 接口设计
- 运行设计
- 数据结构设计
- 出错处理设计
3、详细设计
- 描述实现具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系
- 说明软件系统各个层次中的每一个程序(每个模块或子程序)的设计考虑,以便进行编码和测试
4、编码
根据《软件系统详细设计报告》中对数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求
5、测试
- 交给用户使用,用户使用后一个一个的确认每个功能
- 按照测试执行方,可以分为内部测试和外部测试
- 按照测试范围,可以分为模块测试和整体联调
- 按照测试条件,可以分为正常操作情况测试和异常情况测试
- 按照测试的输入范围,可以分为全覆盖测试和抽样测试
- 对于一个大型软件,3个月到1年的外部测试都是正常的,因为永远都会有不可预料的问题存在
6、软件交付(软件测试通过后,给于与用户合同约定的产物)
- 开发的目标安装程序
- 数据库的数据字典
- 《用户安装手册》
- 《用户使用指南》
- 需求报告
- 设计报告
- 测试报告
7、验收
- 用户验收
8、维护
- 根据用户需求的变化或环境的变化,对应用程序进行全部或部分的修改
项目开发"编码"过程中的CI("代码版本管理"参考)
以下不区分前后端应用
1、在组odboy下,新建远程仓库sagitarii,可见等级为public,http://gitlab.odboy.cn/tianjun/sagitarii
2、进入Git Bash,Git 全局设置
git config --global user.name "tianjun"
git config --global user.email "tianjun@odboy.cn"
2、创建新版本库
git clone http://gitlab.odboy.cn/tianjun/test.git
cd test
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
3、新增.gitignore文件
touch .gitignore
vim .gitignore
IDEA-Java .gitignore参考
.idea/*
*.iml
*/target/*
*/*.iml
/.gradle/
IDEA-Python .gitignore参考
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
# add
.idea/
IDEA-Go .gitignore参考
# Intellij project files
*.iml
*.ipr
*.iws
.idea/
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
IDEA-Vue&React .gitignore参考
# 众多无视的扩展
*.bak
*.patch
*.diff
*.err
# git冲突合并的临时文件
*.orig
*.log
*.rej
*.swo
*.swp
*.zip
*.vi
*~
*.sass-cache
*.tmp.html
*.dump
# 操作系统或编辑器文件夹
.DS_Store
._*
.cache
.project
.settings
.tmproj
*.esproj
*.sublime-project
*.sublime-workspace
nbproject
thumbs.db
*.iml
# F忽略的文件夹
.hg
.svn
.CVS
.idea
node_modules/
jscoverage_lib/
bower_components/
dist/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
4、push .gitignore
git add .gitignore
git commit -m "add .gitignore"
git push -u origin master
5、把项目文件放进sagitarii文件夹内,提交所有文件到远程仓库
git add .
git commit -m "init project"
git push -u origin master
6、创建master和dev分支
# 从master分支创建带tag的master分支,并切换到1.0.master
git checkout -b 1.0.master
# 创建dev分支
git checkout -b 1.0.dev
# 创建个人开发分支
git checkout -b 1.0.dev_odboy
# 查看本地分支
git branch
# 提交本地分支
git push origin 1.0.master
git push origin 1.0.dev
git push origin 1.0.dev_odboy
7、把个人分支上的功能代码合并到dev分支
# 提交到远程的个人分支
git add .
git commit -m "Xxxx功能"
git pull
git push
git status
# 合并到1.0.dev上
git checkout 1.0.dev
git pull
git merge 1.0.dev_odboy
git push -u origin 1.0.dev
8、dev测试通过,把个人分支上的功能代码合并到master分支
# 合并到1.0.master上(可能会有冲突)
git checkout 1.0.master
git pull
git merge 1.0.dev_odboy
git push -u origin 1.0.master
9、新建release分支
# 发布前从master分支新建release分支
git checkout -b 1.0.release_202001141111
# 稳定版本可以打tag(比如:1.0.release,说明这个是线上最稳定的版本)
git checkout -b 1.0.release
git push origin 1.0.release
注、当master代码改动了,需要更新开发分支(dev)上的代码
# 主分支合并到特性主分支
git checkout master
git pull
git checkout 1.0.master
git merge master
git push -u origin 1.0.master
# 特性主分支合并到当前开发分支
git checkout 1.0.master
git pull
git checkout 1.0.dev
git merge 1.0.master
git push -u origin 1.0.dev
# 当前开发分支合并到个人分支
git checkout 1.0.dev
git pull
git checkout 1.0.dev_odboy
git merge 1.0.dev
git push -u origin 1.0.dev_odboy
解决代码冲突的整个流程
1、远程路径存在或本地新建一个分支
2、分支库与主库代码一致
3、本地从分支库上拉取新代码
4、本地代码已经修改,本地与新代码之间的冲突
5、整合本地代码、新代码
6、整合后,提交融合后的代码到个人私库上
7、发送合入请求
如果你认为上面这个流程很难理解的话,你可以按照以下步骤进行合并
1、本地代码提交到个人分支(commit local -> remote your branch)
2、从即将合并的分支, 拉取代码到本地(remote dev/master -> git pull), 此时可能回发生冲突, 解决冲突即可
3、推送本地仓库代码到远程个人分支(git push),然后把你的个人分支,和目标分支做个merge即合并操作,这样就不容易发生代码覆盖的事件了
如果还是嫌麻烦, 最好最丝滑的方式就是: 主干开发, 主干发布