微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Git与GitHub

Git与GitHub

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用来跟踪管理版本库,以及一些配置信息。

3)配置该版本库用户名与邮箱属性

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 add ,再git commit

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)合并时冲突:

  • git merge <分支名>程序合并时发生冲突系统会提示CONFLICT关键字;
  • 命令行后缀会进入MERGING状态,表示此时是解决冲突的状态。

在这里插入图片描述

3)解决冲突

  • 此时通过git diff 可以找到发生冲突的文件及冲突的内容
  • 然后修改冲突文件内容,再次git add 和git commit 提交后,后缀MERGING消失,说明冲突解决完成

在这里插入图片描述


在这里插入图片描述

GitHub

1.是什么?

GitHub是一个Git项目托管网站,主要提供基于Git的版本托管服务

在这里插入图片描述

2.Git与GitHub操作

在这里插入图片描述

2.1 GitHub上的操作

  • 1)在GitHub上,可以创建自己的仓库;也可以任意Fork开源仓库(Repository);

  • 2)自己拥有Fork后的仓库的读写权限;

  • 3)可以推送pull request给官方仓库来贡献代码

2.2 Git上对GitHub的操作

在这里插入图片描述

前提

以上对项目的操作方式,必须是项目的创建者或者合作伙伴。

合作伙伴添加方式如下图:

  • 在项目中点击settings页签,然后点击Collaborators,然后在文本框中搜索合作伙伴的邮箱或者账号。点击添加
  • 添加后GitHub会给合作伙伴对应的邮箱发一封邀请邮件

在这里插入图片描述

  • 合作伙伴会收到邀请邮件。点击View invitation 按钮后会跳转至GitHub页面,让合作伙伴选择,是否接受邀请。
  • 点击接受后,则合伙伙伴正式加入项目,获得直接提交代码的权限。

在这里插入图片描述

1.Git推送至GitHub:git remote add/git push

1)增加远程地址

git remote add  <远端代号>   <远端地址> 。
  • <远端代号> 是指远程链接的代号,一般直接用origin作代号,也可以自定义
  • <远端地址> 认远程链接的url
# 例如
git  remote  add  origin  https://github.com/user111/Helloworld.git

2)推送到远程库

git  push   <远端代号>    <本地分支名称>
  • <远端代号> 是指远程链接的代号。
  • <分支名称> 是指要提交的分支名字,比如master
# 例: 
git  push  origin  master

2.Git克隆/更新GitHub上的项目:git clone/git pull

1)从GitHub上克隆一个项目

git  clone   <远端地址>   <新项目目录名>
  • <远端地址> 是指远程链接的地址。
  • <项目目录名> 是指为克隆的项目在本地新建的目录名称,可以不填,认是GitHub的项目名

命令执行完后,会自动为这个远端地址建一个名为origin的代号。

# 例如:
git  clone  https://github.com/user111/Helloworld.git   hello_world

2)从GitHub更新项目

git  pull   <远端代号>   <远端分支名>
  • <远端代号> 是指远程链接的代号。
  • <远端分支名>是指远端的分支名称,如master。
# 例如:
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 :

  • ssh模式比https模式的一个重要好处就是,每次push、pull、fetch等操作时,不用重复填写遍用户名密码。
  • 前提是你必须是这个项目的拥有者或者合作者,且配好了ssh key

步骤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 完成

  • 一台设备只能配置一个GitHub账号,但一个GitHub账号可以设置多个免密登陆设备。

测试连通性:要改用ssh连接

在这里插入图片描述

# 1)要建立新的远程代号:改用ssh连接
git remote add  originssh  git@github.com:yuebuqun777888/bixiejianfa.git
# 2)以后再提交代码的时候就不用输入密码了(第一次使用会要求输入个 yes)
git push originssh master

Git工作流

Git工作流:简单来说就是,一个项目的成员们在工作中统一使用Git的工作方式。

与其相对的是集中式工作流

  • 像SVN一样,集中式工作流以中央仓库作为项目所有修改的单点实体。所有修改都提交到Master这个分支上。
  • 这种方式与SVN的主要区别就是开发人员有本地库。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上。

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐