Git 30分钟简明教程

Git简介

Git是什么?

分布式版本控制系统。

Git的诞生

参考链接

1991年,Linus创建了开源的Linux,世界各地的志愿者为Linux编写代码,但是绝大多数的内核维护工作,都花费在提交补丁和保存档案的繁琐事务上。这期间所有的源代码,都由Linus手工合并。Linus坚定反对CVS和SVN,因为这些集中式的版本控制系统,不仅速度慢,而且必须联网才能使用。

不过,到了2002年,Linux系统已经发展十年了,代码库之大让Linus很难继续通过手工方式管理了。BitMover公司出于人道主义精神,授权Linux社区免费使用商业版本的分布式版本控制系统BitKeeper来管理和维护代码。安定团结的大好局面在2005年被打破,开发BitKeeper的商业公司同Linux内核开源社区的合作关系结束,原因是Linux社区牛人聚集,开发Samba的Andrew试图破解BitKeeper的协议,这么干的其实也不只他一个,但是被BitMover公司发现了,于是BitMover公司收回了Linux社区的免费使用权。这就迫使Linux开源社区(特别是Linux的缔造者Linus Torvalds)不得不吸取教训,开发一套属于自己的版本控制系统。

Git的目标

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许上千个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似Linux内核一样的超大规模项目(速度和数据量)

Git和GitHub

2008年,GitHub网站上线,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

版本控制系统

主要分为两种:

  1. 集中式:CVS和SVN
  2. 分布式:Git

集中式的版本控制系统(SVN)

版本库是集中存放在中央服务器的,大家工作要先从中央服务器取得最新的版本,工作完成后把自己的修订推送到中央服务器。这类系统,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取得最新的文件或者提交更新。

Computer A和Computer B之间无法直接通信,只能通过中央服务器间接通信。


SVN
SVN

分布式的版本控制系统(Git)

根本没有“中央服务器”,每个人的电脑都是一个完整的版本库。这样你工作的时候,根本不需要联网,因为版本库就在你自己的电脑上。

那么多人如何协作?如果你在自己电脑上修改了A文件,你的同事在他的电脑上修改了B文件。你们俩之间只需要把各自的修改推送给对方就可以啦~

分布式比集中式的安全性高很多,因为每个人电脑里都有完整的版本库,一个人的电脑坏掉了不要紧,从其他人那里复制一个就可以了。分布式版本控制系统,也有一台充当“中央服务器”的电脑,但是这个服务器的作用,仅仅是用来方便“交换”大家的修改。

Computer A和Computer B之间,也是可以相互通信的。


Git
Git

许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

Git配置

Git初始化

全局配置

使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名,每次提交记录里都会包含这些信息。使用git config命令进行配置:

$ git config --global user.name "Scott Chacon"
$ git config --global user.email "schacon@gmail.com"

执行了上面的操作,会在家目录下建立一个.gitconfig的隐藏文件,可使用cat ~/.gitconfig命令查看:

$ cat ~/.gitconfig
[user]
        email = schacon@gmail.com
        name = Scott Chacon

当前项目配置

如果你想使项目里的某个值与前面的全局设置有区别(例如把私人邮箱地址改为工作邮箱),你可以在项目中使用git config 命令不带 --global 选项来设置. 这会在你当前的项目目录下创建.git/config,从而使用针对当前项目的配置。

GitHub新建仓库

GitHub新建repository
GitHub新建repository

Clone一个仓库

git clone https://github.com/LjyYano/test.git

这个命令是克隆出一个完整的版本库,而不是简单地拷贝文件,这和SVN不一样~版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。可以查看到目录中有.git的隐藏文件夹。

Git的工作流程

使用版本控制系统,无非就是以下几件事:

  1. 从服务器拉取文件
  2. 修改文件
  3. 提交文件
  4. 创建、合并分支

git的基本流程如下:

  1. 创建或修改文件
  2. 使用git add命令添加新创建或修改的文件到本地的缓存区
  3. 使用git commit命令提交到本地代码库
  4. 使用git push命令将本地代码库同步到远端代码库

文件有两种状态:

  1. tracked
  2. untracked

添加到本地的缓存区

新建一个文件git.txt,使用git status命令查看仓库状态。我们发现git.txt处于未跟踪状态:

上面的截图上已经提示了,使用git add添加可以commit的文件。

提交到本地仓库

需要使用-m添加本次修改的注释,完成后就会记录一个新的项目版本。

git commit -m 'first'

同步到远程仓库

因为我们是从远程仓库clone的代码,所以使用

git remote

发现已经有一个origin了,直接push即可

git push

刷新GitHub页面,发现已经有了本地的修改(添加了git.txt文件)~

分支与合并

分支的作用体现在多人协作中,分支不影响主线(master分支)的开发。比如一个团队开发软件,你负责独立的一个功能需要一个月的时间来完成,你就可以创建一个分支,只把该功能的代码提交到这个分支,而其他同事仍然可以继续使用主线开发,你每天的提交不会对他们造成任何影响。当你完成功能后,测试通过再把你的功能分支合并到主线。

下面以分支名exp为例:

查看分支

git branch

创建分支

git branch exp

切换分支

查看到当前还在master分支,如何切换到exp分支?

git checkout exp

提交分支

exp分支和master分支中的文件是隔离的,修改exp分支下的文件,并不会影响到master分支的文件。注:push前也需要add、commit等操作~

git push origin exp

合并分支

分别修改了master分支和exp分支的git.txt文件,如下图:

合并exp分支 → master分支

git checkout master
git merge -m 'merge from exp' exp

撤销合并

git reset --hard HEAD^

只能删除那些已经被当前分支的合并的分支, 如果你要强制删除某个分支的话就用git branch –D

删除分支

git branch –d exp

SSH传输

我们会发现有GitHub有两种Clone方式:SSH 和 HTTPS。

SSH简介

SSH - 百度百科

SSH 为 Secure Shell的缩写,可以有效防止远程管理过程中的信息泄露问题。

验证

从客户端来看,SSH提供两种级别的安全验证:

  1. 基于口令的安全验证
  2. 基于密钥的安全认证

第一种级别(基于口令的安全验证)

只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

第二种级别(基于密匙的安全验证)

需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。

第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。

为什么使用SSH?

传统的网络服务程序,有以下漏洞:

  1. 明文传送口令和数据
  2. 易受到“中间人”攻击

明文传送口令和数据

传统的网络服务程序如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。

“中间人”攻击

容易受到“中间人”攻击,即:

你的数据  ↔  ️中间人 ↔️ 服务器

使用SSH

创建 SSH Key

在用户的主目录下,查看是否有.ssh的隐藏目录,查看里面是否有id_rsaid_rsa.pub这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,打开命令行,输入如下命令:

ssh-keygen  -t rsa –C “youremail@example.com”

id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

GitHub 添加 SSH Key

将本地生成的id_rsa.pub公钥内容,添加到GitHub上,以后就可以使用SSH来连接GitHub了~

Git 命令总结

  • git config:配置相关信息
  • git clone:复制仓库
  • git init:初始化仓库
  • git add:添加更新内容到索引中
  • git diff:比较内容
  • git status:获取当前项目状况
  • git commit:提交
  • git branch:分支相关
  • git checkout:切换分支
  • git merge:合并分支
  • git reset:恢复版本
  • git log:查看日志

参考链接

  1. Git使用教程
  2. SSH - 百度百科
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,638评论 18 139
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,645评论 9 163
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,656评论 4 54
  • 雨夜的黄浦江边,氤氲一片。似是被过分修图般不真实。休闲装,平底鞋,一支雨伞,Eva喜欢这样的雨夜,独自踱步的感觉。...
    AthenaKuo阅读 1,001评论 0 1
  • jQuery函数方法 jQuery 中, $(document).ready()是什么意思? 当DOM准备就绪时,...
    YM雨蒙阅读 163评论 0 1