- Git详解
- 关于版本控制
- 本地版本控制
本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的 好处就是简单,但是特别容易犯错。有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
- 集中化的版本控制系统
如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。这类系统,诸如 CVS、Subversion 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
- 分布式版本控制系统
在这类系统中,像Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
- Git简介
git是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。
Git 官方中文手册 https://git-scm.com/book/zh/v2
- Git历史
自2002年开始,林纳斯·托瓦兹决定使用BitKeeper作为Linux内核主要的版本控制系统用以维护代码。因为BitKeeper为专有软件,这个决定在社区中长期遭受质疑。在Linux社区中,特别是理查德·斯托曼与自由软件基金会的成员,主张应该使用开放源代码的软件来作为Linux核心的版本控制系统。林纳斯·托瓦兹曾考虑过采用现成软件作为版本控制系统(例如Monotone),但这些软件都存在一些问题,特别是性能不佳。现成的方案,如CVS的架构,受到林纳斯·托瓦兹的批评。
2005年,安德鲁·垂鸠写了一个简单程序,可以连接BitKeeper的存储库,BitKeeper著作权拥有者拉里·麦沃伊认为安德鲁·垂鸠对BitKeeper内部使用的协议进行逆向工程,决定收回无偿使用BitKeeper的授权。Linux内核开发团队与BitMover公司进行蹉商,但无法解决他们之间的歧见。林纳斯·托瓦兹决定自行开发版本控制系统替代BitKeeper,以十天的时间,编写出第一个git版本
- 安装git
- yum安装Git
[root@centos6 ~]# rpm -qa git #centos 自带git
git-1.7.1-9.el6_9.x86_64 t
[root@centos6 ~]# yum install git -y #
- 编译安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel #安装依赖关系
tar -zxf git-2.0.0.tar.gz # 编译安装
cd git-2.0.0
make configure
./configure –prefix=/usr
make
make install
- 初次运行 Git 前的配置
- 配置git
git config –global user.name “liwenbin” #配置git使用用户
git config –global user.email “liwenbin@moyi365.com” #配置git使用邮箱
git config –global color.ui true #语法高亮
git config –list # 查看全局配置
查看生成的配置文件
[root@gitlab ~]# cat .gitconfig
[user]
name = liwenbin
email = liwenbin@moyi365.com
[color]
ui = true
- 获取帮助
使用Git时需要获取帮助,有三种方法可以找到Git命令的使用手册:
- git help <verb>
- git <verb> –help
- man git-<verb>
例如,要想获得配置命令的手册,执行
git help config
- 获取 Git 仓库
有两种取得 Git 项目仓库的方法。 第一种是在现有项目或目录下导入所有文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库。
- 初始化git server
git init –bare
- 现有目录中初始化仓库(客户端)
如果你打算使用 Git 来对现有的项目进行管理,你只需要进入该项目目录并输入
[root@centos6 ~]# cd git_data/
[root@centos6 git_data]# git init
[root@centos6 git_data]# ls .git/
branches config description HEAD hooks info objects refs
[root@centos6 git_data]# git add .
[root@centos6 git_data]# git commit -m ‘initial project version’
[root@centos6 git_data]# git remote add origin git@cpsd.ekwing.com:liwenbin/ekcpsd.git
[root@centos6 git_data]# git push -u origin master
注意:可以不先创建工程
- 克隆现有的public仓库
如果你想获得一份已经存在了的 Git 仓库的拷贝,比如说,你想为某个开源项目贡献自己的一份力,这时就要用到 git clone 命令。
方式一:
[root@node2 git_job]# git clone https://github.com/rabbitmq/rabbitmq-server.git
Initialized empty Git repository in /root/mysql-5.6.16/git_job/rabbitmq-server/.git/
error: while accessing https://github.com/rabbitmq/rabbitmq-server.git/info/refs
fatal: HTTP request failed
解决:
yum update -y nss curl libcurl
方式二:
[root@node2 git_job]# git clone git@github.com:rabbitmq/rabbitmq-server.git
- 克隆现有的private仓库
方式一:
git clone http://liwenbin:password123@cpsd.ekwing.com/liwenbin/www.git
注意:密码不能存在特殊字符,克隆后之后拉取推送则不需要密码
方式二
如果存在特殊字符,克隆方式如下:
git clone http://liwenbin@cpsd.ekwing.com/liwenbin/www.git
然后交互式输入密码:此后拉取推送一直需要密码,可以修改项目下的.git/config配置文件中的url添加密码,类似不存在特殊字符的拉取方式的url
方式三:
gitlab页面登录–>setting–>SSH Keys–>添加公钥
git clone git@cpsd.ekwing.com:liwenbin/www.git
此时用户对项目的权限随gitlab用户的角色。