Git扫盲记录

Git扫盲记录

因为项目需要进行版本管理,这两天花了一些时间学习了一下Git的使用,怕以后忘了所以把它记录下来。主要是一些很基本的操作以及背后原理的理解,算是初步学会基本的使用,但是Git的功能实在是太多了,还有很多未解之谜等待以后用到的时候再学。

SVN与Git的区别

目前的版本管理工具主要有两类,一类是以SVN为代表的集中式版本管理工具,另一类是以Git为代表的分布式版本管理工具。
SVN的使用一般需要搭建一个SVN服务器,服务器作为集中式代码仓库,开发者做开发的时候首先从SVN服务器中获取最新版本的代码到自己的电脑上,然后进行开发,最后工作结束时把代码提交到SVN服务器。在整个工作过程中,只有SVN服务器上是有代码版本管理仓库的,开发者自己本地的电脑上只有代码的拷贝,并没有在本地建立仓库。也就是说开发者本地的电脑仅仅是一个工作场所,进行增删改代码,然后把工作成果提交到SVN服务器进行版本控制。如果离开了服务器(例如断网了),本地并不能进行代码的提交以及一切版本管理控制工作。可以这样认为,SVN服务器是一个公共代码库,每一个人都把自己的工作提交上去以推动项目的进行,开发者能从公共代码仓库拷贝当前最新版本已经过往版本的代码到本地以进行开发,但本地是没有建立仓库的。
Git与SVN最大的区别就是,在Git的使用里面,每一个开发者本地都有一个完整的项目仓库。Git的使用可以有远程代码仓库(它不是中央仓库,它只是一个为了方便所有开发者进行代码同步的远程仓库而已),也可以没有。但是为了方便项目的共享和同步,一般都会使用远程仓库,比如GitHub、GitLab。如果不使用远程仓库,开发者也可以相互之间通过克隆对方的仓库以进行项目同步,只是有点不方便而已(因为你可能不知道究竟谁的仓库才是最新版的,如果通过协商大家把代码都汇集到一个leader,那么其实这个leader就相当于远程仓库了)。因为每一个开发者本地都有一个完整的项目仓库,因此在断网的时候可以先把代码提交到本地仓库进行版本控制,等恢复网络的时候再把本地仓库同步到远程仓库。
可以这么说,Git可以是玩单机版,也可以玩网络版的,但SVN只能玩网络版的。

工具准备

  • Git for windows
  • TortoiseGit
  • GitLab
    我使用的是win7系统,因此在win7下使用Git的第一步就是安装Git for windows。Git for windows包含了一个自带的命令行和GUI工具,这个必须要安装。
    对于熟悉Git的人来说其实只要安装Git for windows就足够了,使用它的命令行进行操作逼格不是一般高。但是直接使用命令行对于我来说还是很不习惯,而使用它自带的GUI感觉界面不太美观。因此我使用TortoiseGit作为操作插件工具。TortoiseGit提供了方便的操作Git的方式,说白了就是把Git的命令进行了封装,提供基于鼠标右键弹出的菜单随便点击就能操作的功能。如下图:
    在这里插入图片描述
    GitLab是一个免费的代码托管平台(当然也有收费的服务),有点像GitHub,但是它比GitHub好的地方在于它能免费的创建私有项目(在GitHub创建私有项目是要收费的,如果不交钱就只能创建公开的项目,那么任何人都能看到你的代码)。对于GitLab,前期的工作主要就是在其官网上注册账号。但是很奇怪的一点就是我注册的时候居然收不到邮箱验证的邮件,无论如何怎么都收不到。后来我是使用它提供的第三方GitHub登陆进行登陆的。

特别注意!!!关于Git的CRLF、LF的自动转换!!

CRLF是windows默认的换行符,LF是unix、mac os操作系统默认的换行符。Git for windows在安装的时候有那么一个邪恶的选项如图:
在这里插入图片描述
这里要你选择的是是否使用它提供的换行符自动转换功能,默认是使用自动转换功能(也就是第一项)。为什么说这个选项邪恶呢?因为它会在你不知情的情况之下偷偷地修改你的文本,当你从仓库检出文本时Git会自动把换行符一律转换成windows默认的CRLF;当你要把文本提交到仓库时,Git会自动把换行符一律转换成LF进行提交(牛逼吧?一个版本控制工具会偷偷修改你的代码,想想都觉得兴奋)。
Git提供这个功能的初衷我相信是好的,它是为了兼顾跨平台的项目的版本控制,让跨平台项目不用担心换行符的差异问题。但是这样做在实际操作中会有大问题,比如说我从一个远程仓库中检出一个unix的文本文件,就在我检出的一瞬间,即使我什么都还没修改,但是整个文本都已经标记为已修改,一检查差异会发现整个文本每一行都被标记为差异。这是因为在检出的时候Git偷偷地把换行符从unix的LF改成windows的CRLF,所以Git会认为文本已经被修改(是Git自己修改的,又不是我修改的)。这样的话,当你修改了文本以后想看看自己究竟修改了什么,一看差异检测,发现整个文本每一行都被你修改过了,非常兴奋。
那么为了保证跨平台项目能够进行项目管理,但也不想Git去偷偷地动我的代码,该怎么办呢?
我使用的方案就是:
第一步、关闭Git换行符自动转换功能,在上图直接选第3项,如果已经不幸误选了也不用重新安装,只需要打开Git Bash命令行,输入如下命令将core.autocrlf设为false即可

git config --global core.autocrlf false

第二步、把自己使用的文本编辑器的换行符设置为LF。比如说我自己使用的是MyEclipse,那我就把MyEclipse的换行符设置为LF。各种文本编辑器的设置有差异,要自己百度。
第三步、使用以下命令把Git的core.safecrlf设置为true,以在提交时检测文本是否混用换行符,若混用则提交失败。

git config --global core.safecrlf true

第四步、让项目组的所有人遵循以上规则,谁不遵守就打他一顿。
这样既保证换行符一致,也保证Git不会偷偷修改我的文本。

TortoiseGit的首次使用向导

在安装完TortoiseGit之后可以选择启动首次使用向导,当然啦你也可以在任何时候通过点击鼠标右键找到TortoiseGit选择“设置”进行启动该向导。
第一步是让你选择语言,可以在TortoiseGit的官网下载简体中文语言包,双击安装之后,点击“刷新”按钮,就能够在下拉菜单看到“简体中文”的选项,对于英文一般的我来说还是看中文比较好。
在这里插入图片描述
下一步是让你选择Git命令工具的路径,一般会自动识别,如果识别失败你就把Git安装路径的bin文件夹路径填上即可。
在这里插入图片描述
接着下一步,是要设置用户名称和邮箱地址。这里的用户名称和邮箱地址仅仅是用于commit时候的署名,不用于任何身份验证。之前我以为这里的用户名称要和我的GitLab账号名称一样,其实不需要,它仅仅是一个署名性质的信息。所以这里你自己想填什么就填什么。TortoiseGit最后还是依赖于Git for windows,因此所有的设置其实最后都会设置到Git for windows的配置文件,你也可以通过Git Bash命令行进行设置,只是这里图形化界面比较方便而已。
在这里插入图片描述
然后下一步是让你生成PuTTY秘钥对。如果你已经有秘钥对的话可以直接点击“完成”按钮就行,不然可以点击“生成PuTTY秘钥对”按钮进行秘钥生成。
在这里插入图片描述
这里稍微提一下PuTTY秘钥对的使用过程。首先秘钥对其实包含两个文件,一个是公钥文件,一个是私钥文件。公钥文件放在需要身份验证的平台,我们这里就是用来放在GitLab的,私钥文件要保管好不要让别人拿到。在我们请求GitLab进行身份验证SSH登陆时,GitLab首先把一串随机字节发过来,我们拿到该字节串之后使用私钥对其进行加密然后把加密后的信息发回去。GitLab拿到加密的信息后使用我们存放在上面的公钥对信息进行解密,假如解密出来的字节串跟原来的一样,则身份验证成功,否则身份验证失败。通过这种方式,整个身份验证过程不需要GitLab的密码和账号信息,显得十分安全,当然啦我们要保管好自己的私钥文件不要让别人拿到,而且要预先把公钥放在GitLab上。
点击“生成PuTTY秘钥对”按钮进入生成秘钥对界面,点击“Generate”按钮开始生成秘钥对。注意在生成秘钥对的过程中要不断移动你的鼠标,因为它是用你鼠标的坐标作为随机数来生成秘钥的,你不移动鼠标它那个进度条不动的!!
在这里插入图片描述
当秘钥对生成完毕之后就能得到公钥文件和私钥文件。对于私钥文件,点击“Save private key”按钮,把私钥文件保存在本地,其后缀为“.ppk”,后面从GitLab克隆仓库、往GitLab推送更新的时候要用到私钥文件。
在这里插入图片描述
对于公钥,登陆GitLab账号,找到[User Settings]->[SSH Keys],把刚刚生成的公钥字符串复制到如图所示地方,点击“Add key”进行保存即可。
在这里插入图片描述
至此即可完成TortoiseGit初始化向导,本地有权限可以跟我自己的GitLab仓库进行通信。

Git的基本原理

学习Git一开始会比较混乱,因为它的内容比较多,涉及到很多新的概念。这里提供一个学习Git很好的资料,就是其官方学习资料,点击这里官方学习资料即可获取。这个官方资料学习起来非常方便,直接就是简体中文,简直适合快速入门。它的内容很多,有八九章的内容,如果你时间不多的话你可以花一个半小时的时间只学习前四章就已经可以对其基本原理有一个大致的了解。
对于我来说Git的学习主要是弄懂一些经常用的关键知识点,它们是:工作空间、暂存区、本地仓库、远程仓库、add、commit、Head引用、master引用、标签引用、checkout、reset(soft/hard)、origin、合并、变基(一个邪恶的名称)、本地分支跟踪远程分支。只要对这些知识点有了概念,那么使用Git的时候就能从逻辑上有一定的信心,能应付实际中90%的情况。

GitLab新建私有工程

当你要把本地的仓库与远程仓库同步,你首先要有一个远程仓库。一个项目的开始首先创建一个远程仓库(这时是空的),然后可以通过克隆的方式把远程仓库克隆到本地以创建本地(空)仓库,也可以在本地项目的工作目录(比如说该工作目录已经有一些文件,需要进行版本管理)通过init的方式来创建本地仓库(此时空)然后通过add、commit之后(此时非空)再通过push推送到远程仓库以进行该工作目录的版本管理(push完之后远程仓库就非空了,跟本地仓库完全一样)。不管怎样,第一步就是创建远程仓库。
登陆GitLab,点击“Create a project”,进入到新建工程界面,输入工程名称、工程URL、选择公有/私有,点击“Create project”进行创建新工程。
在这里插入图片描述

克隆远程仓库到本地

进入到一个空白的工作文件夹,鼠标右键->[Git 克隆],弹出克隆对话框,填写远程仓库URL(从GitLab上项目那里可以找到,这里填SSH类型的URL),勾选需要加载秘钥并填写秘钥文件路径,点击“确定”即可自动把远程仓库克隆到本地。
在这里插入图片描述
这里提一下秘钥文件的加载。当我们克隆完仓库之后,打开“Pageant”(在[开始]->[TortoiseGit]->[Pageant]),可以看到有我们的秘钥文件记录。其实TortoiseGit每次跟远程仓库通信都会从这里找秘钥文件,因此每次使用TortoiseGit进行远程仓库通信时Pageant都要打开。我们克隆仓库的时候可以指定加载秘钥文件的路径,它会自动把该秘钥文件记录到Pageant,下次就会自动在Pageant找,下次进行远程仓库通信不需要勾选指定加载秘钥文件路径也可以。TortoiseGit加载秘钥文件真正起作用的是Pageant,因此进行远程仓库通信的时候别忘了要先启动Pageant。
在这里插入图片描述

TortoiseGit常用操作

进入本地仓库,鼠标右键->“TortoiseGit”,会发现有很多功能可以选用,这些都是Git常用的功能,可以自己点击摸索一下怎么使用。只要你阅读过上面的官方学习资料,这些功能就不难理解了。
在这里插入图片描述

最后

这篇博客算是Git在windows下怎么get start的一个说明,怕自己忘了因此记录一下。Git的使用非常复杂,只有多用多遇到问题才能熟悉其功能。还有很多未解之谜等到以后遇到问题的时候再说吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值