简介
- 什么是git
git是一款开源的分布式版本控制工具
在世界上所有的分布式版本控制工具中,git是最快、最简单、最流行的 - git的起源
作者是Linux之父:Linus Benedict Torvalds
当初开发git仅仅是为了辅助Linux内核的开发(管理源代码) - git的现状
在国外已经非常普及,国内并未普及(在慢慢普及)
越来越多的开源项目已经转移到git
git和SVN的简单对比
速度
- 在很多情况下,git的速度远远比SVN块
结构
- SVN是集中式管理,git是分布式管理
其他
- SVN使用分支比较笨拙,git可以轻松拥有无限个分支
- SVN必须联网才能正常工作,git支持本地版本控制工作
- 旧版本的SVN会在每一个目录置放一个.svn,git只会在根目录拥有一个.git
分布式和集中式的最大区别在于:在分布式下
- 开发者可以本地提交
- 每个开发者机器上都有一个服务器的数据库
使用git
跟SVN一样,你可以通过命令行敲指令或者图形界面客户端使用git
在Mac上,比较好用的git图形界面客户端有
- SourceTree
下载地址:http://www.sourcetreeapp.com/download/ - GitHub
下载地址:https:/mac.github.com
不过它是专门为GitHub网站而设计的 - Xcode
一、命令行的演示
1.初始化一个代码仓库
- git init
2.如果使用GIT,必须给GIT配置用户名和邮箱
给当前的git仓库配置同户名和邮箱
- git config user.name “LHT”
- git config suer.email “2624910797@qq.com”
给git配置全局的用户名和邮箱
- git config --global user,name “LHT”
- git config --global suer.email “2624910797@qq.com”
3.初始化项目
- touch main.m : 创建了main.m
- git add main.m : 将main.m添加到暂缓区
- git commit -m “初始化项目” : 将暂缓区的所有文件提交到本地版本库,清空暂缓区
注意:添加的文件或者是修改的文件都要通过add命令,将该文件添加到暂缓区 - git add . : 将工作区所有不在暂缓区的梭鱼内容添加到暂缓区
4.查看文件状态
- git status
红色:该文件被添加或者被修改。但是没有添加到git的暂缓区
绿色:该文件在暂缓区,但是没有提交到本地版本库
5.给命令行起别名
- git config alias.st “status”
- git config alias.ci “commit -m”
- git config --global alias.st “status”
6.删除文件
- git rm person.m : 将person.m删除
7.查看版本信息
- git log -> 版本号是由sha1算法生成的40位哈希值
- git reflog : 可以查看所有版本回退的操作
8.版本回退
- git reset --hard HEAD : 回到当前版本
- git reset --hard HEAD^ : 回到上一个版本
- git reset --hard HEAD^^ : 回到上上个版本
- git reset --hard HEAD~100 : 回到前100个版本
- git reset --hard 版本号(前5位)
9.给log起别名
- git config --global alias.lg “log --color --graph --pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an> %Creset’ --abbrev-commit”
工作原理
如果想了解git的工作原理,有几个核心概念必须知道
工作区(Working Directory): 仓库文件夹里除.git目录以外的内容
版本库(Repository): .git目录,用于存储记录版本信息
- 暂缓区(stage)
- 分支(master):git自动创建的第一个分支
- HEAD指针:用于指向当前分支
git add和git commit的原理
- git add : 把文件修改或者新添加的文件添加到暂缓区
- git commit : 把暂缓区的所有内容提交到当前分支
二、共享版本库
- git服务器的搭建非常繁琐(linux)
- 可以吧代码托管到(Github/OSChina)
- 一个文件夹
- 一个U盘
1.一个文件夹作为共享版本库
- git init --bare
2.将共享版本库的所有内容下载到本地
- git clone 共享版本库地址
3.删除忽略文件
- touch .gitignore -> Github -> 搜索".gitignore" -> 选择*最多的 -> 找到Object-C,复制下来
4.版本回退
- git reset --hard HEAD^:回到上一个版本(张三)
- git push -f : 强制上传到共享版本库
- giT RESET --HARD HEAD^ : 回到上一个版本(经理)
5.从共享版本库更新代码
- git pull
6.将代码上传到共享版本库
- git push origin weibo1.0 (一般都是在Xcode中Source Control中commit后直接push)
三、版本备份
-
- 1.0版本开发完毕,将1.0版本上传到AppStore,对1.0版本进行备份(打上标签)
git tag -a weibo1.0 -m “这是1.0版本”
git tag : 查看当前tag
-
- 需要将标签push到共享版本库
git push origin weibo1.0
-
- 开始2.0版本的开发
-
- 发现1.0版本由bug,在经理的文件夹下面创建一个文件夹,用于修复bug,将共享版本库所有内容clone
git clone
-
- 将当前的代码转为1.0标签,创建分支,并切换到该分支
git checkout weibo1.0 : 转化为1.0标签
git checkout -b weibo1.1fixbug : 创建分支,并且切换到该分支
-
- 在分支中修复bug,上传到APPStore,将修复好的版本,打上tag,并上传到共享版本库
git tag -a weibo1.1 -m “这个是修复了1.0bug的1.1版本”
git push origin weibo1.1
-
- 跟当前正在开发的2.0版本进行合并
source Control -> pull -> weibo1.1fixbug
-
- 删除分支
git branch : 查看当前在哪个分支
git branch -r : 查看本地版本库的分支
git branch -d weibo1.1fixbug : 删除本地分支
git branch -r -d origin/weibo1.1fixbug : 删除本地版本库分支
git push origin --delete weibo1.1fixbug
SSHkeys 认证
1.共钥:存在github上用来加密
2.私钥:存在本地的一个.ssh文件夹下用来加密