A Brief Tutorial Of Git
上一篇Gogs的搭建写完之后,我稍微想了一下,可能很多人还是不懂什么是git,我们怎么用git。所以写一篇简单的文章来介绍一下什么是git和怎么使用git。
要注意,这篇教程内容并不多,只会教你上路和简单的问题处理,如果你想深入学习,文末会给出更多信息。
0. 引言
无论是些什么,只要是做一个项目,总会有版本控制的说法。什么是版本控制呢?其实很简单,一份产品,就比如代码,在最终成型前肯定是有很多版本的,而版本管理系统出现就是为了帮你管理这些东西。
在git之前有很多版本管理系统,诸如SVN、Darcs等,而在git出现之后,几乎全世界都开始学习和选择git了——包括Google和微软、苹果等大型企业。
git是Linux之父Linus写的,诞生初衷就是为了给Linux的开发提供一个更好的版本管理工具,这里面还有个故事,有兴趣的同学搜搜看!
值得称道的是,现在的git仍然保持着超凡的活力——2016年Git从v2.7升级到了v2.11,也就意味着有5大新特性被加入,代码提交量也比2015年多出15%。甚至这些代码的管理,也是通过git!
Talk is cheap, show me the code. - Linus Torvalds
相信大家已经了解到了Git的魅力了,那我们就开始讲解吧。
1.安装
安装其实很简单。
如果你是Windows用户,官网下载最新版就行,双击.exe安装就够了。
如果你是Linux用户,使用包管理器安装就行,比如:
|
|
如果你是Mac用户,用Homebrew装就够了,从官网下载或者安装Xcode也可以。
注意,在本篇教程不会讲如何使用GUI客户端来进行管理,一切都是跑在命令行下,如果你想获得有关GUI客户端的内容,可以看官网的GUI统计页面,这里不做更多讲解了。
2.使用
注意:阅读此部分时默认你已经安装好了git而且会使用终端进行git操作。
新建一个库
欢迎开始使用git。首先,当我们要开始内容管理的时候,我们就需要新建一个库,告诉系统:兄弟,你给我管管这里的内容。
1
git init
提交内容
好了,当我安装完毕以后,我写了点东西,比如
readme.md
。现在,让我们看一看git发现了些什么:
1
git status
聪明!git已经发现了我们新建了一个
readme.md
,但是它不确定我们跟不跟踪。当然跟踪!让我们把它添加进去:1
git add readme.md
让我们现在再看一看现在的情况:
1
git status
OK,看来git已经开始管理我们的文件了!让我们推送吧!
1
git commit -m "Add readme.md"
让我们再看看现在的情况
1
git status
结束啦!现在我们的
readme.md
已经被git接管了,大家可以放心修改。修改文件与删除文件
好了,现在我加了两行内容,并且改了一点东西。
1
git status
等会儿,我忘了我刚才的
readme.md
是什么内容了,让我看看我改了些什么:1
git diff readme.md
说了些什么?
-/+
的一组,说明你进行了修改,原先为-
这一行,被你改成了+
这一行-
这一行被删除了+
这一行是新增的
OK,看起来和我想的一样,推送了!
1 2
git add * git commit -m "A test.cpp, test.c; M readme.md"
回溯与取消暂存
Wait!
test.c
不应该提交啊!有大Bug!1 2
git rm test.c git status
没错!推送了~
1
git commit -m "D test.c"
……等会儿,我刚刚想了一下,我没写出Bug!啊啊啊啊!
吓得我看了看我的文件:
1
ls
完了,血崩了。
嘿!不要急,让我们看看之前提交了什么:
1
git log
哇,看到
commit 66fc57567df98723f609842cf43b2b59bb672429
这条commit
的提交就知道我们在这里提交了test.c
,迅速回溯到这一条上!1
git reset --hard 66fc5756
不用写完,它会自己找那个版本。让我们看看怎么样了:
1 2
git status ls
Yes!都回来了!
提示:假如要回到上一个版本,则不用这么麻烦,使用
git reset --hard HEAD^
即可。好了,老老实实干活吧。
1 2
git add * git status
且慢!我刚才加的这个文件似乎还没弄完,不应该现在提交的。
1 2
git reset HEAD important.c git status
OK啦,开始工作吧!
到这里为止,你已经掌握了本地版本跟踪的有关内容了。当然,这并不是全部,很多高级仓库操作可以在更多部分看其他内容学习,但是你现在已经能管理自己的代码了,不是吗?
- 新建一个库:
git init
- 跟踪文件:
git add <文件名>
- 提交更新:
git commit -m "<提交信息>"
- 查看状态:
git status
- 查看修改:
git diff <文件名>
- 删除文件:
git rm <文件名>
- 查看提交历史:
git log
- 版本回溯:
git reset --hard <版本号>
- 撤销文件提交:
git reset HEAD <文件名>
3.网络远程库
欢迎来到有关网络远程库的内容。
网络远程库以Github为例介绍,大家同样可以选择来自国内的优秀git托管服务如Coding或者开源中国(码云)。
怎么注册Github就不做过多提示了,直接前往Github主页跟着提示一步步来就行。
下面重点讲如何使用远程库:
设置你的用户名和邮箱
在一切操作之前,请先设置你的git用户名和邮箱
1 2
git config --global user.name "<用户名>" git config --global user.email "<邮箱>"
然后查看一下
1 2
git config user.name git config user.email
嗯,都对了。
创建仓库与初始化
点击右上角用户头像左边的加号,选择"New repository",创建一个新的在线仓库,我把它命名为test。
之后你会看到这个页面:
这个页面上提供了4种方法来初始化这个仓库,让我们详细了解一下:
克隆
你可以看到它给出了一个链接,你可以使用
1
git clone <链接>
直接把仓库克隆到本地,当然了,克隆的时候会要求你不能克隆到已经内容的地方。
克隆后你可以使用你的账号直接推送上去。
新建仓库并关联到在线仓库
这六行命令讲了什么呢?
1
echo "# test" >> README.md
新建了一个
README.md
文件并把"# test"内容打进去。1 2 3
git init git add README.md git commit -m "first commit"
这里大家应该都知道,初始化仓库→跟踪
README.md
,更新仓库。关键是这两句:
1 2
git remote add origin https://github.com/lxdlam/test.git git push -u origin master
这两行是关键,第一行说明了添加一个名字为"origin"的远程仓库,这个仓库地址为"https://github.com/lxdlam/test.git"。
第二行说明了把现有内容推送到origin这个远程仓库的master分支(这篇文章不讲分支的,请看更多部分来进行学习。)
注意:
-u
参数仅在首次使用时需要添加。关联已有仓库到在线仓库
其实就是刚才所说的两行命令:
1 2
git remote add origin https://github.com/lxdlam/test.git git push -u origin master
从其他地方导入代码
(这就触及到我的知识盲区了.jpg)这部分不在本文的讨论内容中,略过~
四个方法介绍完了,我们自然选择第三个。
在推送过程中,git会向你提出认证请求,登陆你的Github即可。(我的地址和你们看起来不一样,因为这是配置了SSH私钥的关系,这部分也不在本文讨论范围内)。
查看在线仓库以及获取更新
假设你在某个地方更新了内容,然后回到了家,想起来你写的那个功能没写完,那就下载下来写吧!
首先看看改了什么:
1
git fetch
这条命令会向在线仓库请求目前最新的状态信息,你发现有更新,于是
1
git pull
这条命令从在线仓库下载更新后的最新仓库。
好了,开始工作吧!
解决冲突
这天你睡眼惺忪,在家写了个功能匆匆忙忙提交上去就跑了。然后你又在另一台电脑上写了个新功能,然后打算提交。但是你迷糊,git可不迷糊:
哇!尴尬!
赶快看看是发生了什么:
1 2
git fetch git status
按提示试试看:
1
git pull
Oops,好像不对,再看看是发生了什么:
1
git status
这下结果很明显了,是
ok.c
出问题了。看看什么问题:1
git diff ok.c
- 提示符
++<<<<<<< HEAD
下面的内容是当前本地HEAD
分支下文件内容 - 提示符
++=======
分隔两个冲突分支 - 提示符
++>>>>>>> <commit id>
上面的内容是在commit id
分支下的内容。
那么我们怎么解决这个冲突呢?
- 我们可以编辑,比如备份一下本地的
ok.c
,然后改成和在线库一样,然后git pull
,再做修改。 - 使用
git mergetool
,这是一个交互式合并工具,会挨个询问你冲突文件该怎么办,回答即可。
具体的自行选择吧。(关于mergetool的选择不在本文讨论范围内)。
最后不要忘了推送现在的修改:
1
git push origin master
好了,介绍到现在也就结束了,相信你已经会使用自己的在线托管仓库了。
- 提示符
然而,这篇教程简单到根本没讲多人协作,所以你可以看更多部分的其他教程学习多人协作中多分支的使用、如何创建更新标签,以及如何设置忽略策略等。
- 克隆一个在线仓库:
git clone <仓库地址>
- 关联本地仓库到在线仓库:
git remote add <仓库名> <仓库地址>
- 推送本地仓库:
git push origin master
- 查看在线仓库信息:
git fetch
- 从在线仓库下载更新:
git pull
- 冲突解决的一般顺序:
git fetch
→git pull
→git diff <相关文件>
→进行冲突解决处理
4.更多
正如开头所说,我只引大家上路并处理一下简单的问题,更多的操作,你可以参考:
当然,你也可以买两本书看看:
当然了,Github也有很多玩法,比如用Pages托管一份自己的博客(我之后可能会写文)等等。
还有,你也可以选择搭建自己的Git服务,一台服务器,跑上一个Linux系统就行,选择腾讯云这些来搭建都是很推荐哒。具体你可以参考:
最关键的,现在你已经知道怎么获取他人的代码了,从现在开始,去Github上找自己喜欢的代码开始学习吧。
更大的世界等待着你!