前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git 30分钟简明教程

Git 30分钟简明教程

作者头像
Yano_nankai
发布2018-10-08 10:46:43
4710
发布2018-10-08 10:46:43
举报
文章被收录于专栏:二进制文集二进制文集

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

SVN

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

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

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

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

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

Git
Git

Git

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

Git配置

Git初始化

全局配置

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

代码语言:javascript
复制
$ git config --global user.name "Scott Chacon"
$ git config --global user.email "schacon@gmail.com"

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

代码语言:javascript
复制
$ cat ~/.gitconfig
[user]
        email = schacon@gmail.com
        name = Scott Chacon

当前项目配置

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

GitHub新建仓库

GitHub新建repository
GitHub新建repository

GitHub新建repository

Clone一个仓库

代码语言:javascript
复制
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添加本次修改的注释,完成后就会记录一个新的项目版本。

代码语言:javascript
复制
git commit -m 'first'

同步到远程仓库

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

代码语言:javascript
复制
git remote

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

代码语言:javascript
复制
git push

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

分支与合并

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

下面以分支名exp为例:

查看分支

代码语言:javascript
复制
git branch

创建分支

代码语言:javascript
复制
git branch exp

切换分支

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

代码语言:javascript
复制
git checkout exp

提交分支

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

代码语言:javascript
复制
git push origin exp

合并分支

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

合并exp分支 → master分支

代码语言:javascript
复制
git checkout master
git merge -m 'merge from exp' exp

撤销合并

代码语言:javascript
复制
git reset --hard HEAD^

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

删除分支

代码语言:javascript
复制
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在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。

“中间人”攻击

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

代码语言:javascript
复制
你的数据  ↔  ️中间人 ↔️ 服务器

使用SSH

创建 SSH Key

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

代码语言:javascript
复制
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 - 百度百科
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.02.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Git简介
    • Git是什么?
      • Git的诞生
        • Git的目标
          • Git和GitHub
          • 版本控制系统
            • 集中式的版本控制系统(SVN)
              • 分布式的版本控制系统(Git)
              • Git配置
                • Git初始化
                  • 全局配置
                  • 当前项目配置
                • GitHub新建仓库
                  • Clone一个仓库
                  • Git的工作流程
                    • 添加到本地的缓存区
                      • 提交到本地仓库
                        • 同步到远程仓库
                        • 分支与合并
                          • 查看分支
                            • 创建分支
                              • 切换分支
                                • 提交分支
                                  • 合并分支
                                    • 撤销合并
                                      • 删除分支
                                      • SSH传输
                                        • SSH简介
                                          • 验证
                                            • 第一种级别(基于口令的安全验证)
                                            • 第二种级别(基于密匙的安全验证)
                                          • 为什么使用SSH?
                                            • 明文传送口令和数据
                                            • “中间人”攻击
                                          • 使用SSH
                                            • 创建 SSH Key
                                            • GitHub 添加 SSH Key
                                        • Git 命令总结
                                        • 参考链接
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档