git分布式版本控制系统原理以及常用命令的使用

概述

大家知道,git是一种分布式的版本控制系统。而传统的cvs和svn是一种集中式的版本控制系统。

所谓集中式的版本控制系统,就是指在远程有一个版本控制服务器,开发者可以通过远程版本控制器来实现代码的交换同步工作。开发者可以可以从远程服务器检出代码,更新代码,也可以像远程服务器提交代码。这样做有一个好处就是每个人都可以在一定程度上看到项目中的其他人正在做些什么。下面是一个简单的工作模型图:
这里写图片描述
然而这么做最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。因此引出了分布式版本控制系统。

在分布式版本控制系统中,每一个客户端都有一份完整的版本仓库,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。就算远程服务器宕机了磁盘损坏了,事后还是可以通过本地的镜像恢复远程服务器完整的版本信息。而集中式版本控制则做不到这一点,远程服务器磁盘损坏的结果就是以前提交的全部历史版本信息都会丢失,重新提交只会产生一个新的版本。一下是分布式版本控制系统的工作图:
这里写图片描述

git安装

使用git首先要进行安装。安装的步骤就是上官网(https://www.git-scm.com/)下载git进行安装然后配置环境变量。mac上面安装git更加简单,下载安装xcode会自动下载安装git,当然也可以上官网下载安装。查看是否安装成功可以用过 git –version查看:

➜  ~ git --version
git version 2.11.0 (Apple Git-81)
➜  ~

能够显示git的版本号即表示安装成功。

git常用命令

1. git init

该命令表示在本地初始化一个git版本控制仓库。执行该命令后可以看到在该目录下会出现一个隐藏文件夹:.git/,用来保存本地的版本信息和配置信息。如下图:
这里写图片描述

2. git config

该命令是用来配置git环境的。
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:
(1)/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 –system 选项的 git config 时,它会从此文件读写配置变量。
(2)~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 –global 选项让 Git 读写此文件。
(3)当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。可以传递–local选项让Git读写此文件。
每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

一般情况下会使用–global参数来配置。使用下面的命令可以配置用户信息:

$ git config --global user.name "John Doe" 
$ git config --global user.email johndoe@example.com

如果使用了 –global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。

可以使用git config –list 命令来列出所有 Git 当时能找到的配置。

$ git config --list
user.name=John Doe
user.email=johndoe@example.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto

3. git add

介绍这个命令,需要介绍下本地版本控制的工作原理。git分为工作区、暂存区、对象库。转换关系如下图:
这里写图片描述
每次修改文件或者新增文件,都会位于工作区,执行了git add命令过后,就会由工作区转移到暂存区。而执行git commit命令就是把暂存区中的文件提交到对象库。值得注意的是,图中检出文件就会从对象库转移到工作区,这里的检出跟svn 的检出是不一样的。这里的检出使用的是git checkout – <filename>命令。意思是将文件移出可追踪范围。
而git add 命令就是讲工作区中的目标文件添加到缓存区。

4. git status

用于展示git工作树状态。可以看到工作区有哪些文件,暂存区有哪些文件,然后可以根据需求使用git add 或者git commit命令。这是git使用过程中经常会使用的一个命令。

5. git commit

上面介绍过,该命令的主要作用是讲暂存区中的目标文件提交到对象区。

6. git log

通过git log 命令可以看到提交日志。如下图所示:
这里写图片描述
可以看到提交的commit Id,提交人信息,提交时间,以及提交说明。另外后面接 –pretty参数可定义输出格式。具体参数可以使用git log –help查看帮助。

7. git clone

表示从远程克隆一个版本库到主机,后面接远程仓库地址。克隆下来仓库的默认名称就是远程仓库的名称,如果想改改名称可以在后面加上定义的名称就可以了。

8. git branch(分支)

如果不接参数,表示查看本地有哪些分支。
后面接分支名表示创建一个本地分支,例如 git branch test,表示创建一个本地分支test。
接-d 参数表示删除一个分支。例如 git branch -d test,表示删除test分支。如果分支有提交的内容没有进行merge,删除会失败。如果要强制删除分支,需使用-D参数。
git branch -av,列出所有的分支信息,包括远程分支信息。

9. git checkout + 分支名

表示切换分支,例如 git checkout test,表示从当前分支切换到test分支。如果当前分支已经提交了版本,然后切换回test分支,test分支做了改动,这时候切换到原来的分支就会报错。
接-b参数表示创建并切换到创建的分支。例如 git checkout -b test,表示创建test分支并且从当前分支切换到test分支。

10. git stash

上面提到,如果当前分支已经提交了版本,然后切换回test分支,test分支做了改动,这时候切换到原来的分支就会报错。需要提交修改才能进行切换。但是如果使用git stash进行本地缓存也可以进行分支切换。等别的分支的事完成过后,可以切换回这个分支,通过git stash pop命令把刚才保存的改动在还原。

11. git remote

git remote或者git remote show表示查看远程分支信息。其中git remote show + 远程分支别名可以查看远程分支详细信息。
git remote -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。

12. git pull

表示从远程仓库拉去代码到origin/master分支,并且与本地当前分支merge。即git pull = git fetch + git merge。后面可以接远程分支别名,表示从指定的远程仓库拉取。如果有冲突需要处理冲突。

13. git push

跟git pull刚好相反。表示将本地方库内容推送到远程分支。执行git push 之前一般要先执行git pull,不然如果有人已经向远程仓库提交了代码,git push 就会失败。执行git pull如果有冲突需要解决冲突然后再git push。

总结

掌握了以上的命令就可以对git 进行简单的使用。但是对于git的原理还需要深入的理解,这样才能更加高效的使用git,并且出现了问题也更好的进行解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值