1、rebase
rebase可以保持提交记录简洁,不分叉。
创建新文件
touch 文件名.文件类型
例:touch 1.py
创建新文件夹
mkdir 文件夹名称
清屏快捷键
ctrl+L
修改完成,检测效果如下:
2、多人协同开发工作流:Git Flow
2.1 创建项目&邀请成员
协同开发时,需要所有成员都可以对同一个项目进行操作,需要邀请成员并赋予权限,否则无法开发。 github支持两种创建项目的方式(供多人协同开发)。
- 1.合作者,将用户添加到仓库合作者中之后,该用户就可以向当前仓库提交代码。
- 2.组织,将成员邀请进入组织,组织下可以创建多个仓库,组织成员可以向组织下仓库提交代码。
2.2 成员开发
注册Github或Gitlab账号
- 邀请成员进入组织(默认对组织中的项目具有读权限)
- 邀请成员成为某项目的合作者
创建组织成功如下显示:
完成上面之后刷新github界面:
创建标签
git tag -a 版本代称 -m "xxx描述信息"
例如:git tag -a v1 -m "xxx"
将标签推送上去
git push 用户名 --tags
例如:git push origin --tags
创建并切换至当前分支
git checkout -b 分支名称
例如:git checkout -b dev
现在项目的准备工作已经完成,后面就可以邀请开发成员进入:
Git Flow主从开发人员的操作流程如下:(添加从开发人员可以多人)
2.3 code review
- 配置,代码review之后才能合并到dev分支
- 成员提交code review申请
- 组长做 code review
code review设置:
3、总结Git Flow的使用流程
- 创建github的组织
后面的操作步骤先跳过,不设置;
- 创建新项目的文件夹,区分不同开发者的文件夹,把基础开发代码文件上传至github,方便其他开发人员下载并更新新功能;
$ git init # 初始化
$ touch app.py # 创建基础的代码文件
$ git add . # 提交至git管理
$ git commit -m "基础的app版本开发" # 添加描述信息
$ git remote add origin https://github.com/github-test-project-0/test_project.git # 推送至github账户
$ git push -u origin master
$ git tag -a 基础版本 -m "第一版app" # 创建tag
$ git push origin --tags # 上传tag
做完上面的步骤之后,刷新github界面就能看到上传的app.py文件和tag标签。
3. 创建master_projecter_dev分支,切换至当前分支,并推送至github,这是用于以后测试合并代码版本的分支线;
git checkout -b master_projecter_dev # 创建在主开发人员下的新分支,用于以后测试合并的代码版本的分支线
git push origin master_projecter_dev
然后添加从开发人员的权限,在github界面上的setting中设置从开发人员账号和权限信息(邀请成员和设置权限都在下图的第4步完成),当邀请完成从开发人员的时候,他们github绑定的邮箱会收到一封验证邮件,需要点击确认加入该组织进行开发即可。
4.创建从开发人员的文件夹,并下载github上传的基础代码文件,创建从开发人员的分支slaver_projecter_dev,完成部分代码之后,上传至github上。
git clone https://github.com/github-test-project-0/test_project.git # 从github上面下载之前的app基础文件
ls # 当前路径下的文件
cd test_project/ # 转到改路径下
git checkout -b slaver_projecter_dev # 创建并转换至当前分支slaver_projecter_dev
git branch # 切换分支
touch new_app.py # 创建新的代码文件,并开始编写从开发人员负责的功能模块
git add . # 提交至git
git commit -m "app新功能开发了50%" # 添加描述信息
git push origin slaver_projecter_dev # 上传当前分支的信息到github上
从开发人员继续完成该部分功能的代码文件直到完成上传;
5.项目组长需要先设置code review的规则:次数,合并分支名称等
6.合并分支文件,先点击下图中的New pull request
回到项目主界面,就能在master_projecter_dev看到合并后的文件:
7.不同的公司可能会有额外的项目操作方式就是:需要测试人员,对开发的app代码进行测试,此时需要新建一个测试文件夹,下载完整的代码文件进行测试,收集bug,上传bug:
git clone https://github.com/github-test-project-0/test_project.git # 从github上面下载基础代码文件
ls
cd test_project/ # 转到下载的代码文件夹下
ls
git checkout master_projecter_dev # 切换到上一步code review合并后的代码文件分支上
ls
cat new_app.py # 测试完整最新的代码文件,收集bug,并上报
8.在主开发人员的文件夹下,代码文件还没有更新成最新的,需要先下载github上合并后的文件:
ls
git pull origin master_projecter_dev # 将code review后合并的代码文件下载到本地文件夹下
ls
cat new_app.py
git checkout master
git merge master_projecter_dev # 切换回master分支后合并代码文件
ls
git push origin master # 更新到github上
当master分支上的代码文件更新到github上之后,就可以发布开发的代码和APP了。
4、提测上线(预发布)
由专门团队或团队leader执行以下步骤
1.基于master_projecter_dev分支创建release分支
git checkout master_projecter_dev
git checkout -b release
2.测试等
3.合并到master
使用 pull request
本地将release合并到master分支
4.在master分支打tag
git tag -a v2 -m '第二版 xxx功能'
git push origin --tags
5.运维人员就可以去下载代码做上线了
git clone -b v2 地址
给开源项目贡献代码
- 1.fork源代码将别人源代码拷贝到我自己的远程仓库。
- 2.在自己仓库进行修改代码
- 3.给源代码的作者提交修复bug的申请(pull request)
找到别人的项目,进入之后,点击Fork:然后就会下载到自己的github上:
从自己的github账号上开始下载到本地:
git clone xxxx自己github项目地址xxxx
然后在本地文件夹下修改该项目的文件,修改,更新等操作;再提交至github上,操作和之前介绍的code review是一样的。
5、Git补充知识
配置文件存放三个位置
- 项目配置文件:项目/.git/config
git config --local user.name 'xxx'
git config --local user.email 'xxxx@xx.com
- 全局配置文件:~/.gitconfig
git config --global user.name 'xxx'
git config --global user.name 'xxx@xx.com
- 系统配置文件:/etc/.gitconfig
git config --system user.name 'juran'
git config --system user.name 'juran@xx.com'
注意:需要有root权限
免密码登录
URL中体现
原来的地址:https://github.com/WuPeiqi/dbhot.git
修改的地址:https://用户名:密码@github.com/WuPeiqi/dbhot.git
git remote add origin https://用户名:密码@github.com/WuPeiqi/dbhot.git
git push origin master
SSH实现(重点)
1.生成公钥和私钥(默认放在~/.ssh目录下,id_rsa.pub公钥、id_rsa私钥) ssh-keygen
2.拷贝公钥的内容,并设置到github中。
3.在git本地中配置ssh地址
git remote add origin git@github.com:WuPeiqi/dbhot.git
4.以后使用
git push origin master
下面界面显示成功设置:
git忽略文件
让Git不再管理当前目录下的某些文件。
*.h
!a.h
files/
*.py[c|a|d]
参考:https://github.com/github/gitignore
效果如下所示:
添加了.py文件、.h文件和.py[a|b|c]文件;忽略这些类型的文件的状态
github任务管理相关
- issues,文档以及任务管理。
- wiki,项目文档。