Git 初识
Git 历史
同生活中的许多伟大事件一样,Git
诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds
)不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统订了若干目标:
Git 与 svn 对比
SVN 介绍
SVN
是 集中式版本控制系统
,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器那里得到最新的版本,然后干活。干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。下图就是标准的集中式版本控制工具管理方式:
集中管理方式优缺点:
优点: 开发人员在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。
缺点: 1、服务器单点故障问题。2、容错性差。
Git 介绍
Git
是 分布式版本控制系统
,那么它是没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了 文件 A
,其他人也在电脑上改了 文件 A
。这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。下图就是分布式版本控制工具管理方式:
下图展示了 Git 的工作流程:
Git 的下载安装
访问官网: www.git-scm.com/download/ 选择 相应操作系统 下载。下载好之后,安装即可【建议: 安装的时候一直点 Next
即可,直到完成,不必去改安装目录】。安装完成之后,点击鼠标右键会出现 Git GUI Here
和 Git Bash Here
,如下图所示:
当我装上了 Git 之后,发现其实并不是特别好用。此时就要装一个更好操作 Git 的软件 TortoiseGit
,这是 TortoiseGit 的官网: https://tortoisegit.org/download/ ,下载安装即可。安装时注意以下两项,如下图:
安装完成后,点击鼠标右键,就可看到新增了 三项功能
,如下图:
安装后发现,全部都是英文的,好像有点看不懂。没关系,汉化一下就可以了。汉化包自行搜索或者联系我。汉化完成后,点击右键,选择 TortoiseGit --> settings
就进入到了以下界面,选择即可。如下图:
完成之后,界面的所有文字就都是中文的了。接下来介绍 Git 的使用。
Git 的使用
Git 命令汇总
1 | # 查看 Git 版本 |
创建版本库
什么是版本库
版本库又名 仓库
,英文名 repository
。可以简单理解成一个目录,这个目录里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。由于 Git 是分布式版本管理工具,所以 Git 在不需要联网的情况下也具有完整的版本管理能力。
版本库的创建
创建一个版本库非常简单,可以使用 Git Bash
也可以使用 TortoiseGit
,还可以使用 Git GUI
,这三种方式都可以创建一个版本库。接下来就开始介绍如何创建一个版本库。第一步: 选择一个合适的地方,创建一个空目录,如:在桌面。如下图:
第二步: 在版本库创建好之后,在版本库目录下创建一个 本地仓库
,如下图:
到这里为止,版本库就创建好了。
注意一下:
这里的版本库指的是本地版本库,仓库也是本地仓库。
各种概念介绍
本地版本库:
.git 文件夹
就叫做本地版本库 。
工作目录: 包含.git
的那个目录就叫做工作目录,如repo_1
。
工作区: 包含本地仓库的目录就是工作区。如Repositories
。
操作版本库
向本地仓库添加文件
第一步: 在 repo_1 目录下添加一个文件 hello.txt ,然后使用 TortoiseGit
中的 add
加入到暂存区。此时的 hello.txt 并没有添加到本地仓库,如下图:
第二步: 提交到本地仓库。在 repo_1 目录下空白处点击鼠标右键,选择 Git commit->master
,然后出现如下界面:
提交成功后出现一个弹窗,选择关闭即可。此时 hello.txt
就加入到了本地版本库,效果如下图:
第三步: 在添加完文件之后,我们查看一下本地仓库【在 repo_1 目录下 点击右键:选择 TortoiseGit-->Repo-browser
】如下图:
向本地仓库修改文件
通过上图我们发现,结果只有 hello.txt
。因为我们只添加了这一个文件,所以只有这么一个文件。现在我们修改一下这个文件里面的内容,随便修改就行。修改完之后进行第二次提交。提交参考 第二步
【Git 可以不需要添加到暂存区就可以直接提交】。提交完成之后再次修改文件内容,然后再次提交。这个时候我们就有版本了。就可以进行 第四步: 查看版本信息。那么如何来查看呢?在 repo_1 目录下 点击右键 TortoiseGit-->Show log
即可查看到各个版本。如下图:
那我们如何知道 第二次提交 和 第三次提交 修改了什么内容呢?别急,参考下面图解:
向本地仓库删除文件
如果我们把 hello.txt
误删了怎么办?没关系,点击右键选择: TortoiseGit-->Revert...
即可把误删了的文件给还原回来。如果 TortoiseGit 汉化了的话,那么你会看到 还原 ,而不是 Revert… 。这里要注意:
如果 hello.txt 文件修改了没有提交,那么此时删除了,再次还原的话,修改的内容就没了。因为还原操作是从本地仓库找到文件还原回来,所以修改的内容就没有了。还原也有下面一种操作,点击右键选择: Git Sync...
,如下图:
如果我们想把 hello.txt 从版本库里面删除 ,但又 不想删除本地 的 hello.txt ,又该怎么办呢?这么办,如下图:
如果我们就是想删除 hello.txt
,且本地也不保存,如何做?简单,只要本地删除 hello.txt ,然后 commit 提交一下,这样就把这个文件从本地删除了,且版本库也没有了这个文件。
提交工程代码
如何去提交我们的代码呢?以为一个工程中,有些文件夹是不需要提交到本地仓库的,例如 .diea 文件夹
和 out 文件夹
,那我们该如何忽略它们呢?这么干。第一步: 把整个项目添加到 暂存区 ,如下图:
第二步: 在添加到暂存区之后,我们进入到 HelloProject
,选中需要忽略的文件或文件夹,然后右键,如下图:
第三步: 选中忽略方式,我们选择递归忽略,如下图:
第四步: 查看 HelloProject
工程,并查看 .gitignore
文件,如下图:
第五步: 提交到本地仓库,并进行仓库查看,如下图:
添加远程仓库
要使用远程仓库的话,必须要有 GitHub 账号
。当然,码云账号
也行,都是同类型的产品。本教程使用 GitHub 为例(GitHub 知名度高嘛)。首先我们得注册账号并新建远程仓库,详情参考:GitHub 账号注册 新建仓库如下图:
推送到远程仓库
那我们有了远程仓库之后,我们就要把 本地仓库 推送到 远程仓库 。如何推送呢?别急,先介绍下列概念。
Github 支持两种同步方式 HTTPS
和 SSH
。*如果使用 HTTPS * ,那就很简单,基本不需要配置就可以使用。但是每次提交代码和下载代码时都需要输入用户名和密码,很麻烦。如果使用 SSH 方式 ,就需要 客户端先生成一个密钥对 ,即一个公钥一个私钥。然后还需要把公钥放到 GitHub 的服务器上。接下来先看 SSH 方式。
SSH 方式
SSH
为 Secure Shell(安全外壳协议) 的缩写,由 IETF 的网络小组(Network Working Group)所制定。SSH 是目前较可靠、专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。使用 SSH 协议通信时,推荐使用基于密钥的验证方式。你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到 SSH 服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙, 然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密 质询(challenge) 并把它发送给客户端软件。客户端软件收到 质询 之后就可以用你的私人密匙解密再把它发送给服务器。
创建 SSH 密钥
在 repo_1
目录下点击右键,选择 Git Bash Here
,相关操作如下图:
以下是我的公钥,我们需要把公钥复制出来,然后去 GitHub 进行相关操作:
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuKASZWC4eMblBf0Pcqrvp9xjqLH+bOp5ogVLi01HwrCnD79bp/VtfyOpeGr3NLRgZzImHvms532c+jNbzFFoDdFGyNyis4l01eudE4wRdzcJ6cxhrMVd0l1VK7mc4hwE3jocRleiSJBE0J3hrxkPGpcHco6u2wW8majmuk2FLfvEgcOh0xKT3N9DQsecIx6cCtIJu8Krr7IdVJvNBB1v9AzNb4lwjNkLzBDJB0OOKF21a12wJo+WFhMqJkf5ktAU8TthBB51/NHTxDyOD5gBFIhVtesow0hQhZmdO84LC4b+KJIGIM+i5MlFB3GeEmjhYF2BvMmcXfzJdPC9UZx5T guoshizhan@guoshizhan |
复制好自己的公钥,然后去 GitHub 网站,点击自己头像 ,选择 settings
,此时进入到另一个页面,选择左侧的 SSH and GPA keys
,如下图:
点击 add SSH key
,然后验证一下 GitHub 账户的密码,这样就添加成功了。这样做的 目的就是: 不需要输入账号密码,也可以和 GitHub 服务器进行通信,也可以保证通信的安全可靠。虽然生成密钥及配置有点麻烦,但是后面操作的时候就翻方便多了。而不是像 HTTPS 那样了,每操作一次,就输入一次账号密码,头都大了。成功添加 SSH key 如下图:
推送到远程仓库
第一种方式:命令行。 在 repo_1
目录下点击右键,选择 Git Bash Here
,相关操作如下图:
TIPS:
origin 是个别名,代表 远程仓库 ,你也可以叫 aaa 或者其他的名字,都行,无所谓的。
第二种方式:TortoiseGit 图形界面方式。 在 repo_1
目录下点击右键,选择 Git Sync...
,相关操作如下图:
接下来介绍 HTTPS 通信方式,通过此方式推送到远程仓库。
HTTPS 方式
在本地仓库新建 https.txt
文件,然后添加到本地仓库。这样做是为了区分是否推送成功。首先: 复制 HTTPS 连接,如下图:
接着: 在 repo_1
目录下点击右键,选择 Git Sync...
,相关操作如下图:
克隆远程仓库到本地
第一种方式:命令行。 在 repo_1
目录下点击右键,选择 Git Bash Here
,相关操作如下图:
TIPS:
克隆下来的代码和远程仓库是一模一样的,提交次数、修改信息等等都可以查看。
第二种方式:TortoiseGit 图形界面方式。 在 Repositories
目录下新建 test 文件夹
,然后进入文件夹,点击鼠标右键,选择 Git clone
,【提前复制好远程仓库 HTTPS 连接或者 SSH 连接】 如下图:
推送修改文件和拉取最新文件
推送修改文件
如果我们在本地仓库新建了一个 XYZ.txt
文件,并把这个文件添加到本地版本库,即本地仓库。那么远程仓库是没有这个文件的,我们应该把我们的修改提交到远程仓库,如何做?这里就用文字描述了,就不上图片了。步骤: 点击右键
–> Git Sync...
–> push
,等待推送完成即可。完成之后去远程仓库查看,就发现多了 XYZ.txt 文件。这里要注意:推送的时候要选择对应的远程仓库,别推送错了。其次,建议使用 SSH 方式,使用 HTTPS 方式输账号密码好烦,软件好像没有记忆功能,我太难了。最后说一下,以为我是用的是英文版的 TortoiseGit ,所以都是 Git Sync… 、push 等等之类的,他们对应的中文是 同步, 推送,只要看的懂就行了,不行就查一下嘛,问题不大。
拉取最新文件
加入别人推送了最新的代码,我们应该如何把它拉取到本地呢?仍然是文字教程,就不上图了。在你的本地仓库下点击右键,Git Sync… ,然后选择左侧的 pull 。 注意:远程仓库地址要选好,别拉取错了。拉取完成之后,本地仓库就是最新的了。
冲突问题
冲突问题的产生: A 程序员修改了 aa.txt 文件,并推送到了远程仓库。然而,在 A 程序员推送到远程仓库之前,B 程序员也修改了 aa.txt 文件,B 程序员修改完之后,A 程序员已经把代码推送到了远程仓库。但是,此时的 B 程序员也想推送到远程仓库,但是发现报错了,推送不了了。B 程序员想拉取远程仓库代码,拉取也不行了。这就是冲突。冲突产生的原因: 同时修改同一个文件,然后推送后导致本地仓库和远程仓库不一致。解决办法:手动解决,只能自己去决定采用 A 程序员修改的还是 B 程序员修改的。
此处都是文字描述,不好参照。限于时间的关系,只能这样了,有时间的话,我会重新给这一部分加上图片描述。
搭建私有 Git 服务器
远程仓库实际上和本地仓库没啥不同,纯粹为了 7x24 小时开机并交换大家的修改。GitHub 就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给 GitHub 交保护费,那就只能自己搭建一台 Git 服务器作为私有仓库使用。
需要的工具:
1、一台 Linux 虚拟主机或者云主机
2、远程连接工具(云主机需要,虚拟机可用可不用) 推荐:SecureCRT
搭建步骤
第一步:
安装 C 语言环境:
1 | yum -y install curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel gcc cc |
第二步:
发送 git 压缩包到服务器,git-2.5.0 压缩包下载 步骤如下图:
接下来的内容我就不再写了,直接给个压缩包,里面 软件和文字版教程 都有,点击右侧下载即可。 git 所有资料