关闭

git 知晓

426人阅读 评论(1) 收藏 举报
分类:

一、本地版本控制系统

很久以前人们就开始考虑版本控制的问题,因为简单的通过复制整个项目目录的方式来保存不同的版本虽然操作简单,但是缺点显而易见。为解决此类问题,人们开发出本地版本控制系统,大多是采用简单的数据库方式来记录文件的历史更新差异,如图:

Git 简介

 

二、集中化的版本控制系统

很快人们遇到一个新的问题,即如何让不同系统下的开发者协同工作?于是,集中化的版本控制系统( Centralized Version Control Systems,简称CVCS )应运而生,诸如CVS、SVN等,它们的共同点是都有一个单一的管理服务器,保存整个项目的文件历史,而协同工作的开发者通过客户端连接到服务器,取出 最新的文件或者提交自己的更新。

Git 简介

 

这么做最显而易见的缺点是中央服务器的单点故障。若是宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。


 

三、分布式版本控制系统

分布式版本控制系统( Distributed Version Control System,简称DVCS )。在这类系统中,诸如Git,Mercurial,Bazaar 还有Darcs 等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作的历史用的服务器发生故障,事后都可以用任何 一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。

Git 简介

 

四、文件差异版本控制

CVS、SVN等系统进行版本控制的原理为每次都记录有哪些文件作了更新,其控制原理如图所示:

Git 简介

 

五、直接快照版本控制

Git并不保存这些前后变化的差异数据。实际上,Git更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所 有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git不会再次保存,而只对上次保存的快照作一连接。

Git 简介

 

六、四个状态和三个区域

Git内部只有三个状态,分别是未修改unmodified、修改modified、暂存staged。对于没有加入Git控制的文件,可以视为第四种状态未跟踪untracked。

Git 简介

       Git文件流转有三个区域,分别是工作区域、索引区域、本地数据区域。工作树中的文件添加到git版本控制索引中,则git开始对文件进行跟踪监控。索引区域也可以理解为数据暂存区域,当提交操作时,暂存区域的数据被记录到本地数据仓库中。

Git 简介

七,简单使用git

 

git的优势

git比起传统的版本控制系统,有如下的优势:

  • 分布式版本控制系统
  • 协作开放变得轻松自然
  • 减少开发人员沟通的开销

github

github 是一个网站,同时也是一个项目仓库。我们只要在网站上注册一个帐号,然后就可以在上面免费创建开源项目。利用git这个分布式版本管理系统,我们可以吸引到更多的人关注,加入我们的项目。

github的访问速度挺快的,这也是越来越多人使用它的原因。

证书登录

当然也可以用证书登录,原理跟ssh证书登录一样。参考这篇文章 ssh证书 。

使用证书登录,它是不支持https的方法的,举个例子https://github.com/wuyao721/51docs ,
这个地址可以通过证书做push,pull等操作:

git@github.com:wuyao721/51docs.git

而下面这个地址证书是不起作用的,必须使用用户名和密码:

https://github.com/wuyao721/51docs.git

工具(windows)

github for windows

到 这里 下载windows平台的github客户端。

tortoisegit

使用过程中我觉得 github for windows 并不好用,所以我找到了另外一个工具。

svn 有一个工具叫 tortoisesvn ,那么 git 也有它的 tortoisegit 。

msysgit

tortoisegit的官网告诉我们,它还依赖于 msysgit 。msysgit是核心程序,tortoisegit只是它的皮而已。

值得注意的是,先安装tortoisegit,再安装msysgit。

git-credential-winstore

令人纠结的是tortoisegit没次推送都要填写用户名和密码。网上有人说用 _netrc 来记录用户名密码,我试过是可行的。

_netrc 是明文的,会暴露用户信息,还好有另外一个解决办法。它就是 git-credential-winstore ,从名字可以猜测到这是git在windows用来存储用户名密码的工具。它可适用用于 Windows XP 和 Windows 7 。

怎么使用?只要双击运行它就可以了。

tortoisegit操作 & 观念的转变

windows平台下,我的使用感受是tortoisegit比较好用。所以这里的操作是针对tortoisegit来说的。

像我这种以前没有用过分布式版本管理系统的程序员,学习git不算是特别难的事情,但是也需要一个学习的过程。最主要是观念的转变,我从一开始就想把git当做svn来用,所以用的很不习惯。

本地的版本库

在git的世界里,每个本地的代码库都是一个完整的git系统。使用tortoisegit提交代码(commit),其实只是提交到本地的git版本库。

github的版本库

更新本地版本库后,我们就可以将推送到远程版本库(例如我用的github),合并到master或者其它分支。

常用操作

我在这个列出了一些常见的tortoisegit用法,主要就是操作右键弹出的菜单。

指令(英文版) 指令(中文版) 功能说明 备注
git clone .. git 克隆 .. 克隆一个项目代码库到本地(对应于svn的checkout) 在非版本库目录下右键
git create .. git 在这里创建新版本   在非版本库目录下右键
git sync .. git 同步 .. 弹出对话框,用于同步两个版本库 在版本库目录下右键
pull 拉取 将远程版本库拉到本地版本库 git sync 弹出的对话框
push 推送 将本地版本库推送到远程版本库 git sync 弹出的对话框
git commit .. git 提交 .. 提交到本地版本库,成功后弹出对话框可以推送到远程版本库 在版本库目录下右键
TortoiseGit TortoiseGit 弹出更多菜单,跟tortoisesvn类似 在版本库目录下右键

和tortoisesvn相同的用法

除了 clone , pull , push 这些指令之外,tortoisegit在用法上跟tortoisesvn是差不多的。

工具(linux)

首先,从服务器上下载版本库:

git clone https://github.com/wuyao721/51docs.git

emacs + git-emacs

emacs用户可以通过插件 git-emacs 来操作git版本库。把下面的代码加入 emacs 配置文件:

(global-set-key (kbd "C-c p v g") 'git-status)
(autoload 'git-status "git-status" "subversion interface for emacs" t)

也可以使用 magit ,它也是emacs的插件。

FAQ

Key is already in use

说明这个key已经被某些用户或项目使用了。先查一下是被谁用了:

ssh -T -i ~/.ssh/id_rsa git@github.com

如果这个key被自己的某个项目使用了,那么将它添加在用户设置里而不是项目设置。
如果这个key给其它人用了,那么就换个key吧。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:79795次
    • 积分:1977
    • 等级:
    • 排名:千里之外
    • 原创:118篇
    • 转载:13篇
    • 译文:3篇
    • 评论:6条
    最新评论