git的一些简单用法(一)

来源:互联网 发布:rodriguez 知乎 编辑:程序博客网 时间:2024/06/01 08:38

  虽然github声名远扬,因为轮子用得少一直没用。最近才开始意识到版本控制的重要性,被建议花一天的时间好好学习一下git,于是今天就这么做了。比较了一下文档和几个网站,暂定用廖雪峰老师的教程入门,然后再随便看一个外文网站做对照。

  • 学习准备和环境搭建
  • git基础语法
  • 存储结构和运行机制

当然后两点是学习重点,会在本文里穿插进行,并归纳总结。

一.学习准备和环境搭建

1.下载Git并进行简单设置

下载地址:http://git-scm.com/download/(已经完成这个步骤的可以跳过,它的目的在于保证你正确安装了git。)

如果你在linux下,联机键入sudo apt-get install git-core

(题外话:时间充裕,想要探索git在项目开发中的高级用途的,建议选择Pro Git入门,linux公社就有它的中文版资源,但是不易满足快速入门的需求)

在windows下可以找到完整的安装包,要手动设置的东西不多跟着提示一步一步走下来就好,建议安装全套(Git Bash和Git GUI),Bash是dos界面,GUI更加直观,各有优势,结合使用吧。

安装后以windows为例,powershell里键入git --version,看到版本号即验证成功安装了git。

接下来键入配置,和玩游戏注册一个账号一个道理,不过这时我们还只是在本地玩玩,所以没有设密码,等到我们开始和其他计算机进行交互的时候,就会取一套公钥和私钥作为识别身份的密码了。

$ git config --global user.name Joanna$ git config --global user.email joannadean@foxmai.com

2.初步了解Git

让我们来看看Git的定义:

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. (Git是一个免费的开源分布式版本控制系统,其设计可以满足快速高效开发各种量级项目的需求。)

区别于SVN的集中式,Git采取分布式管理方式。即,SVN把所有信息存储在中央服务器,每个工作站从中央服务器取代码,继续加工,完成后再返回中央服务器,而Git虽然也可能有中央服务器,但它只是为方便交换信息而不是必须存在的,每个人都有整套的代码,只是不断做个体之间的同步(git clone)即可。

我在理解这两个概念时,联系了数字证书信任模型,分布式管理和交叉信任有相似之处,而SVN的集中管理,更像树形的下属层次信任结构。不过这里还是存在不同——分布式管理不会因为某个节点信息丢失而影响大局,还可以从别的节点恢复;而交叉信任可能会因为一个站点证书不安全,导致整张连通图极快地陷入“信任危机”。

至于版本控制系统这个定义,让我们在下一个部分通过用法直接体会吧。

二.基础命令和运行机制

1.创建一个新的版本库(repository)
git init
在一个空目录(folder)下键入这条指令的意义在于:会创建一个.git文件,将这个目录当做版本库管理起来,像开了一本特殊的账单来管理仓库,不是么?
这里写图片描述

2.文件夹,暂存区和版本库之间的来来往往
请允许我先引入暂存区(buffer)这个概念
这里写图片描述
太好了,buffer存在。这代表着你不用仅仅为了保存现场,去突然改个紧急bug而把未完成的代码提交到repository里面去让所有人观摩;或者仅仅是出个未检查到的低级错误什么的留下黑历史。无论是不是处女座,我相信以后你都会爱上它的,虽然现在看起来它的出现有点突兀,并且让你脑中预想的推送这个过程又复杂了一步。

我们在folder里写个空txt文件1.txt,然后在Git Bash里键入:

git add 1.txtgit commit -m "JOANNA V1.0"git state

效果是,1.txt被存储到了暂存区,暂存区的一个快照(snapshot)被提交到版本库,并做了备注”JOANNA V1.0”,最后我们还查看了一下现在的状况,git给出如下信息作为回应:

nothing to commit,working directory clean.

这里写图片描述
如果文件发生了变化,比如我们在1.txt里键入”Hello Git!”
在Git Bash里键入

git diff

git能够为我们显示做出更改的部分

diff --git a\1.txtindex "commit id" "commit"---a\1.txt+++b\1.txt@@ -0,0 +1@@+Hello Git!

做个小提示,想看整个文件的内容就不用git命令咯,不知道你注意到没有,终端命令在git bash里直接用:

cat 1.txt

在git中,回退到上个版本是这样做的:

git reset --hard HEAD^

--hard是模式参数。
HEAD^代表版本库中上个版本,HEAD^^是倒数第二个版本,如果后退的版本过多写不开……倒数第十个版本这样表示:HEAD~10
但是我们如果想要回退”回退”这个动作…..上面的命令就没有用处了。
这就用到另一种回退版本的方式:

git reset --hard "版本号"

想也知道,版本号肯定不能靠死记,git reflog这条命令可以查以往的活动记录,当然,版本号也就不再话下咯。
如果我更改了1.txt文件,但又后悔了,想要把Buffer里的1.txt恢复出来,那么要用到这条命令:

git checkout --1.txt

这里写图片描述

下面我们看看git如何保存一个又一个的版本吧:
你在git init 之后,实际上是创建了master版本分支,这之后的版本从Buffer不断推送到Repository,我们现在所能想象的就是这个简化的样子,因为没有其他分支,所以master和head的指向问题还是存疑的,欢迎指正。
这里写图片描述

今晚没有总结完,下次的内容:
3. 分支与合并
4. 和远程之间的来往——姗姗来迟的github
5. ……

0 0
原创粉丝点击