git简单使用
?
git 简介:
git 是一个分布式版本控制系统软件(dvcs,distributed version control system)。可以这么理解,在公共服务器上有一份git控制的工程,在本地clone后得到一份拷贝的工程,拷贝到本地后就可以把本地的git追踪的工程(也就是拷贝过来的工程)当做一个本地的控制系统,在这进行一系列的操作,添加,修改,删除等,之后感觉写的差不多了,或者需要到远程公共服务器上备份或者提交一下了,然后就 ?push 给 公共服务器,就可以把工作上交上去了。git的特点在于一旦clone后就可以在本地进行一系列的操作,你可能要说了那个cvs不能啊,是啊,关键是他可以把这些操作记录在本地的git上,使得这些中间提交的小步骤都可以记录,最后向服务器提交的时候是一个比较完整的版本。可以打个比方,服务器上有个照相机,它每天会在一个时刻照一张相保留版本的状态作为记录,当我们把这张照片取到本地之后,知道版本原来什么样子,传统的cvs是继续在这张照片上继续修改,最后提交给服务器,服务器保留最后的版本,但是在我们自己修改的过程中,我们无法追踪从下载下来到修改到现在这段时间的过程。git就很好的解决了这个问题,因为人家是分布式的,当下载到本地后,就归本地管了,本地继续追踪,完事后再提交给服务器,相当于全局有个大boos管,局部还有个小boss管,各自不乱。
?
git的架构:主要的三个概念: 工作目录(working direcotry)、|暂存区(staging area)、git仓库(git directory (repository))|。
工作目录:就是工作目录呗,进行修改的工作目录
暂存区:将要提交到git仓库的存放文件的一个区域,记住已经和工作目录区分开来了
git仓库:存放已经入库的东西。
其中暂存区和git仓库都在 .git一个隐藏的目录下存放着。
?
怎么它提出一个暂存区的概念呢?我个人理解是一是减少存储次数,另一个是方便撤销更改神马的。总之记住git的提交过程是先将工作目录”新“内容提交给暂存区,然后再提交给git仓库。
?
git的存储思想不是跟踪一个个单独的文件,对文件进行增量跟踪,git的思想是全局思想,把整个工作目录在存储的时候做一个snapshot(快照),相当于一个微型文件系统一样。快照中存储的对象(也就是存成了什么东西)有(提交
?
对象(commit)、二进制对象(blob)、 树对象(tree)或者标签对象(tag))。这些对象都用sha1摘要算法生成一个40位十六进制的指纹以用以区分彼此。
?
git 安装:
=========
REDHAT: ?yum install git-core
? ? ? ? ? yum install git-svn git-email git-gui gitk
Debian: ? apt-get install git-core
? ? ? ? ? apt-get install git-doc git-svn git-email git-gui gitk
源码安装:
安装前需要先安装依赖库:
REDHAT:
yum install curl-devel expat-devel gettext-devel \
? openssl-devel zlib-devel ? ? ?
Debian:
apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
? libz-dev libssl-dev
?
然后从官网 http://git-scm.com/下载包即可
?
?
简单配置:
=======
需要设定一下用户名和邮件地址方便提交时做记录。
$git config --global user.name username
$git config --global user.email mailaddress@mail
?
git在三个地方有配置文件: 系统中,登录用户,git仓库文件夹
$git config --system ?配置的是 ?/etc/git/config
$git config --global ? 配置的是 ?~/.git/config
$git config ? ? ? ? ? ? ? ?配置的是 ?./.git/config
?
优先级别是从 git仓库文件夹,登录用户,系统。记住一句话就是:县官不如现管就好了,离的最近权限就越大。
?
?
git的使用:
?
建立初始仓库:
=============
(1)从将原有工程提取到一个git仓库中:
假设目录为 work
$cd work
$git init ? ?#初始化一个空的git仓库
$git add . ? #添加当前所有进暂存区
$git commit -m 'initalized workspace' ?#把暂存区内容提交到git仓库中,并添加提交说明,不添加提交说明是不会让提交滴。
$cd ..
$mkdir repo ? #在适当的地方创建一个当做服务器控制系统的文件夹
$cd repo
$git clone --bare ../work . #提取之前的work下的仓库作为一个bare(干净的没有工作区的)仓库,专门存储用
把这个repo目录拷贝到服务器的某个文件下
之后再从本地clone一下
$cd work
$git clone username@hostname_or_ip:paht/to/the/repo . ? #从服务器上再clone一遍,主要是为了和服务器连接上,和服务器版本对接,方便之后的提交(ssh方式通信)
-----------------------------------------------------
$......(自己看着干活吧)
$git add . ? ?# 再次添加到暂存区
$git commit -m 'blablabla.....' ?#提交到本地的git仓库
------------------repeat many times------------------
$git push ? ? # 因为之前有clone了,所以有个remote的名字为origin,当不加push到哪时,会使用origin,这样就提交到了服务器上,当然了会让你输入密码的。
?
ok,现在服务器上有一份备份,本地有一份备份,比较安全了。晚上加班的话可以带着本回家干活,第二天到公司push到服务器上。
?
?
常用操作
=======
1)重命名文件:
git mv oldname newname ? # 为啥用git的命令呢,因为这样重命名的文件可以被git追踪到更改,否则就认为是delete oldnamefile,然后create newfilenme了,不连贯了。
2)分支:分支这个概念怎么讲呢,就是可以理解为从最开始的版本衍生出了很多版本比如说vip版本,普通版本,test版,release版等等,也可以想象成一棵大树分出的大的粗枝,但是git这棵大树里的树枝很特别,怎么个特别法呢,
?
他的树枝可以合并,主干,又叫主干分支(master)是不能删除的,它可以合并其他的分支。这样才能保证他长的越来越高啊。
首先是查看分支: ?$ git branch
那怎么创建分支呢?: $ git branch branchname
但是创建了分支并没有转到分支上工作,怎么转呢?简单
$git checkout branchname ?#这样就转到分支上工作了,在这个分支继续生长,理解成到大这个树枝的尖了,在尖上继续生长
?
合并分支:一般是把其他分支合并到主分支(master)上
$git checkout master ? #转到主分支上
$git merge branchname ?#将branchname对应的分支合并到master分支上,如果有冲突会提示让你手动解决冲突
?
?
当然了git的功能很强大,既然追踪了就不仅仅是只能转到分支上开发这么简单,对于每次提交,都可以回退回去
git checkout ?sha1num 至少前五位的码(就是前面说的40位的十六进制的前5位,如果不能区分再添几位即可),达到可区分就行
?
?
比如说我想恢复到某次提交的状态:
先查看那次状态对应的sha1num是啥
$git log
找到后就可以checkout了,就是转到那里
$git checkout sha1num
?
3)删除文件,最好也用 git命令,好处和重命名类似,不用再次提交了
$git rm filename
?
4) 从git仓库还原某个文件
$git reset HEAD <file> ? #HEAD的意思是上次提交到git仓库的那一版 file就是具体的文件名了,名字也可以用sha1num代替
如果想全部恢复
$git reset --hard HEAD ?#注意,此命令慎用,会丢失现在所有的修改,强制覆盖为上次提交到git仓库中的情况。
?
?
5)打标签,就是方便提取什么的(可以认为是某个阶段的小成品了)。
查看标签:$git tag ??
添加标签:$git tag -a tagname -m 'some note' ?#添加带注释的标签一定要要有“-a”参数,注释用-m参数,不加的话git会自动调用编辑器让你添加。
简单的添加标签,不加注释: $git tag tagname
?
?
一些不错的资料 ? ? ? ? ? ? ?
【1】Git笔记-基础??http://www.cnblogs.com/shihao/archive/2011/12/24/2300198.html
?基本的总结不错,适合回忆,现查
【2】Pro Git ?英文版 ??http://progit.org/book/
?原理讲的很好,有时间的话最好从这看起 ?
【3】Pro Git ?中文版 ??http://progit.org/2010/06/09/pro-git-zh.html
【4】Pro Git 中英文对照版 ??http://www.elvuel.com/progit-zh/01-introduction.html