GitHub分布式系统学习

GitHub 于 2008 年 4 月 10 日正式上线,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery 等。

1、GIT介绍

Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!

Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

2、GIT与SVN有什么区别呢?

  • 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库
  • 系统的可靠性要高很多(因为每一台机器都有一个版本库)
  • GIT不必连网,完全可以只在自己电脑里使用

3、GIT安装

  1. 首先打开 Git 的官方网站: http://git-scm.com/
  2. 然后找到下载页面: http://git-scm.com/downloads
  3. 找到对应的系统版本下载与安装(很简单,就不演示了)

4、GIT基本配置

git –version   可以看到我们GIT版本信息,可以使用   git config   命令来配置我们的本地信息  , 使用格式如下

格式    :     git config [options]

Git config 有三个级别   ,分别是

–global use global config file   (全局属性 , 一个电脑用户的配置,针对所有仓库)
–system use system config file    (系统属性  , 一个操作系统级别的配置,针对所有仓库)
–local use repository config file    (本地属性 ,  针对当前仓库 , 优先级最高)

配置一个本地的针对全局GIT的用户信息

  1. git config –global user.name cwj95       (添加一个全局用户名)
  2. 这种方式可以追加一个用户   git config –global –add user.name test1     (最后一个test1生郊,不经常使用)
  3. 通过    git config user.name   查询当前生效用户名
  4. 通过    git config –global –list   查询所有用户名
  5. 通过    git config –global –unset user.name  test1   删除test1用户名
  6. git config –global user.email c@cwj95.com     (添加一个全局邮箱名)
  7. 使用    git config –global alias.name “status”   为 status 命令增加一个别名,

我们通过1 和 6 步骤就配置好我们的信息了!!!如果想要使用GitHub网站上提供的服务,就需要生成一个SSH Keys钥匙

ssh-keygen   -t   rsa   -C  “name@email”  

复制  .ssh 中的  id_rsa.pub 中的内容复制在github账号上的密钥列表就可以使用推送功能了

分享常用的git log配置

  1. git log –oneline –graph –decorate  –all
  2. git log –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset’ –abbrev-commit –date=relative
  3. git log –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit

4、GIT基本工作过程

Git使用40个16进制字符的SHA-1 Hash来唯一标识对象

如  :    849b22391e3e9e99f1d0409c57aaa068bc964a81

㊀   建立 Git仓库

有两种方式,从本地建立   git   init  (仓库名)  ,如果不写就是在当前目录建立

使用 :  git init –bare  (仓库名 , 一般加上.git后缀)    建立一个裸仓库

裸仓库是可以被正常 clonepush 更新的, 裸仓库不包含工作区,所以并不会存在在裸仓库上直接提交变更的情况。(裸仓库一般情况下是作为远端的中心仓库而存在的)

从远程Git服务器上使用  git   clone   远程地址

㊁   添加到暂存区并提交


git status  查看暂存区与当前工作区着别
git add <file>     添加文件到暂存区
git commit -m "注释"   提交暂存区到历史记录
git rm  从暂存区删除
git mv  从暂存区重命名

使用 Add 和 Commit即可提交

(可选)㊂   添加.gitignore排除其他文件

在仓库下添加一个.gitignore文件,git不会追踪这些文件,git add -A不会添加到暂存区,规则如下:

  1. 在此文件中的文件,不会被追踪
  2. 以!开头的文件还是会被追踪
  3. 文件夹以/结尾,如  test/
  4. 可以使用通配符 *

(可选)   如果有远程仓库,可以使用Push命令

推送到主分支origin/master

git push origin master

5、GIT暂存区概念

工作区就是我们工作的当前目录,工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

我们可以想象其实是有一个文件夹,每次git add都会加到这个文件夹,commit会提交到git里

5、GIT本地分支与合并

git branch  <name>     以当前Commit ID新建一个分支,名字为name
git checkout <branch_name>       切换到该分支,加上-b选项,则新建并切换该支分
git merge   合并一个分支,如果出现冲突,可以使用下面这个命令
        *出现错误后 ,解决错误并通过add和commit来完成这次合并请求
git merge --abort   丢掉当前合并请求
git tag <name> <commit id> 可以给历史添加一个标签

6、GIT查看和对比历史记录

git  show   显示最后一次 commit 修改的内容:

git  show   <commit ID>/ <tag> / <block> / <tree>   显示指定的内容:

git log  查看修改记录,含作者、时间、修改说明等

git log –decorate –oneline –graph   让历史记录只显示一行并以树型形式展示

git diff     [options] [<commit>] [–] [<path>…]   查看自上次提交以来,本地代码改动的具体情况

7、GIT撤销和更改

git checkout   -- <file> 可以还原单个文件  ,也可以还原暂存区和工作区
git reset  --hard <commit ID> 还原 暂存区
git clean    可以清除未跟踪的文件 ,git clean -n  列出需要清除的文件 , git clean -f   清除
git revert 产生一个新的提交,来覆盖我们之前的提交产生的修改,是一个逆向操作
git commit --amend  提交一个新的commit ,会覆盖上次的commit 提交
git rebase  产生一个线性的合并请求
git reflog   可以查看所有分支的所有操作记录

8、Git远程协作

git fetch  <远程地址>     拉取远程库信息

git pull <远程地址>  拉取远程库并合并

git push –tags     将 tag  推送到远程地址

git push origin test 推送到test 分支

git push –delete origin test   或  git push origin :test    删除 test 分支

发表评论

发表评论

*

沙发空缺中,还不快抢~