今天学习git的基本知识。
- git是一种分布式版本控制系统
- 用来管理项目的整个开发流程
- git有两大特点
- 版本控制,可以解决多人同时开发的问题,也可以解决找回历史代码的问题
- 分布式,git是分布式版本控制系统,同一个Git仓库,可以分不到不同的机器上。
创建一个项目
1 注册github或者码云等git平台(可选择码云)
2 点击个人界面项目栏的‘+’创建一个项目,输入项目名称等信息
3 创建一个.gitignore文件,文件里添加以下内容:
表示需要忽略的,不用上传的文件
*.pyc
.idea/
migrations/
SSH公钥
- 需要安全链接码云上创建的项目,需要先配置SSH公钥
配置步骤
1 在终端中,先删除~/.ssh目录,这里存储了旧的秘钥
rm -r .ssh
2 运行如下命令生成新的秘钥
ssh-keygen -t rsa -c '用户名或者邮箱等代表用户名字的称呼' 如:ssh-keygen -t rsa -c 'itcast'
3 两次回车,生成成功
4 在~/.ssh目录下找到id_rsa.pub,为新生成的公钥,打开,复制
5 粘贴到码云的SSH公钥配置界面并确定,配置成功
克隆文件到本地
1 点击码云对应项目的克隆按钮,复制SSH选项卡下的项目路径
2 在主机终端里,cd到需要项目存储目录下,执行:
git clone 赋值的项目路径
3 提示输出yes/no,输入yes
4 再次输入命令,enter确认
git clone 赋值的项目路径
项目分支
- 一个大型项目,需要多个人协作开发,每个人都会控制自己克隆的分支代码,项目会多个人同时开发,不定时上传合并各自的代码。
- 每个开发者在开发过程中必须创建有三个项目分支
- master 总分支,是最终上线的项目代码
- dev 开发分支,存放总的代码
- 项目开发人员各自的开发者分支,用来开发每个开发者负责的不同的功能模块
- master总分支是默认创建的
git常用分支操作
1 查看当前项目分支:
git branch
2 创建dev分支:(在哪个分支下面创建分支,是把当前的分支的所有代码复制一份到新的分支)
git branch dev
3 切换到dev分支:
git checkout dev
4 切换到新创建的分支:
git checkout -b itcast1
5 上传项目分支到服务器
git push origin dev
6 将本地分支跟踪服务器分支
git branch --set-upstream-to=origin/dev
项目框架准备过程
- 项目经理负责创建框架,开发,开发人员负责开发功能模块
项目经理:
在服务器(码云)上搭建项目框架
- 在服务器(码云)创建项目
- 把项目下载到主机上
- 创建dev分支和普通开发分支,如itcast1
- 在itcast1分支目录下创建Django框架
- 将创建的项目框架添加到暂存区:
git add ./
- 将项目框架提交到仓库区:
git commit -m '搭建项目框架'
,此时,项目被git真正管理起来 - 切换到dev 分支:
git branch dev
,发现没有任何代码,因为切换分支了,代码此时是被itcast1分支管理的 - 将itcast1中的代码合并到dev分支中:
git merge itcast1
,此时itcast1中的代码会拷贝一份在dev中 - 把dev代码上传到服务器中:
git push origin dev
,此时,一开始在itcast1分支中创建的框架代码就被上传到了服务器(码云) - 为了维护自己的代码,itcast1中的代码也应该上传到服务器(码云):
git push origin itcast1
开发员工
开发前准备
- 配置公钥,被分配权限
- 克隆项目到本地:
git clone 码云上的项目路径
,直接克隆服务器(码云)上的项目,只会克隆下master分支,此时,里面是没有代码的 - 将dev分支从码云上拉下来:
git checkout -b dev origin/dev
- 创建一个自己的分支,如itcast2:
git checkout -b itcast2
,此时,准备完毕,可以在itcast2分支中进行模块功能开发
关于工作区,暂存区,和仓库区
- 工作区就是IDE代码编辑区域,编辑完成后,使用 ’git add 文件/目录‘将编辑的代码上传到暂存区,暂存区负责每一个小阶段的工作确认,当一天的工作或者一个功能完成后,使用’git commit -m ‘备注信息’‘将代码上传到仓库区,生成一个新的版本,此时的代码就被git管理起来,可以使用’git push‘命令将此版本上传到服务器(码云)托管起来。
- 一般情况下 add命令和conmmit命令同时进行
开发人员 功能开发过程
- 在itcast1 分支里进行功能开发,开发过程中,查看当前开发状态:
git status
,若有修改,会显示修改信息,为红色 - 添加修改信息到git中:
git add '详细路径'或者’./(表示检查所有的代码,有更改的都上传)‘
,此时,终端会显示修改信息,为绿色,表示修改已经存储到暂存区 - 如果需要提交到仓库区:
git commit -m "备注信息"
- 如果需要查看历史记录:
git reflog
- 每一条记录最前面的数字是分支的版本号,表示分支的版本,每个分支的版本号不同,每一个分支每进行一次commit操作,都会更改一次版本号
- HEAD表示当前版本 ,HEAD^表示上一个版本,HEAD^^表示上上一个版本。。。,当表示多个之前的版本,也可以用HEAD~5,其中5表示前第五个版本
- 如果需要对比当前版本和上一个版本时:
git diff HEAD HEAD^ --需要对比的文件
,结果中会对比不同的内容,红色显示当前版本的代码,绿色显示上一个版本的代码
- 若只写当前版本,
git diff HEAD --需要对比的文件
,表示拿当前版本和工作区进行对比
- 若只写当前版本,
- 若需要版本回退
- 先使用
git reflog
查看需要回退的版本号 - 使用
git reset HEAD^或者HEAD~2或者版本号
进行回退到相应版本,注意此时是回退到暂存区 - 需要将回退结果显示在工作区,需要再使用
git checkout -- 需要显示的文件
- 先使用
- 当需要删除仓库区的某个文件时,使用
git rm 删除的文件
,然后提交git commit -m "删除了某个文件的描述信息"
- 当正在开发新的功能,线上的网站出现BUG需要解决:
- 保存当前工作区:
git stash
- 切换到master分支:
git checkout master
- 创建新的debug分支:
git checkout -b debug001
- 对master分支中的bug进行更改。。。
- 修改完毕,需要提交修改结果到仓库区:
git add ./
;git commit -m "修复**bug"
- 找测试人员充分测试
- 切换到master分支 :
git checkout master
- 使用no-ff将debug分支合并到master分支中:
git merge --no-ff -m "修复的描述信息" bug001
- 删除debug001分支:
git branch -d debug001
- 切换回itcast1分支,准备继续开发:
git checkout itcast1
- 恢复保存的工作区:
git stash pop
- 继续开发
- 保存当前工作区:
合并项目过程
- 上传遵循依次上传的的原则
- 上传到dev分支里
- 第一个开发人员itcast1,先转换到dev分支里,将itcast1分支合并后,将服务器的dev分支,pull下来:
git pull
- 商量着处理冲突代码,处理完毕。上传到仓库区:
git add ./
;git commit -m "上传**功能"
- 将合并后的dev分支上传到服务器:
git push origin/dev
- 第二个开发人员itcast2,先切换到dev分支里,将自己的itcast2代码合并到dev分支后,将第一个开发人员上传的dev分支pull下来:
git pull
- 商量着处理冲突,并且上传到仓库区:
- 上传处理好冲突的dev分支:
git push origin/dev
- 其他开发人员依次执行4-6步
- 代码全部合并完并且调试无Bug后,所有前面提交的人员pull下来最终的dev分支:
git pull dev
,merge到自己的开发代码中,继续开发