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安装
- 首先打开 Git 的官方网站: http://git-scm.com/
- 然后找到下载页面: http://git-scm.com/downloads
- 找到对应的系统版本下载与安装(很简单,就不演示了)
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的用户信息
- git config –global user.name cwj95 (添加一个全局用户名)
- 这种方式可以追加一个用户 git config –global –add user.name test1 (最后一个test1生郊,不经常使用)
- 通过 git config user.name 查询当前生效用户名
- 通过 git config –global –list 查询所有用户名
- 通过 git config –global –unset user.name test1 删除test1用户名
- git config –global user.email c@1fast.cn (添加一个全局邮箱名)
- 使用 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配置
-
git log –oneline –graph –decorate –all - git log –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset’ –abbrev-commit –date=relative
- 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后缀) 建立一个裸仓库
裸仓库是可以被正常 clone 和 push 更新的, 裸仓库不包含工作区,所以并不会存在在裸仓库上直接提交变更的情况。(裸仓库一般情况下是作为远端的中心仓库而存在的)
从远程Git服务器上使用 git clone 远程地址
㊁ 添加到暂存区并提交
git status 查看暂存区与当前工作区着别 git add <file> 添加文件到暂存区 git commit -m "注释" 提交暂存区到历史记录 git rm 从暂存区删除 git mv 从暂存区重命名
使用 Add 和 Commit即可提交
(可选)㊂ 添加.gitignore排除其他文件
在仓库下添加一个.gitignore文件,git不会追踪这些文件,git add -A不会添加到暂存区,规则如下:
- 在此文件中的文件,不会被追踪
- 以!开头的文件还是会被追踪
- 文件夹以/结尾,如 test/
- 可以使用通配符 *
(可选)㊃ 如果有远程仓库,可以使用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 分支
发表评论
沙发空缺中,还不快抢~