git是什么
Git是一个分布式版本控制软件,原来是linux内核开发者林纳斯·托瓦兹(Linus Torvalds)为了更好地管理linux内核开发而创立的。自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 速度,分布式,强大的分支。
提到git,不得不回顾下版本管理的历史:
1. 本地版本管理系统 VCS(Version Control Systems)
类似于复制整个目录,加上备份时间加以区别。简单但是容易出错,弄错文件会导致数据丢失没法回退。
2. 集中化版本管理系统 CVCS(Centralized Version Control Systems)
成熟方案:诸如 CVS,Subversion 以及 Perforce 等
特点:都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
缺点是中央服务器的单点故障,会导致无法协同工作,而且还是会存在数据丢失的情况。
3. 分布式管理系统 DVCS(Distributed Version Control System)
成熟的方案:诸如 Git,Mercurial,Bazaar 还有 Darcs 等
客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。每一次的提取操作,实际上都是一次对代码仓库的完整备份。解决来CVCS的缺陷。
git设计思想
git不同于我们之前一直在用的subversion这类工具。它们之间的版本概念是不一样的,svn的版本是对文件粒度的,git的版本则是仓库粒度的,也就是说,git版本管理的最小单位是仓库。
分布式:git中的绝大多数操作(push,pull,fetch,clone除外)都是本地操作,离线状态下也可完成。svn所有的操作都需要网络。
数据完整性:在保持到git之前,都会进进行内容的检验和计算,作为数据的唯一标示和索引。一旦你修改来文件货目录后,git都能立刻觉察。
数据的状态: 已提交,已修改,已暂存。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。
git上手指南
1. 安装git: (osx版,windows版,linux版)
2. 初次运行前的配置:
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量这些变量可以存放在以下三个不同的地方:
* /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用–system 选项,读写的就是这个文件。
* ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用–global 选项,读写的就是这个文件。
* 当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config 里的配置会覆盖/etc/gitconfig 中的同名变量。
如下,修改用户信息:
第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
$ git config –global user.name “yuxiong.wangyx”
$ git config –global user.email yxiong.wang@gmail.com
要检查已有的配置信息,可以使用 git config –list 命令.
3. 创建新仓库
创建一个新文件夹,打开,然后执行
git init
装就可以创建新的git仓库
4. 克隆一个本地仓库
执行:git clone url [新建目录名]
比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:
$ git clone git://github.com/schacon/grit.git mygrit
5. 工作流
参考上面的图可以看出,基本的 Git 工作流程如下所示:
1. 在工作目录中修改某些文件。
2. 对这些修改了的文件作快照,并保存到暂存区域。
3. 提交更新,将保存在暂存区域的文件快照转储到 git 目录中
6. 添加,提交
git工作流的第一步:
git add
git add *
然后,提交改动:
git commit -m “备注”
这个时候,代码经过了staged,流到了modified区。但是数据还是存在本地,没有到你的远程仓库。
7. 推送改动
执行:git push origin master (master可替换成任何你想推送的分支)
8. 分支
在你创建仓库的时候,master 是“默认的”。在其他分支上进行开发,完成后再将它们合并到主分支上。
创建一个叫做“feature_1”的分支,并切换过去:
git checkout -b feature_1
切换回主分支:
git checkout master
再把新建的分支删掉:
git branch -d feature_1
将分支推送到远端仓库,不然该分支其他人是看不见的:
git push origin feature_1
9. 更新与合并
更新你的本地仓库至最新改动:
git pull
合并其他分支到你的当前分支:
git merge
10. 替换本地改动
需要回滚,替换本地改动:
git checkout –
此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到缓存区的改动,以及新文件,都不受影响。
原文转自:http://www.wangyuxiong.com/archives/52140