由于一直以来开发的项目复杂程度都较低,而且更没能牵涉到多人开发的项目,所以代码的版本控制一直没能牵涉到,这次为了持续开发晶晶在线,代码容量大增,而且开发过程不能持续,为了便于开发的代码管理,开始学习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官方网站:https://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命令概要手册(图片):去看看
哟嚯,本文评论功能关闭啦~