代码管理工具git的使用教程

代码管理工具git

1、git的概念

git:是一个代码协同管理工具
是一个开源分布式版本控制系统,可用于高效的管理大小项目,05年创造的,由林纳斯(linux之父)发明的

用的最多的两种管理工具:svn、git

代码管理工具的分类

分布式和集中式

分布式:每一个结点都保存完整的代码,没有统一的中央服务器,节点之间相互推送下载代码完成代码共享,例如git
集中式:代码集中管理,每次完成的代码上传到中央管理器,然后再统一从中央管理器中下载代码使用,例如svn

SVN(Subversion)是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。
下图就是标准的集中式版本控制工具管理方式:
在这里插入图片描述
集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。
但是相较于其优点而言,集中式版本控制工具缺点很明显:
服务器单点故障
容错性差

Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
下图就是分布式版本控制工具管理方式:
在这里插入图片描述

代码管理工具的作用:

防止代码丢失,可以做备份
代码版本的管理,可以进行多个版本之间的跳跃
可以方便的将代码在多人之间进行共享传输
多人开发时,有各种模式可以方便代码管理

git的特点

git可以管理各种文件,特别是代码项目,多在linux和unix系统中使用
是分布式管理,不同于集中式,这是git和svn的核心区别
git可以很好的支持分支,方便多人协作工作
git分布式代码更加安全,有全球唯一的commit版本号
git是开源的软件
使用git可以脱网工作,且数据传输速度较快

2、git工作流程

一般工作流程如下:
1.从远程仓库中克隆 Git 资源作为本地仓库。
2.从本地仓库中checkout代码然后进行代码修改
3.在提交前先将代码提交到暂存区。
4.提交修改。提交到本地仓库。本地仓库中保存修改的各个历史版本。
5.在修改完成后,需要和团队成员共享代码时,可以将代码push到远程仓库。
下图展示了 Git 的工作流程:
在这里插入图片描述

3、git的安装

在ubuntu下安装

sudo apt-get install git

也可以到git官网进行下载 https://git-scm.com/downloads
安装完毕后,终端输入git命令,显示结果如下 表示安装成功
在这里插入图片描述

4、git的配置

4.1、 三种配置级别

1、系统中所有的用户都可以使用该配置

git config --system 配置信息

配置文件是:/etc/gitconfig

2、当前用户可使用该配置

git config --global 配置信息

配置文件是:~/.gitconfig

3、当前项目可使用该配置

git config

配置文件是:当前项目下的 ./.git/config

4.2、配置信息(必须配置用户名和邮箱否则无法使用)

(1)配置用户名

git config --system user.name lzx

(2)配置邮箱

git config --global user.email lan.tian.lu@qq.com

(3)配置编辑器

git config core.editor vim
    注意:在配置当前项目级别的配置信息时,
    需要先初始化本地仓库git init

(4)查看当前所有的配置信息

git config --list

在这里插入图片描述

5、基本操作

5.1、初始化仓库

(1)git的四个区域

在这里插入图片描述
在这里插入图片描述
工作区:就是项目所在的目录
暂存区:如果项目中的文件想备份或者进行其他操作,需要将指定的文件先保存在暂存区
本地仓库:本地仓库是真正保存备份或者其他操作文件的区域,只能被当前项目所在的目录使用
远程仓库:如果想将某一个项目与其他主机进行共享或者传递,需要使用远程仓库

(2)初始化本地仓库

git init 

注意:

必须在项目所在的目录里面执行此命令
在某个目录下初始化仓库后会自动产生.git目录,当前目录下工作的所有文档可使用git进行管理

在这里插入图片描述

5.2、 查看区域状态

git status 

注意:
会显示与暂存区或者本地仓库中保存的不一样的文件,提示是否要进行备份

5.3、将指定的文件提交到暂存区

git add <文件名> 	            将指定文件(任意文件类型的文件)提交到暂存区
git add *  		            将当前目录下所有的文件提交到暂存区

注意,提交到暂存区的文件没有存放在本地仓库中
git rm --cache <文件名> 删除暂存区的指定文件

5.4、将暂存区的文件提交到本地仓库

git commit -m <提交说明>         将文件同步到本地仓库并且设置提示说明

注意:
一般提示时需要附加一些同步信息,在-m后添加
所有对工作区的修改,如果想同步到仓库,都需要执行当前命令(add --> commit)

5.5、查看commit日志

git log                         查看所有cimmit日志
git log --pretty=oneline        查看单行日志

5.6、比本地文件和本地仓库中文件的区别

git diff <文件名>  

如输入命令没有反应 则说明本地文件和本地仓库中的文件没区别

6、恢复操作

6.1、从本地仓库恢复本地文件

git checkout <文件名>  

6.2、丢弃工作区的修改

git checkout -- <文件名>    丢弃本地指定文件中的已经修改的内容(--两边都有空格)

6.3、本地仓库文件的移动和删除

git mv <源文件> <目的目录>   在本地仓库中将源文件移动目的目录中(本地也会移动)
git rm <文件名>              在本地仓库中删除指定的文件(本地也会删除)

注意:移动和删除后,需要再次执行git commit

6.4、回到上一个版本

git reset --hard HEAD^ 

HEAD后面的^数量决定了回到上几个版本

6.5、回到指定的版本

git reset --hard <commit_id> 

只需要commit id的前七位即可

6.6、查看所有的历史版本

git reflog 

最新的操作始终在最上边

7、标签管理(版本管理)

7.1、什么是标签

在当前工作的位置添加快照,保存工作状态,一般用于版本的迭代

7.2、创建标签

git tag <标签名称>                 创建标签
git tag <标签名称> -m <提示信息>    创建标签并设置提示信息
例如:git tag v1.0
默认是在最新的commit id处创建标签	

也可以指定commit id 创建标签
git tag <标签名称> <commit id>      指定某一个commit id处创建标签

7.3、查看标签

git tag 

7.4、删除标签

git tag -d <标签名称>  

7.5、查看指定标签的具体信息

git show <标签名称>  

7.6、恢复到指定标签的位置

git reset --hard <标签名称> 

8、临时工作区操作

一个功能实现的时候可能有很多种方法,可以通过临时工作区保存不同的方法,然后在选择合适的临时工作区作为想要使用的方法
如果要使用临时工作区,在本地工作区写完的方法不要备份,而是直接保存在临时工作区中,本地工作区中的文件还是初始的状态,这样又可以写第二种方法,以此类推,最终在所有的方法中选择最优的,从临时工作区中取出代码即可

8.1、创建保存临时工作区

git stash 

8.2、查看临时工作区

git stash  list 

8.3、使用指定的工作区

git stash apply stash@{编号}  

8.4、使用最新的临时工作区并删除

git stash pop 

如果打开的是较早版本的代码则不能使用该指令,需要先提交到本地工作区后在执行该命令(保证工作区是干净的)
使用git stash pop后还要提交到本地工作区
git add * //提交到暂存区
git commit -m <提交说明>

8.5、删除指定的临时工作区

git stash drop stash@{编号} 

8.6、删除所有的临时工作区

git stash clear 

9、分支操作

9.1、什么是分支

分支主要用于多人协作工作,分支即获取原有代码,在此基础上创建自己的工作环境,单独开发,不会影响其他分支的操作,开发完成后再统一合并到主线分支中

创建分支的好处:安全,不影响其他人工作

9.2、分支分类

project(项目库)
     master(主线分支)				//代码管理员
          hotfix(线上紧急bug修复分支)
     develop(开发分支)
          feature(功能分支)			//普通码农在此分支
          release(发布分支) 
               bugfix(bug修复分支)	//测试工程师在此分支

在这里插入图片描述

(1)长期分支

1)master:主线分支

记录项目主线版本的开发迭代过程,该分支是已发布的稳定的产品版本。
master分支的权限由版本管理员统一进行管理,除版本管理员外,其他任何人不允许向master分支合并代码。
其他分支需要向master分支合并代码时,首先提出合并请求,然后由版本管理员合并到master分支,合并后,版本管理员应立即添加版本号,发布随时可用的产品版本;每向master分支合并一次,产品版本号就会增加一次

2)develop开发分支

记录所有开发人员日常工作的成果,该分支是相对稳定的开发版本
develop分支的合并操作由研发主管和版本管理员共同管理,不允许开发人员将自己的代码直接合并到develop分支,也不允许开发人员在develop分支上直接进行开发工作,一经发现严肃处理

一个项目库只能有一个master分支和一个develop分支
项目库创建后,由版本管理员从master分支创建develop分支,项目组所有成员需要克隆服务器上的项目库到本地,然后再从develop分支创建自己的feature分支进行工作

(2)短期分支

项目库中存在的短期分支有:feature、release、bugfix和hotfix。
1)feature:功能分支
    用于开发新的功能;
    所有新功能的开发都要先创建feature分支,然后再进行开发工作,feature分支由开发人员从develop分支创建
    不同的功能需创建不同的feature分支
2)release:发布分支
    用于产品发布准备;
    新功能开发完成后需要发布产品新版本时,要创建release分支进行发布准备,release分支由版本管理员从develop分支创建
3)bugfix:bug修复分支
    用于修复不紧急的bug;
    系统测试过程中发现bug,开发人员需要从release分支创建bugfix分支进行修改,不允许开发人员在release分支上直接修改bug
4)hotfix:线上紧急bug修复分支
    用于修复产品发布后出现的紧急bug
    产品上线后,在客户现场出现问题,需要马上解决时,由开发人员从master分支创建hotfix分支进行紧急修复

9.3、查看当前分支

git branch 

注意:前面有*的分支表示当前正在工作的分支

9.4、创建一个分支(默认在主分支创建)

git branch <分支名称> 

9.5、切换工作分支

git checkout <分支名称> 

9.6、创建并切换到新的分支

git checkout -b <分支名称> 

主要用于在创建的分支基础上在创建分支

9.7、将指定的分支合并到当前分支

仓库管理员在主分支,收到其它分支程序猿的合并请求后
仓库管理员在主分支上使用此命令合并到主分支来
每合并一次要使用
git add * //提交到暂存区
git commit -m <提交说明> //提交到仓库
一次

git merge <分支名称> 

合并过程中如果没有冲突,直接合并后当前分支即为干净的状态,直接保存在本地仓库中
如果产生冲突,需要人为的选择,然后在进行add和commit的操作
在创建分支前,尽量保证当前分支是干静的,以减少冲突的发生

9.8、删除指定的分支

git branch -d < 分支名称> 

注意:
如果删除的分支没有合并,是不能用当前命令删除的
使用-D删除,表示强制删除指定分支

10、远程仓库

10.1、什么是远程仓库

远程仓库可以共享仓库中的项目,可以被其他主机接收到

10.2、创建远程仓库

(1)创建文件夹

mkdir <目录名>

(2)设置文件夹的属主(不设置也可以)

chown <用户名>:<组名> <目录名>

(3)将该文件夹设置为共享仓库

git init --bare <项目名称> 
                (项目名称一般都是以.git结尾)

(4)设置远程仓库的属主

chown -R <用户名>:<组名> <项目名称>

10.3、添加远程仓库

git remote add <仓库名称> <用户名>@<ip地址>:<共享仓库的绝对路径>

注意:
默认使用ssh作为传输手段,仓库名称可以任意起名字
必须在本地的某个git仓库下执行,才能是本地仓库和远程仓库关联

10.4、删除远程仓库

git remote rm <仓库名称>

10.5、将本地仓库的文件推送到远程仓库

git push -u <仓库名称> <要推送的分支>

注意:第一次推送需要加-u,以后不需要
注意:需要使用ssh协议才可以上传本地仓库的文件到远程仓库
按照ssh:sudo apt-get install openssh-server
重启ssh:sudo service ssh restart

10.6、从远程仓库获取项目

git clone <用户名>@<ip地址>:<共享仓库的绝对路径>

10.7、从远程仓库拉取分支或者代码,可以更新代码

git pull <远程仓库名> <远程分支名>  拉取远程仓库指定的分支并且与当前分支合并
git pull <远程仓库名> <远程分支名>:<本地分支名>  不合并

10.8、代码推送和更新

git push 将本地仓库的文件推送到远程仓库
git pull 从远程仓库中更新代码
git fetch 也用于更新,但是如果有新的分支不会合并 

10.9、本地旧覆盖远程新

git push --force <远程仓库名>  当本地比远程旧,用本地覆盖远程

11、github

11.1、什么是github

是一个网站,本质就是一个远程仓库,全球最大的开源社区网站
开发者可以注册账号建立自己的github仓库,就可以在本地通过git操作远程github仓库
git是github唯一的代码管理工具
github里面创建的仓库相当于就是远程仓库

github中所有的项目,包括别人的,都是开源的,所以自己推送项目时也需要是开源的

11.2、创建新的仓库

(1)点击右上角加号,选择New repository
(2)设置仓库名和说明信息,设置为公有的仓库,
设置readme(可以不设置),下面两个都默认就行,
点击Creating repository创建新的仓库

11.3、上传本地仓库的项目到远程github仓库

(1)方法1:使用http协议

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)方法2:使用ssh协议

1)在本地主机生成ssh密钥

ssh-keygen

注意:
必须获取当前主机的秘钥并设置到gihub,否则无法与github进行连接和操作
默认的秘钥存放在 ~/.ssh目录下
生成过程提示设置密码,如果不设置可以直接回车

ubuntu安装ssh服务器:
	sudo apt-get install openssh-server

2)复制秘钥
进入~/.ssh目录,复制id_rsa.pub公钥的内容
3)设置秘钥
登录github账号,选择右上角图片中的settings,然后点击SSH and GPG key,点击new ssh key,title随便设置,将刚才复制的秘钥粘贴到key中,然后点击add ssh key,设置成功

设置后只能通过ssh协议上传

4)上传文件时不需要输入密码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值