您的位置:晶晶的博客>Linux>分布式版本控制系统Git初体验

分布式版本控制系统Git初体验

由于一直以来开发的项目复杂程度都较低,而且更没能牵涉到多人开发的项目,所以代码的版本控制一直没能牵涉到,这次为了持续开发晶晶在线,代码容量大增,而且开发过程不能持续,为了便于开发的代码管理,开始学习linux内核代码管理工具---Git

Git简介

Git的诞生很有趣味性:

Linus在1991年创建了开源的Linux,Linux这种开源系统是集中全球开发者智慧的,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码(可以想象合并、效验代码的工作量有多麻烦!)。不过到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,Linux社区也对这种手工方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。Linux社区中的开发者(们)试图破解BitKeeper的协议(商业性软件用到开源系统代码管理中,这种矛盾迟早会爆发),结果呢,这种破解行为被BitMover公司发现了,于是BitMover公司怒了,要收回Linux社区的免费使用权。

其实呢,这种情况下,Linus可以向BitMover公司道个歉,保证以后严格Linux社区,就可以继续使用BitKeeper工具了。但是,牛人就是牛人,道歉是不可能的。于是Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git,随后一个月之内,Linux系统的源码就由Git来管理了。

参考一些网络上的信息,08的时候Linux系统的代码行数就已达到并超过1000万行,如此庞大的代码量都可以使用Git来管理,随便一个文本类型的代码管理不在话下;这也是选择Git,而不是svn之类的原因所在。

Git上手

本文呢也是很初级的,算作是学习笔记吧~Git是个分布式版本管理系统(软件),传统的cvs或svn都是集中式的,分布式就可以有多个版本管理库的分布,包括本地和远程,最为关键的是分布式情况下,本地的开发版本管理可以不依赖远程库。上述这些语句太绕了,简单点说就是Git安装了就可以在本地电脑上用,等到需要时也可以配合远程Git服务器使用;至于怎么用,你爱怎么用就怎么用!至于分布式、集中式版本控制工具的区别就不多赘述了。

Git安装配置就不多说了,网上有太多的教程,留一个网页教程,还比较浅显易懂:去看看

---

Git官方网站:http://www.git-scm.com (对,官方网站域名很绕,不是git.com)

---

我的本地开发环境是win7下安装Oracle VM VirtualBox虚拟化软件,然后在Oracle VM VirtualBox里安装了Centos6.5_x64实现的(centos内安装一个Samba即可很方便的与win7交互),所以实际上手环境是Linux,而非Windows

1、安装Git

yum install git

2、创建空目录并初始化git工作环境

cd /var/www/wwwRoot #进入已创建好的空工作目录
git init #在该目录初始化git工作环境

3、git全局配置

git config --global user.name "Jea杨" 
#配置全局用户名称 依据实际情况配置即可 可以使用中文
git config --global user.email "jjonline@jjonline.cn" 
#配置全局用户邮箱 依据实际情况配置即可

4、移动已有开发文件至空工作环境目录或在工作目录中开始写代码(本例也就是/var/www/wwwRoot)

...

5、工作目录已有代码文件,加入git版本控制

git add . 
#.表示加入所有尚未添加至git版本控制的文件
#也可以 git add file_name

6、提交文件到仓库

git commit -m "这里是对这个提交的一些说明或注释,方便自己查阅,内容就依据自我喜好了"

这样,一个简单的版本仓库就完成了,当然git功能不会如此简单,还有更实用于开发环境下的诸如各种新功能开发、bug修复、多人开发的分支(branch)功能,就不多介绍了。

---

忽略Git版本库下某些文件的版本控制

1、在工作目录下创建一个.gitignore文件,该文件中写入忽略规则即可。

拿本例来说,也就是在/var/www/wwwRoot/目录下创建一个.gitignore文件并写入忽略规则即可【注意:文件位置必须是git仓库的根目录下,并且文件名称必须是.gitignore,本例也就是/var/www/wwwRoot/.gitignore!!当然也可以修改,就比较麻烦了,反过来看修改这玩意有意义么?】。一般而言,创建.gitignore文件是在git init之前执行;但万事岂能一步到位~这是后话

.gitignore的基本规则如下:

#注意!!!以“#”开头的都是注释说明 写入到.gitignore也没影响
#本例忽略/var/www/wwwRoot/版本库中所有 .png 结尾的文件
*.png
# 但sprite.png 除外
!sprite.png
# 仅仅忽略项目根目录下的Runtime文件
# 本例也就是忽略/var/www/wwwRoot/Runtime/文件夹下所有文件(夹)
# 倘若存在/var/www/wwwRoot/Soft/Runtime/ 是不会被忽略的
/Runtime
# 忽略 Conf/ 目录下的所有文件
Conf/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt

2、全局性质的忽略

第一种方式是在该版本库忽略,而切换到别版本库就不会起作用了,那么想让全局都有作用怎么做呢?这就牵涉到git全局配置了,网络上的文章,大多一笔带过,说的不太清楚。

也就是利用git config --global core.excludesfile "gitignoreFileDir" 项来配置,看命令就很容易理解了,配置一个全局忽略项目,而且是通过指定加载的忽略规则文件,既然是加载全局忽略配置文件,那么该命令中的gitignoreFileDir就可以是任意位置的文本文件(当然文件规则需符合要求)

#先编写一个全局忽略规则文件 保存位置任意 假设为该文件:/var/git/.quanjugitignore 
#在该文件编辑好规则并保存后执行git全局配置
git config --global core.excludesfile "/var/git/.quanjugitignore"
#搞定收工
#网上的文章都是将这个文件命名成 ~/.gitignore 当然也可以,只是不便于理解

3、git版本库中已有不想被版本记录的文件--git版本库中存在了想要忽略但却忘了忽略的文件

这是一个坑,因为鄙人的是web开发,有许多图片文件不需要被记录,但最开始git init的时候被没有书写.gitigore文件;怎么办呢?

正确的做法应该是:git rm --cached fileDir,然后更新 .gitignore 忽略掉目标文件,然后提交修改也就是:

git add .

最后提交至版本库:

git commit -m "这里是注释或标记说明,内容任意,随你喜好。不过有意义一些较为妥当"

#删除git仓库中已有的需要被忽略的记录
git rm --cached /var/www/wwwRoot/Uploads/Images/2014110111.jpg
#要删除文件夹怎么办?比如/var/www/wwwRoot/Uploads/Images/所有图片文件
git rm -r -cached /var/www/wwwRoot/Uploads/Images/
#或者
git rm  -cached /var/www/wwwRoot/Uploads/Images/*
#删除需要忽略却被版本库记录的文件完成后 参考上述两种忽略规则 完善忽略规则
#然后提交修改
git add .
#然后提交至仓库 搞定收工
git commit -m "重载忽略规则"

最后附上一张git命令概要手册(图片):去看看

转载请注明本文标题和链接:《分布式版本控制系统Git初体验

相关推荐

网友评论2

路人甲 表情
Ctrl+Enter快速提交
  1. #1

    你好博主,用了你的主题J2 要怎么实现你上面的代码插入的格式呢,主题自带吗 还是要额外的插件呢

    eagle 2年前 (2015-07-23) 回复
    • @eagle:http://blog.jjonline.cn/theme/J2.html 在此

      晶晶 2年前 (2015-07-23) 回复