版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://jjuan-flake.blogbus.com/logs/106556090.html
由于之前配过CSV使用过SVN,刚接触GIT时不能区分GIT与前类版本控制系统之间的区别,使用对SVN的了解来试图直接使用GIT。但其实两者之间后较大的区别,他们功能相同,实现方式却差异很大。
1.部署差异:
1.1.集中式版本控制系统
SVN与CSV同属于集中式版本控制系统,所谓集中式即进行版本控制权限在服务器上,服务器保存所有文件的修订版,各开发终端只是将服务器上最新的修订版取回,然后提交更改后的版本。终端并不保存文件的所有修订版。
示意图:
这种方式对系统稳定性要求较高,因为只有服务器存储了一个完整的版本。
1.2 分布式版本控制系统
GIT属于分布式版本控制系统,顾名思义,分布式即各终端都参与到整个版本控制系统中来。开发终端保存的不是最新版本的镜像,而是整个版本库,是整个版本控制系统的完整备份。因此每次加入一个已有的代码库时使用的是clone【克隆】操作。
示意图:
2. 存储差异
2.1 差异存储(CVS,SVN)
CVS,SVN这类版本控制系统中,各版本存储的是修改后的文件与原之间的差异信息,每次记录文件内容的具体哪个部分发生了什么变化。
2.2 快照存储
GIT则只关心文件的整体变化,在每次版本变化时将此时的文件状态做一个快照,只保存指向这个快照的索引信息。
3. 对网路的依赖
使用CVS和SVN需时时连接到远程服务器,而git则是在本地维护一个版本库,所以提交等都在本地进行,除非将更改一次性push到远程服务器,否则都不需要连接网络。
一、安装配置(windows)
git 拥有针对各个平台的版本。windows下的有一个模拟shell的版本 msysgit 【http://code.google.com/p/msysgit/】在此下载最新版本。
git的安装过程就是经典的windows的下一步点击过程,如果没有特殊选择,使用默认选项即可。
git安装之后需要做几个配置。配置文件均在msysgit安装目录中etc下。
1 shell终端的配置
msysgit安装之后会在开始菜单里进入shell终端的目录。此shell terminal 使用ls命令时不能列出中文文件。
为了让ls能够列出中文文件,需要加上 --show-control-char 选项,--color=auto 选项时目录和文件有颜色区分。为了可以直接使用ls达到我们所需效果,可在git-completion.bash文件中加入:
alias ls='ls --show-control-char --color=auto'
alias ll='ls -al --show-control-char --color=auto'
给ls命令定义别名
2 git的配置 gitconfig
[gui]
encoding=utf-8
# 设置成代码库一样的编码,以便在git gui中正常显示中文
[i18n]
commitencoding=GB2312
#设置commit说明的编码,windows一般是gb2312
[user]
email = jjuan_flake@sina.com
name = kunjuan
#说明提交用户
3 配置输入终端 inputrc
set output-meta on
set convert-meta off
#使得git bash终端可输入中文
二、git的使用
1. git init
在本地建立版本库时使用此命令处事化一个代码版本控制库
2. git clone [url] [myname]
在本地克隆一个已有的网络上的版本库,url协议可以是git,https等。如果加了myname则重命名版本库的名字为myname,否则使用原名。使用clone命令时无需在本地先为代码库建立一个目录,执行clone后当前目录自动生成代码库的目录。
类似于svn checkout,只是此命令克隆的是整个版本库
3. git add
把新建的一个或多个文件设定成跟踪状态,git开始跟踪这个文件的状态信息。将以跟踪的修改文件暂存。
4. git commit [-m '注释']
提交暂存文件到本地代码库
5. git status
查看本分之中文件跟踪状态
6. git pull
用远程库更新本地库
7. git checkout
git checkout 分支名:切换到某分支下
git checkout 文件名:更新本文件到上次提交的版本
checkout切换分支后,此事文件状态是此分支的,编辑某个文件,则编辑的只是这个分支的文件状态,不会碰触其他分支的本文件。在此文件commit之前checkout到另外的分支后,还是可以看见此文件更改后的信息,在更改的分支commit之后,则切换回之前的分支后就看不见另一个分支更改的部分了。
8. git branch
不加名字即查看所有分支,列表中有*的是当前分支
加名字则新建一个分支,
-b 则 新建并切换至此分分支
9. git merge branchname
将branchname合并到本分支
git的工作流程
检出远程版本库到本地=》[新增文件(设置跟踪)]=》修改=》暂存【add】=》提交到本地代码库的本分支【commit】=》合并的master分支=》在master分支中推到服务器。
分支
一个指向快照的指针。