Git与GitHub
- Git简介
- Git的基本操作
- 理解:工作区+暂存区+本地库
- 设置全局属性:用户名与邮箱地址
- 1.创建本地版本库 repository:git init
- 2.提交文件:git status/add/commit
- 3.查看文件提交记录:git log
- 4.回退历史:git reset --hard HEAD^
- 5.版本穿越:git reflog/reset
- 6.还原文件(没有add和commit的前提下)
- 7.删除某个文件
- Git分支
- GitHub
- Git工作流
Git简介
Git是目前世界上最先进的分布式版本控制系统。
首先,版本管理系统能干什么:
而经典的集中管理型,如:CVS、VSS、SVN之类的集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
其特点是:
- 实现了大部分开发中对版本管理的需求
- 结构简单,上手容易
但也存在着一些弊端:
- 1、版本管理的服务器一旦崩溃,硬盘损坏,代码如何恢复?
- 2、程序员上传到服务器的代码要求是完整版本,但是程序员开发过程中想做小版本的管理,以便追溯查询,怎么破?
- 3、系统正在上线运行,时不时还要修改bug,要增加好几个功能要几个月,如何管理几个版本?
- 4、如何管理一个分布在世界各地、互不相识的大型开发团队?
对应的分布式版本控制系统Git与GitHub,有着以下优点:
- 容灾能力强
- 本地版本管理
- 异地协作
- 灵活分支
具体见“集中式vs分布式”
Git的基本操作
详细操作见Git文档:https://git-scm.com/doc
理解:工作区+暂存区+本地库
要理解Git每一步操作的目的与作用,首先要理解Git中的工作区、暂存区与本地库:
- 工作区(Working Directory):就是你电脑本地硬盘目录
- 本地库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库
- 暂存区(stage):一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
设置全局属性:用户名与邮箱地址
Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识:
git config --global user.name "name"
git config --global user.email "name@***"
- –global 表示全局属性,所有的git项目都会共用属性(每个版本库也可以单独设置)
- 如果是windows系统下,可以在C:\Users\Administrator路径下的.gitconfig文件里面看到配置信息
1.创建本地版本库 repository:git init
repository可以理解为一个文件目录,该目录中记录着所有关于文件的操作记录,并可以根据这些记录对版本进行回退、还原等操作。
1)首先,在合适位置,创建一个空目录,作为版本库的文件目录:
$ mkdir test
$ cd test
$ pwd
/Users/test
2)创建版本库:在项目文件夹内执行git init ,通过git init命令把这个文件目录变成Git可以管理的仓库
git init
执行此命令之后,test目录下会有一个**.git的隐藏文件夹**,此文件夹是Git用来跟踪管理版本库,以及一些配置信息。
git config user.name "name"
git config user.email "name@***"
该属性为本目录自有,其在.git文件夹下的config文件汇总
2.提交文件:git status/add/commit
- 1)新建文件后,通过git status 进行查看文件状态
- 2)将文件添加到暂存区 git add 文件名
- 3)提交文件到本地库 git commit
- 编写注释 ,完成提交
- 4)或者也可以git commit –m “注释内容”, 直接带注释提交
git status
git add 文件名
git commit
git commit -m "comment"
3.查看文件提交记录:git log
# 查看历史记录
git log 文件名
# 简易信息查看
git log --pretty=oneline 文件名
4.回退历史:git reset --hard HEAD^
# 1.回退到上一次提交
git reset --hard HEAD^
# 2.回退n次操作
git reset --hard HEAD~n
5.版本穿越:git reflog/reset
# 1)查看历史记录的版本号
git reflog 文件名
# 2)直接回退到该号对应版本
git reset --hard 版本号
6.还原文件(没有add和commit的前提下)
git checkout -- 文件名
7.删除某个文件
Git分支
系统上线了,但是产品经理又提了新的需求,评估一下工期要两个月,但是同时系统正在上线运行,时不时还要修改bug,如何管理几个版本?
Git通过分支branch来实现项目的版本控制。
1.创建分支:git branch <分支名>
# 创建分支
git branch <分支名>
# 查看分支
git branch –v
# 删除分支
git branch –d <分支名>
2.切换分支:git checkout <分支名>
# 切换分支
git checkout <分支名>
# 一步完成(创建新分支并跳转)
git checkout –b <分支名>
3.合并分支:git merge <分支名>
# 先切换到主干
git checkout master
# 合并分支
git merge <分支名>
4.合并时冲突:git diff
1)冲突:
2)合并时冲突:
3)解决冲突
GitHub
1.是什么?
GitHub是一个Git项目托管网站,主要提供基于Git的版本托管服务
2.Git与GitHub操作
2.1 GitHub上的操作
-
1)在GitHub上,可以创建自己的仓库;也可以任意Fork开源仓库(Repository);
-
2)自己拥有Fork后的仓库的读写权限;
-
3)可以推送pull request给官方仓库来贡献代码
2.2 Git上对GitHub的操作
前提
以上对项目的操作方式,必须是项目的创建者或者合作伙伴。
合作伙伴添加方式如下图:
1.Git推送至GitHub:git remote add/git push
1)增加远程地址
git remote add <远端代号> <远端地址> 。
# 例如
git remote add origin https://github.com/user111/Helloworld.git
2)推送到远程库
git push <远端代号> <本地分支名称>
# 例:
git push origin master
2.Git克隆/更新GitHub上的项目:git clone/git pull
1)从GitHub上克隆一个项目
git clone <远端地址> <新项目目录名>
命令执行完后,会自动为这个远端地址建一个名为origin的代号。
# 例如:
git clone https://github.com/user111/Helloworld.git hello_world
2)从GitHub更新项目
git pull <远端代号> <远端分支名>
# 例如:
git pull origin master
2.3 协作冲突
在上传或同步代码时,由于你和他人都改了同一文件的同一位置的代码,版本管理软件无法判断究竟以谁为准,就会报告冲突,需要程序员手工解决。
解决冲突三板斧:
- 1、修改合并
- 2、git add
- 3、git commit
# 获取最新代码,会与与本地代码Conflict,此时修改合并
git pull origin master
git add
git commit
# 最后再进行提交
git push origin master
2.4 Git免密登陆GitHub
https VS ssh :
步骤1:检查你的电脑上是否已经生成了SSH Key 在git bash下执行如下命令
cd ~
cd .ssh
步骤2:创建SSH Key,运行以下命令
ssh-keygen -t rsa -C <GitHub账号>
成功的话会在~/下生成.ssh文件夹(包含公钥于秘钥文件),打开id_rsa.pub,复制里面的key。
步骤3:进入.ssh文件包,打印id_rsa.pub的内容,复制全部内容
步骤4.登录Github后,右上角点击setting
步骤5.在左侧菜单中选择SSH and GPG keys,在右边点击New SSH key
步骤6 :Title随便写,Key 把之前id_rsa.pub的内容复制进去,点击Add SSH key,设置ssh key 完成
测试连通性:要改用ssh连接
# 1)要建立新的远程代号:改用ssh连接
git remote add originssh git@github.com:yuebuqun777888/bixiejianfa.git
# 2)以后再提交代码的时候就不用输入密码了(第一次使用会要求输入个 yes)
git push originssh master
Git工作流
Git工作流:简单来说就是,一个项目的成员们在工作中统一使用Git的工作方式。
与其相对的是集中式工作流:
GitFlow工作流:
- Gitflow工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。
在项目开发过程中,系统的线上版本即master不能随意修改,Gitflow工作流通过为功能开发develop、发布准备release和维护hotfix设立了独立的分支,每一次修改都会合并到开发分支中,当功能开发完成之后,经过发布准备release之后,并到主版本master中.
GitFlow分支种类:
1)主干分支 master
- 主要负责管理正在运行的生产环境代码。
- 永远保持与正在运行的生产环境完全一致。
2)开发分支 develop
3)bug修理分支 hotfix
4)发布版本分支 release
- 较大的版本上线前,会从开发分支中分出发布版本分支,进行最后阶段的集成测试。
- 该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除。
5)功能分支 feature
- 为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。
- 开发完成后会合并到开发分支。
注意:
- GitHub只能记录各个分支的操作,并不能处理最终master的合并,合并还需要Git完成,然后push到GitHub上。