最近公司使用了新的版本控制工具Git, 今天正好有时间进行一下总结。众所周知,Git是一款开源的分布式版本控制工具(区别于SVN的集中式,分散式版本控制系统和集中式版本控制系统,其最大差别在于前者的仓库可以有多份。事实上,每个开发者都可以在自己的一台或者多台电脑上建立档案库), 在所有分布式版本控制工具中,git可以说是最快,最简单,最流行的。但是正因如此,它的安全性有一些问题, 所以需要搭建自己公司的服务器来保证代码的保密性,我公司采用stash建立git服务器,来防止代码的泄漏。
一 git的工作流程
通过图片可以看出,git工作所要经过的三个部分可以分为: 共享版本库(即服务器端),开发人员本地代码,本地仓库。接下来说一下用到的基本命令和所起的作用:
1. Clone: 从远程共享版本库下载下全部的代码(和SVN的Check out类似)。
2. Commit: 将本地修改的代码提交到本地仓库 (这一步是SVN没有的,也是版本集中式和分布式的主要区别所在)
3. Pull: 将远程共享版本库的代码更新到本地 (相当于SVN的update)
4. Push: 将本地仓库修改的代码提交到远程共享版本库。(相当于SVN的commit)
二 git的基本命令
1. 初始化一个git仓库:git init
2. 如果使用GIT必须给GIT配置用户名和邮箱,给当前的git仓库配置用户名和邮箱:git config user.name "Alan", git config user.email "1367240056@163.com"(也可以配置全局邮箱:git config --global user.name "Alan", git config --global user.email "1367240056@163.com", git在搜索邮箱时会优先搜索当前的用户名和邮箱,找不到再搜索全局的)
3. 初始化项目:
touch main.m: 创建了main.m文件
git add main.m: 将main.m添加到暂缓区
git commit -m "初始化项目": 将所在暂缓区的所有内容提交到本地仓库,并清空暂缓区(这行命令最后一定要加注释"")
4.查看文件状态
git status
红色: 该文件被添加或修改,但是没有添加到git的暂缓区
绿色: 该文件在暂缓区,但是没有提交到本地版本库
三 GIT的工作原理
如果想要了解git的工作原理,需要先知道几个核心概念
工作区(Working Directory):仓库文件夹里除.git目录以外的内容
版本库(Repository):.git目录,用来存储记录版本信息(暂缓区(stage), 分支(master):git自动创建的第一个分支, HEAD指针:用于指向当前分支)
git add和git commit原理:
git add: 把修改的文件或新添加的文件添加到缓存区
git commit: 把暂缓区的所有内容提交到当前分支
给命令行起别名
git config alias.st "status"
git config alias.ci "commit -m"
删除文件
git rm person.m: 删除person.m
查看版本信息
git log: 可以查看当前版本及之前的版本信息(不包括回退的,版本号是由sha1哈希算法生成的40位哈希值)
git reflog: 可以查看所有版本回退的操作(可以查看较多的版本)
版本回退
git reset --hard HEAD: 回到当前版本
git reset --hard HEAD^: 回到上一个版本
git reset --hard HEAD^^:回到上上个版本
git reset --hard HEAD~100: 回到前100个版本
git reset --hard 版本号(前五位即可,一般不会重复)
git push -f: 强制回退(适用于多人开发冲突)
四 共享版本库
1. 搭建git服务器,非常繁琐(Linux)
2. 可以把代码托管到Github/OSChina
3. 一个文件夹
一个文件夹作为共享版本库: git init --bare
将共享版本库的所有内容下载到本地: git clone 共享版本库地址
五 版本备份
列举个详细的例子:
1. 1.0版本开发完毕,将1.0版本上传到AppStore,对1.0版本进行备份(打上标签)
git tag -a pgs1.0 -m "这是1.0版本":标记tag
git tag:查看tag
2. 需要将标签push到共享版本库
git push original pgs1.0
3.开始2.0版本的开发
4. 发现1.0版本有bug,新建一个文件夹用于修复bug,将共享版本库所有内容clone
git clone
5. 将当前的代码转为1.0标签,创建分支,并切换到该分支
git checkout pgs1.0:转为1.0标签
git checkout -b pgs1.1fixbug:创建分支,并切换到该分支
6. 在分支中修复bug,上传到AppStore,将修复好的版本,打上tag,并上传到共享版本库
git tag -a pgs1.1 -m "这是修复了1.0bug的1.1版本"
git push origin pgs1.1:上传到共享版本库
7. 跟当前正在开发的2.0版本进行合并
Xcode:source control -> pull ->pgs1.1fixbug
8. 删除分支
git branch:看当前在哪个分支
git branch -r:查看本地版本库的分支
git branch -d pgs1.1fixbug:删除本地分支
git branch -r -d origin/pgs1.1fix 不够:删除本地版本库分支
git push origin --delete pgs1.1fixbug:提交到共享版本库
六 创建新人的共享版本库
Source Control -> pgs master -> configure pgs -> remotes -> 点击左下角的➕号,添加新的共享版本库
七 本地代码上传到github
第一步:建立git仓库
cd到你的本地项目根目录下,执行git命令
git init
第二步:将项目的所有文件添加到仓库中
git add .
如果想添加某个特定的文件,只需把.换成特定的文件名即可
第三步:将add的文件commit到仓库
git commit -m "注释语句"
第四步:去github上创建自己的Repository,创建页面如下图所示:
点击下面的Create repository,就会进入到类似下面的一个页面,拿到创建的仓库的https地址,蓝色标示的地址栏里的就是
第五步:重点来了,将本地的仓库关联到github上
git remote add origin https://github.com/AlanZhangQ/Alan_cocoaSocket
后面的https链接地址换成你自己的仓库url地址,也就是上面红框中标出来的地址
第六步:上传github之前,要先pull一下,执行如下命令:
git pull origin master
敲回车后,会执行输出类似如下
第七步,也就是最后一步,上传代码到github远程仓库
git push -u origin master
执行完后,如果没有异常,等待执行完就上传成功了,中间可能会让你输入Username和Password,你只要输入github的账号和密码就行了
最后附上代码上传成功后的截图:
八 一些需要注意的点
git add -A
和 git add . 以及 git add -u在功能上看似很相近,但还是存在一点差别。
git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -A :是上面两个功能的合集(git add --all的缩写)