什么是git?
git是一款开源的分布式版本控制工具
在世界上所有的分布式版本控制工具中,git是最快、最简单、最流行的
git的起源?
作者是Linux之父:Linus Benedict Torvalds
当初开发git仅仅是为了辅助Linux内核的开发(管理源代码)
git的现状?
在国外已经非常普及,国内并未普及(在慢慢普及)
越来越多的开源项目已经转移到git
CVS
- 开启版本控制之门
- 1990年诞生,“远古时代”的主流源代码管理工具
SVN
- 全称是Subversion,集中式版本控制之王者
- 是CVS的接班人,速度比CVS快,功能比CVS多且强大
- 在国内软件企业中使用最为普遍(70%-90%)
ClearCase
- 收费的集中式版本控制工具,安装比Windows还大,运行比蜗牛还慢
- 能用ClearCase的一般是世界500强,他们有个共同的特点是财大气粗或者人傻钱多
VSS
- 微软的集中式版本控制工具,集成在Visual Studio中
所有的代码都集中在一块, 统一进行管理
在每个客户端都有一份完整的代码仓库, 可以在每个客户端自行管理
速度
在很多情况下,git的速度远远比SVN快
结构
SVN是集中式管理,git是分布式管理
其他
SVN使用分支比较笨拙,git可以轻松拥有无限个分支
SVN必须联网才能正常工作,git支持本地版本控制工作
旧版本的SVN会在每一个目录置放一个.svn,git只会在根目录拥有一个.git
svn checkout —— git clone
svn 只下载代码, git 会连同代码仓库一起下载下来
svn commit —— git commit
svn 是提交到服务器,git 中是提交到本地仓库,需要使用push才能提交到服务器
svn update - git pull
都是从服务器下载最新被修改的代码
分布式和集中式最大的区别在于:在分布式下,本地有个代码仓库,开发者可以在本地提交; 而集中式版本控制, 只有在服务器才有一个代码仓库, 只能在服务器进行统一管理
概念理解
工作区
与.git文件夹同级的其他文件夹或者子文件夹
版本控制库
暂缓区
分支(Git不像SVN那样有主干和分支的概念. 仅仅存在分支,其中master分支为默认被创建的分支,类似于SVN中的主干)
切换分支:通过控制HEAD指针指向不同的分支,就可以切换*
操作原则: 所有新添加/删除/修改的文件 必须先添加到暂缓区,然后才能提交到HEAD指向的当前分支中
单人开发只需要一个本地库
原因:不需要与他人共享代码,只负责管理自己代码即可;例如提交代码,删除代码,版本控制等等
多人开发时需要一个共享版本库
共享版本库的形式:
本地共享库:文件夹/U盘/硬盘
远程共享库:自己搭建git服务器/ 托管到第三方平台(例如github, oschina)
客户端使用环境
无论是单人开发还是多人开发,客户端都可以使用命令行或者图形界面使用git
SourceTree
- 下载地址:http://www.sourcetreeapp.com/download/
GitHub- 下载地址:https://mac.github.com
- 不过它是专门为GitHub网站而设计的
Xcode- 虽然集成较好,但是只能做一些常用的简单操作,复杂操作还要使用命令行
http://backlogtool.com/git-guide/cn/intro/intro1_1.html
git help [子命令]
和学习SVN指令是一样的,只不过git是通过使用指南的形式展示给用户看(不能编辑的vim编辑器),使用q退出vim编辑器,按空格进入下一页,ctrl + B 回到上一页; /关键字 进行搜索
原因: 管理本地代码,修改上传,版本回退
命令: git init
告诉git你是谁?
原因: 追踪修改记录
命令: git config user.name “shunzi”告诉git怎样联系你?
原因: 多人合作开发时, 沟通交流
命令: git config user.email "shunzi@qq.com"查看配置信息(.git -> config打开)
命令: git config -l
创建文件并提交
命令:
touch main.c
git add .
git commit -m “注释”
修改文件并提交
命令:
git add .
git commit -m “注释”
删除文件并提交
命令:
git rm person.h
git commit -m “注释”
日志查看
命令:
git log
git reflog
版本回退
命令:
git reset —-hard HEAD 重置到当前版本
git reset —-hard HEAD^^ 重置到上上个版本
git reset ——hard HEAD~2 重置到往上2个版本
git reset —-hard 七位版本号 重置到指定版本::
文件状态(git status)
颜色含义
红色: 代表被添加或者修改的文件没有被添加到暂缓区
绿色: 代表文件在暂缓区,等待提交
版本号的含义
版本号是一个由SHA1生成的40位哈希值
这样做的目的是保证版本号的唯一
vim编辑器的使用
命令模式:等待编辑命令输入;所有输入的内容都被当做命令来执行
插入模式:输入的所有内容都被显示,并被当做文件内容处理
命令行模式:执行待定命令(保存文件并退出vim : wq ; 强制退出不保存: q! )
日志查看配置
命令如下:
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 config alias.st “status”
git config alias.ci “commit -m”
--global的作用
可以进行全局配置,所有的版本库共享此配置
查看全局配置(桌面前往->个人->.gitconfig
个人电脑上建议使用全局配置
团队开发必须有一个共享库,这样成员之间才可以进行协作开发
本地共享库(只能在本地面对面操作)
- 电脑文件夹/U盘/移动硬盘
远程共享库(可通过网络远程操作)
- 自己搭建Git服务器(不建议)
- 在Github上托管项目( 建议)
Github网址(https://github.com); 公开项目免费, 私有项目收费- 在OSChina上托管项目( 推荐)
OSChina网址(https://git.oschina.net) 安全免费,在国内访问速度快
原因: 多人合作开发,代码共享
命令: git init —-bare
命令: git clone 本地代码仓库地址
创建文件夹manager, niuda
命令:
mkdir manager
mkdir niuda
分别进入到两个文件夹从共享库clone项目到本地
命令:
git clone 本地代码仓库地址
git clone 本地代码仓库地址
演练新增文件同步
命令:
touch person.h
git add .
git commit -m “创建person.h”
git push
git pull
演练修改文件同步
命令:
git add .
git commit -m “注释”
git push
git pull
演练删除文件同步
命令:
git rm filename
git commit -m “注释”
git push
git pull
演练冲突解决
命令:
git pull演练忽略文件
命令:
touch .gitignore
open .gitignore 加入忽略文件名
git add .
git commit -m “注释”
.gitignore文件配置规则
http://www.cnblogs.com/haiq/archive/2012/12/26/2833746.html
关于忽略文件
在真实开发中,配置.gitignore文件 , 去github里面搜索gitignore 选择OC版本的,拷贝到本地仓库即可,记得添加到本地版本库常见问题
fetch first 代表当前文件过期,需要从远程共享库更新
git pull
命令: git init —-bare
注意: 添加忽略文件, 不然Xcode有可能会把没必要的文件提交
必须在使用Xcode之前把忽略文件添加进来, 因为Xcode创建工程时, 默认直接把所有文件添加到暂缓区, 加进去之后忽略文件对其就无效了
当项目被移到自己代码仓库中,就可以根据地址克隆下来进行操作
** 注意:
你可以针对此框架进行任意修改,但是仅仅作用在你的本地仓库中的副本,对原作者项目没有任何影响.
如果想向原作者提建议,可以直接使用,pull request操作.
提交完成后,原作者可以在pull request中看到你的提交.至于是否采纳,就是原作者的意愿
或者直接只用SSH(以下是生成公钥私钥方法)
部署公钥允许以只读的方式访问项目,主要用于项目在生产服务器的部署上,免去HTTP方式每次操作都要输入密码和普通SSH方式担心不小心修改项目代码的麻烦。
[https://help.github.com/articles/generating-ssh-keys/]
当项目被移到自己代码仓库中,就可以根据地址克隆下来进行操作
** 注意:
你可以针对此框架进行任意修改,但是仅仅作用在你的本地仓库中的副本,对原作者项目没有任何影响.
如果想向原作者提建议,可以直接使用,pull request操作.
提交完成后,原作者可以在pull request中看到你的提交.至于是否采纳,就是原作者的意愿
新人服务器搭建概念原因?
概念: 搭建一个临时共享版本库, 供新人专用
原因: 防止新人刚到时,搞乱服务器上的项目
新建一个文件夹,newBee,作为新人服务器
然后source control ->项目master -> configure 项目
选择Remotes 选项 代表当前所连的远程服务器地址
点击+号 添加 将newBee文件路径作为另外一个远程服务器地址 file:// 协议开头 结尾以/结尾
Done
经理将最新代码提交到新人远程仓库
在git中不是通过拷贝代码来解决备份和开启分支的
git 直接打标签, 通过控制head指向,来回到任一版本
建立共享库
创建文件夹shareWeibo
进入文件夹后,初始化共享库
git init ——bare
经理克隆项目后开发完1.0版本,打标签后,上传共享库
创建manager文件夹
进入文件夹后
git clone 共享库绝对路径
进入工作区,配置姓名,邮箱
git config user.name “manager”
git config user.email “manager@qq.com”
经理创建文件,并修改部分代码,提交代码,上传到共享库,完成v1.0版本
touch main.c
open main.c:: 打开后写入abc
git add .
git commit -m “完成1.0版本开发”
git push
经理给此版本打标签,并将标签上传到共享库
git tag -a v1.0 -m “标记1.0版本”
git push origin v1.0
经理继续开发2.0版本......并提交
git add .
git commit -m “2.0部分功能”
git push
在以上步骤基础上做以下操作
牛大克隆项目,根据1.0版本创建分支,修复bug
创建niuda文件夹
进入文件夹后
git clone 共享库绝对路径
进入工作区,配置姓名,邮箱
git config user.name “niuda”
git config user.email “niuda@qq.com”
根据v1.0版本建立新分支v1.0fixbug并切换到此分支
git checkout v1.0 -b v1.0fixbug::
修复bug后提交到本地版本库
注意此处提交到的是HEAD指向的分支-v1.0fixbug
git add .
git commit -m “修复bug”
牛大修复bug后,打标签v1.1作版本备份,并上传共享库
git tag -a v1.1 -m “1.1版本备份”
git push origin v1.1
牛大上传整个分支到共享版本库
git push origin v1.0fixbug
———至此,分支修复bug结束,下面经理要合并分支———
经理从共享库更新代码到本地库
git pull
经理查看当前服务器都有哪些分支
git branch -r
经理切换到master分支后,将v1.0fixbug分支合并过来
git checkout master
git merge origin/v1.0fixbug -m “合并分支”
经理合并完成后提交到共享库
git add .
git commit -m “合并分支”
git push
合并完成后,可以删除共享库的分支
git branch -r -d origin/v1.0fixbug
查看版本标签,至此结束!!
git tag
git 的使用步骤:
1. 新建一个文件夹,然后进入终端,
2. cd <文件夹路径> ——->进入当前目录;
2.psw ————>查看当前路径
3.git init -------------------->初始化 git
4. git config user.name tangranyang ————>配置用户信息 用户名,和 邮箱
git config user.email 401039455@qq.com
5. git config -l ———————>查看配置信息
6. git config —global user.name tangranyang ——————————>配置全局git账户
git config —global user.email 401039455@qq.com
7. cd<文件夹路径>———>跳转到当前目录
8. touch person.h person.m ———————>建立文件,也可以直接进去建立项目和文件夹
9. git add . ——————>添加到版本控制,用点,添加所有
9.1 git status ———————>查看提交状态
10 git commit -m “ban版本提交” ————————>提交到本地,提交必须添加内容
10.1 git log ————————>查看历史版本
10.2 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”——————>设置log的输出方式
10.3 git config alias.st status —————————>给status起别名为st
11. git reset —hard HEAD^ ————————>HEAD为分支名称 “^”表示回退一个版本
git reset —hard HEAD~1
git reset —hard “版本号” ———————>回到指定的版本
git reflog —————————>查看所有的操作版本
————————————————网络下载———————————
0.git init —bare —————————————>创建一个远程仓库
1.git clone “URL” ——————网络下载
2. git push ———————————>提交到远程服务
3. git pull ———————————>获取最新的更新
—————————配置忽略文件——————————
1.搜索 gitignore 找到OC忽略文件 复制
2.cd 目录
3. echo -e “复制的内容“ .gitignore————————>生成 .gitignore 文件
4. git add .gitignore
5.git commit -m “注释”
6.rm 文件 删除文件
7. git push
————————————————设置忽略提交的配置文件—————————————
原文链接:http://www.jianshu.com/p/ba5656ace177