1.Git简介:
1.Git是目前世界上最先进的分布式版本控制系统
网址:http://github.com
2.总结git的两大特点:
- 版本控制:可以解决多人同时开发的代码问题,也可以解决找回历史代码的问题
- 分布式:Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。
2.经理创建
2.1安装配置:
- 安装
sudo apt-getinstall git
- 安装成功后,运行如下命令
git
配置
- 在ubuntu的命令vi .gitconfig行中,修改某台机器的git配置
- 修改为注册github时的邮箱,填写用户名,要求组员的用户名不能重复
- git四部分的交互方式如下图
2.2创建仓库
- 注册github账户,登录后,点击"start a project"
- 在新页面中,输入项目的名称,勾选'readme.md',点击'create repository'
- 添加成功后,转到文件列表页面,点击'create new file'创建新文件
- 填写文件名称为'.gitignore',代码如下,表示项目中的pyc文件不需要被管理,因为这些文件代码是根据py生成的
- *.pyc
.idea/
migrations/
- 点击'preview'查看预览,点击'create new file'完成创建
2.3添加ssh账户
- 如果某台机器需要与github上的仓库交互,那么就要把这台机器的ssh公钥添加到这个github账户上
- 点击账户头像后的下拉三角,选择'settings'
- 点击'SSH and GPG keys',添加ssh公钥
生成git密钥
- 删除~/.ssh目录,这里存储了旧的密钥
rm -r .ssh
运行如下命令生成密钥
ssh-keygen -trsa -C "Github账号,可以是用户名,也可以是邮箱地址"
- 查看公钥内容,复制此内容
cat id_rsa.pub
- 回到浏览器中,填写标题,粘贴公钥
2.4克隆项目
- 在浏览器中点击进入github首页,再进入项目仓库的页面
- 复制git地址
- 在命令行中复制仓库中的内容
git clone git地址
错误处理
- 提示错误信息如下:
sign_and_send_pubkey: signingfailed: agent refused operation
- 错误原因:在ssh账户中没有加入新生成的密钥
- 解决:将密码加入ssh账户
- 逐条运行如下命令
eval "$(ssh-agent-s)"
ssh-add
2.5创建项目分支
- 每个员工开发期的代码互不干扰,并行开发,则每人使用一条分支
- 项目开发中公用分支包括master、dev
- 分支master用于发布,默认分支,当需要发布时将dev分支合并
- 分支dev开发阶段性的代码合并,每个阶段的工作完成后需要进行一次,控制项目的进度
- 成员分支用于每个项目成员的代码开发,实现不交叉
- 创建分支:git branch 分支名称
- 切换分支:git checkout 分支名称
- 将分支推送到服务器:git push origin 分支名称
- 将本地分支跟踪服务器分支
git branch--set-upstream-to=origin/分支名称 分支名称
- 创建并切换分支:git checkout -b 分支名称
- 查看所有分支,当前分支前标记为星*:git branch
- 删除分支:git branch -d 分支名称
没有例子,没错,就是没有例子,如果你删除了,我也找不回来哟
2.6搭建项目框架
- 当前项目分支一共有3个,分别为master、dev、itcast,当前在itcast分支上工作
- 在克隆的目录下创建项目,使用django框架
- 将文件代码添加到暂存区:git add dailyfresh/
将暂存区提交到仓储区:git commit -m '搭建框架'
2.7上传分支
- 当从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来
- 远程仓库的默认名称是origin
- 推送分支,就是把该分支上的所有本地提交推送到远程库,推送时要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上
git pushorigin 分支名称
- 当前文件在python分支上,所以推送python分支
gitpush origin python
- 将python分支合并到dev分支
gitcheckout dev
git merge python
- 推送dev分支:git push origin dev
- 将dev分支合并到master分支
git checkoutmaster
git merge dev
- 推送master分支:git push origin master
3.员工—开发
3.1添加ssh账户
生成git密钥
- 删除~/.ssh目录,这里存储了旧的密钥
rm -r .ssh
运行如下命令生成密钥
ssh-keygen -trsa -C "Github账号,可以是用户名,也可以是邮箱地址"
- 查看公钥内容,复制此内容
cat id_rsa.pub
- 回到浏览器中,填写标题,粘贴公钥
3.2本地克隆
- 根据项目经理提供的地址,如“git@github.com:bossliu2016/django1.git”,从github上将项目克隆到本地,默认对应的是master分支
git clone 项目地址
3.3同步分支
- 以自己的姓名创建分支,如果此分支已经存在可以添加数字后缀,具体要与项目经理商量
git checkout -bzhjia
- 将本地分支推送到服务器
git push originzhjia
- 将本地分支跟踪服务器分支
git branch--set-upstream-to=origin/分支名称 分支名称
- 将github上的dev分支同步到本地,因为开发过程中,所有组员都向这个分支上提交阶段性代码,并从这个分支获取最新代码
git checkout -bdev origin/dev
3.4开发管理
- 上面的操作,只有我们在加入项目的第一天需要进行,只操作一次就够了
- 接下来的操作,是我们每天开发中都要进行的操作,这是必须做到熟练操作的命令
- 当前用户以zhjia分支进行开发
git checkout zhjia
- 本地仓库分为三部分:工作区,暂存区,仓库区,其中暂存区、仓库区是版本库部分
3.5工作区与暂存区
添加
git add 文件1 文件2 ...
git add 目录
撤销 :git checkout-- 文件名
3.6暂存区与仓库区
- 仓库区表示个人开发的一个小阶段的完成,仓库区中记录的各版本是可以查看并回退的,但是在暂存区的版本一旦提交就再也没有了
- 查看暂存区未提交的记录:git status
- 将暂存区的记录提交到仓库区
git commit -m'本次提交的说明信息'
3.7本地与服务器
获取
- 建议:在每天开始编写代码前,先与服务器同步一次;或者在公用分支如dev上开发时,建议先同步后开发
- 1.切换到dev分支:git checkout dev
- 2.获取代码,如果dev分支上有更新的记录则会同步到本地:git pull
- 3.切换回自己的分支继续开发:git checkout zhujiao
推送
- 建议:在每天下班前将当天开发推送到服务器,这样可以在服务器中存储一个备份,即使本机出问题,在服务器上还能存在代码备份
- git push origin zhjia
合并分支
- 一个功能模块开发完了,合并到dev分支
- 1.切换到dev分支:git checkout dev
- 2.获取代码,如果dev分支上有更新的记录则会同步到本地:git pull
- 3.合并:git merge zhjia
- 4.添加、提交并推送:git push origin dev
- 5.切换回工作分支:git checkout zhujiao
- 6.在最新代码上继续开发,所以将dev分支合并到zhujiao分支
git merge dev
解决冲突
- 建议:在更改公用文件如dailyfresh/urls.py时需要操作dev分支,因为大家都可以操作dev分支,所以在合并时可能出现冲突
- 冲突的示例如下,修改dailyfresh/urls.py文件
项目经理的操作
- 1.项目经理负责前台的开发,需要修改dailyfresh/urls.py文件
git checkout dev
- 2.在dailyfresh/urls.py文件中添加一条url
- 3.添加并提交
git adddailyfresh/urls.py
git commit -m '配置前台url'
- 4.同步到服务器
git push origindev
员工的操作
- 1.员工负责用户模块的开发,需要修改dailyfresh/urls.py文件
git checkout dev
- 2.在dailyfresh/urls.py文件中添加一条url
- 3.添加并提交
git adddailyfresh/urls.py
git commit -m '配置用户模块url'
- 4.向服务器推送:git push origin dev
- 5.推送时发现出错误了,根据提示,需要先获取服务器的变更
git pull
- 发现有冲突,而且自动合并冲突失败,需要手动合并冲突,指向dailyfresh/urls.py文件
- 6.冲突解决完成,再次添加、提交、推送
git add dailyfresh/urls.py
git commit -m '配置用户模块url-解决冲突后'
git push origin dev
3.8历史
- 查看仓库区的历史操作
git reflog
- 对比工作区和仓库区中某版本某文件的不同
git diff HEAD-- 文件名
- 将上面的代码添加提交
git adddf_user/models.py
git commit -m '修改模型类的str方法为name属性'
回退
- 回退历史版本到暂存区
- 将df_user/models.py文件的更改完成添加、提交
git adddf_user/models.py
git commit -m '修改模型类'
- 查看当前的暂存区状态:git status
- 重置版本:git reset 版本号
- 再次查看当前的暂存区状态:git status
- 可以再将暂存区的内容恢复到工作区
git checkout --df_user/models.py
3.9删除
- 在ide中将文件删除
- 从工作区到暂存区提交:git rm 文件名
- 从暂存区到仓库区提交:git commit -m '说明信息'
1.创建df_user/a.py的变更添加到暂存区,再提交到仓库区
git adddf_user/a.py
git commit -m '创建文件a'
- 2.在ide中将df_user/a.py文件删除,然后在暂存区删除
git rmdf_user/a.py
- 3.提交暂存区的记录到仓库区
git commit -m'删除文件a'
3.10Debug分支
- 在项目的正常开发过程中,之前发布过的版本可能很会出bug,这时就需要停下来现在的开发任务,先去修改bug,完成后再回来继续开发任务
- git中stash提供了保存现场的功能,可以把当前工作区、暂存区中的内容不需要提交而保存下来,转而去做bug修复,完成后再恢复现场,继续开发工作
- 将语言和时区改为
LANGUAGE_CODE ='zh-Hans'
TIME_ZONE = 'Shanghai/Asia'
- 1.查看当前状态:git status
- 2.保存现场:git stash
- 再查看当前状态,发现是干净的:git status
- 3.切换到master分支:git checkout master
- 4.新建临时分支用于修复bug,用完后会删除此分支
git checkout -bbug001
5.修改dailyfresh/settings.py文件的语言和时区
- 添加:将工作区中的更改添加到暂存区
git adddailyfresh/settings.py
- 提交:将暂存区的内容提交到仓库区
git commit -m'修复时区语言'
- 6.切换回master分支:git checkout master
- 7.将bug001分支合并到master分支
- 因为临时分支用完后会被删除,无法通过分支查询历史记录,所以使用临时分支时需要使用no-ff的方式,同时写上-m备注信息
git merge--no-ff -m "修复bug-语言时区" bug001
- 推送到服务器:git push
- 8.删除临时分支bug001:git branch -d bug001
- 9.切换回工作分支zhjia:git checkout zhjia
- 查看现场列表:git stash list
- 恢复现场:git stash pop
- 恢复现场后查看工作状态:git status
4.0经理-发布
- 项目开发完一个版本后,需要进行项目的合并与发布
- 项目合并与发布,需要项目经理和组员一起来完成,每个人将开发的分支逐个合并到dev分支,如果有冲突则解决冲突,在dev上的代码经过测试没有问题后,则由经理合并到master分支,完成发布
- 实现发布主要遵守如下步骤:
- 每个人逐个合并分支到dev
- 经理合并dev到master并发布
- 每个人获取最新的dev分支、master分支
4.1逐个合并
- 1.切换到dev分支:git checkout dev
- 2.获取最新记录代码:git pull
- 3.合并,将自己编写的代码加入进来,如果有冲突则与上一个组员商量解决冲突
- 如果没有冲突则可以跳过4、5步
git merge 分支
- 4.添加
- 注意:在项目的根级目录下,即README.md所在的目录下
git add ./
- 5.提交:git commit -m 'zhjia发布v1.0'
- 6.推送:git push origin dev
4.2经理合并
- 所有成员都完成合并后,接下来是项目经理要执行的操作
- 1.切换到dev分支:git checkout dev
- 2.获取最新:git pull
- 3.切换到master分支:git checkout master
- 4.合并dev分支到master分支
- 如果有冲突,则找相应的组同解决冲突
- 如果没有冲突则可以跳过5、6步
git merge dev
- 5.添加
- 注意:在项目的根级目录下,即README.md所在的目录下
git add ./
- 6.提交:git commit -m '发布v1.0'
- 7.打标签
- 标签就是为了给一堆数字的版本号,起一个容易记住的名字,一般用于master分支:git tag v1.0
- 8.推送:git push
4.3逐个获取
- 现在最新的代码已经有了,接下来在这个版本代码基础上继续开发,每个人都要获取最新的代码
- 1.切换到master分支:git checkout master
- 2.获取:git pull
- 3.切换到dev分支:git checkout dev
- 4.将master分支合并到dev分支:git merge master
- 5.切换到自己工作的分支如zhjia分支:git checkout zhjia
- 6.将dev分支合并到工作分支如zhjia分支:git merge dev