一、Git的简介
- 1.1.什么是git?
- git是一款开源的分布式版本控制工具,在世界上所有的分布式版本控制工具中,git是最快、最简单、最流行的
- 1.2.git的起源
- 作者是Linux之父:Linus Benedict Torvalds(林纳斯·本纳第克特·托瓦兹)(国内一般叫:李纳斯),当初开发git仅仅是为了辅助Linux内核的开发(管理源代码)
- 1.3.git的现状
- 在国外已经非常普及,国内并未普及(在慢慢普及),越来越多的开源项目已经转移到git
- 1.4.其他版本控制工具
- 1.4.1. CVS
- 最早的开源、免费的集中式版本控制工具,自身设计有问题,会造成提交文件不完整,版本库莫名其妙损坏的情况
- 1.4.2. SVN
- 修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制工具
- 1.4.3. ClearCase
- 收费的集中式版本控制工具,安装比Windows还大,运行比蜗牛还慢,能用ClearCase的一般是世界500强,他们有个共同的特点是财大气粗或者人傻钱多
- 1.4.4.VSS
- 微软的集中式版本控制工具,集成在Visual Studio中
- 1.4.5.OSChina(国内的)
- 可以创建私有的仓库,速度在国内比GitHub快很多
- 1.4.6.码市(国内的)
二、Git 与 Svn的对比
- 2.1.SVN集中式版本控制(没有中间环节)
2.2.Git分布式版本控制
- 2.3.git和SVN的简单对比
- 2.3.1.速度
- 在很多情况下,git的速度远远比SVN快
- 2.3.2.结构
- SVN是集中式管理,git是分布式管理
- 2.3.3.其他
- SVN使用分支比较笨拙,git可以轻松拥有无限个分支
- SVN必须联网才能正常工作,git支持本地版本控制工作
- 旧版本的SVN会在每一个目录置放一个.svn,git只会在根目录拥有一个.git
- 2.4.SVN的工作流程(有中间环节)
- 2.4.1.首先要
Check Out
一份代码,之后上传代码Commit
,更新本地代码是Update
2.5.git的工作流程
- 2.5.1.Git在使用时先
Clone
,之后Commit
上传代码到本地仓库,更新代码用PULL
,上传到服务器用PUSH
- 2.5.2.分布式和集中式的最大区别在于:在分布式下开发者可以本地提交
- 2.5.3.每个开发者机器上都有一个服务器的数据库
- 2.6.git的使用
- 跟SVN一样,你可以通过命令行敲指令或者图形界面客户端使用git
- 在Mac上,比较好用的git图形界面客户端有
- SourceTree
- GitHub,它是专门为GitHub网站而设计的
- Xcode:这点做得比较好
三、Git常用指令
- 3.1.唠叨几句,Command+Shift+.出来的文件,千万别删掉(里面都是电脑的配置),切记
Command+Shift+. 可以显示隐藏文件、文件夹,再按一次,恢复隐藏;
finder下使用Command+Shift+G 可以前往任何文件夹,包括隐藏文件夹。 - 3.2.初始化一个代码仓库(.git里面的东西千万别轻易删除)
git init
- 会生成一个.git的文件夹,里面有一个config :git的配置信息相关(修改的是.git/config文件)
- 3.3.如果使用GIT,必须给GIT配置用户名和邮箱
- 3.3.1.给当前的git仓库配置用户名和邮箱
git config user.name “用户名” git config email “邮箱地址”
- 3.3.2.给git配置全局的用户名和邮箱
git config --global user.name “用户名”(用于跟踪修改记录) git config --global email “邮箱地址”(用于多人开发间的沟通)
- 3.4.初始化项目
- 3.4.1.创建了 main.m 文件
touch main.m
3.4.2. 查看main.m
的状态
git status
- 红色表示该文件被添加或者被修改,但是没有添加到git的暂缓区
- 3.4.3.将main.m添加到暂缓区
git add main.m git add . : . 相当于*,将工作目录下所有没有被添加到暂缓区的文件添加到暂缓区
- 绿色:该文件在暂缓区,但是没有提交到本地版仓库
- 3.4.4.将暂缓区的代码提交到本地
git
仓库(本地版本库)清空暂缓区
git commit -m "这里面放提交内容的说明"
- 1 file changed, 6 insertions(+): 这句话的意思是是说有1个文件被改变,6行代码插入
注意:添加的文件或者是被修改的文件都要通过add命令将该文件添加到暂缓区 - 3.4.5.再次查看文件的状态(没有任何内容)
git status
- 3.5.给命令行起别名
git config alias.st "status" 这句命令的意思是:用 `st`来代替 `status` ,查看代代码区文件的状态 git config alias.ct "commit -m" 这句命令的意思是:用 `ct`来代替 `commit -m` ,把暂缓区的代码提交到本地仓库 git config --global alias.st "status" 设置全局的查看状态(查看的方法可到桌面上面 前往->个人->.gitconfig查看:如果找不到就输入`Command+Shift+.`)
- 3.6.删除文件
git rm person.m 删除person.m 文件
- 3.7.查看版本信息
git log 版本号是由sha1算法生成的40位哈希值,仅能查看当前版本以及以上的版本
git reflog 可以查看所有版本回退的操作,可以查看所有的修改记录(版本绘图)
给查看版本起全局别名
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(y
查看起的别名(前往->个人->.gitconfig)
使用别名查看log信息
3.8.版本回退
- 3.8.1.打开person.h,添加代码
open person.h
3.8.2.在没有提交的情况下进行版本回退
git reset --hard HEAD^
3.8.4.回退到上上个版本
git reset --hard HEAD^^
3.8.5.回退到指定回退到某个版本
git reset --hard 版本号(至少前5位)
3.8.6.回退到前几个版本
git reset --hard~1
3.8.7.使用reflog查看日志
git reflog
- 3.8.8.总结
- 1.起别名:当前版本库别名,与全局别名(只需要起一次,下次创建仓库后就不用起别名了)
- 2.删除文件:git rm 文件名,删除后保存在暂缓区,需要提交到代码仓库
- 3.查看版本号
- git log:查看当期与当前以上的操作
- git reflog:查看版本包含回退的操作
- 4.版本回退:回退到之前提交过的版本
- 3.9.回滚的说明
- 在做回滚时,要和对方说好,团队之间要配合好
git reset --hard HEAD^ 回到上一个版本 git reset -f 强制上传到共享版本库
四、Git的工作原理
- 4.0.总步骤
- 通过git add 命令将工作区的内容提交到版本库的缓存区
- 通过git commit 命令将缓存区的所有内容提交到当前分支
- 4.1.工作区(Working Directory):仓库文件夹里除.git目录以外的内容
- 4.2.版本库(Repository):.git目录,用于存储记录版本信息
- 暂缓区(stage)
- 分支(master):git自动创建的第一个分支
- HEAD指针:用于指向当前分支
- 4.3.git add和git commit的原理
- git add .:把文件修改或者新添加的文件添加到暂存区
- git commit :把暂存区的所有内容提交到当前分支
- 4.4.暂缓区(stage)有内容
4.5.工作区提交到暂缓区
4.5.暂缓区(stage)有内容提交给本地仓库,暂缓区就会被清空
4.6.总结
- 1.svn开发工作在主干进行,git开发工作在分支中进行
- 2.通过add命令可以将工作目录没有被添加到暂缓区的文件添加到暂缓区
- 3.通过commit命令将暂缓区的所有内容上传到当前分支,提交成功后清空暂缓区内容