git
==========Wh.少爷===========
显⽰示隐藏⽂文件
defaults write com.apple.finder AppleShowAllFiles -bool true
1.git简介
- 什么是 git?
-- git 是一款开源的分布式版本控制工具
-- 在世界上所有的分布式版本控制工具中,git 是最快、最简单、最流行的 - git的起源
-- 作者是Linux之父:Linus Benedict Torvalds
-- 当初开发git仅仅是为了辅助Linux内核的开发(管理源代码) - git的现状
-- 在国外已经非常普及,国内并未普及(在慢慢普及)
-- 越来越多的开源项目已经转移到git
2.git 和 svn的区别
- 速度
-- 在很多情况下,git的速度远远比SVN快 - 结构
-- SVN是集中式管理,git是分布式管理 - 其他
-- SVN使用分支比较笨拙,git可以轻松拥有无限个分支
-- SVN必须联网才能正常工作,git支持本地版本控制工作
-- 旧版本的SVN会在每一个目录置放一个.svn,git只会在根目录拥有一个.git
3.git 工作流程
分布式和集中式的最大区别在于:在分布式下
开发者可以本地提交
每个开发者机器上都有一个服务器的数据库
Paste_Image.png
分布式管理
Paste_Image.png
4.git 的基本使用
-
git 的重要概念及工作原理
-
工作区(Working Directory):仓库文件夹里除.git目录以外的内容
-
版本库(Repository):.git目录,用于存储记录版本信息
- 暂缓区(stage)
- 分支(master):git自动创建的第一个分支
- HEAD指针:用于指向当前分支
git add和git commit的原理 git add :把文件修改添加到暂存区 git commit :把暂存区的所有内容提交到当前分支
-
-
学习git指令:
- 学习git指令和SVN指令的学习其实是一样的, 只不过展现的方式不太一样, git是通过使用指南的方式告诉我们某一个指令如何使用
- 这个指南其实是一个不可编辑的vim
$ git help 查看svn所有命令的帮助 $ git help 子命
. 要退出帮助信息,按"q"
. 翻看下页,按"空格"
. 翻看上页,按"CTRL+B"
. 要搜索相关文字,按"/"然后输"相关文字"
- git常规指令:
-
git status 查看文件状态
-
git add 添加文件到“暂存区”
- 添加之前的颜色
红色 代表在”工作区“ - 添加到暂存区之后的颜色
绿色 代码在”暂存区“
- 添加之前的颜色
-
git commit 文件名称 添加文件到”本地仓库“
-
注意:如果没有在commit后面加上 -m说明修改了什么, 会自动进入vim界面,要求我们输入修改信息,按键盘上的
i
代表开始输入内容
输入完毕之后按esc
然后按:wq
所以:如果以后在终端中提交最好在后面加上-m
-
注意:git中的add和SVN中的add不太一样, SVN中只需要add一次,而git中每次新建或者修改之后都需要重新add
-
-
查看log
查看所有版本库日志$ git log
查看指定文件的版本库日志git log 文件名
git reflog
查看所有修改信息(所有版本)- 注意: GIt中的版本号是一个”40位“的哈希值, 而SVN中的版本号是一个递增的整数
-
配置带颜色的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 config alias.st status
$ git config alias.ci "commit -m"
```
个人建议:除非特殊原因,最好不要设置别名,否则换一台机器就不会用了
. 注意: git默认没有简写指令
. 注意: 一般情况下不建议自定义简写指令
. git中的简写称之为起别名
-
版本号,让我们在任意版本之间穿梭
git reset —hard 版本号(只需要写前7位) 其中—hard代表强制重置 回到当前版本,放弃所有没有提交的修改 $ git reset --hard HEAD 回到上一个版本 $ git reset --hard HEAD^ 回到之前第3个修订版本 $ git reset --hard HEAD~(3) 回到指定版本号的版本 $ git reset e695b67 查看分支引用记录 $ git reflog
```
- 已经提交
```
git reset —hard HEAD^ 返回上一个版本
其中—hard代表强制重置
git reset —hard 版本号(只需要写前7位)
```
- 未提交
```
git checkout 文件名 回退到上一次提交的版本
git reset —hard HEAD 回退到上一次提交的版, 注意HEAD后面没有尖号^
```
-
单个文件的修改管理
查看文件变化 $ git diff 如果显示绿色代表新增 如果显示红色代表删除 撤销对文件做的修改 $ git checkout Person.h 从代码库(暂存区中删除文件)
a.本地操作
-
1.创建代码库 & 配置个人信息
- 1> 进入工作目录中,新建一个“本地仓库”
$ cd 进入工作目录 $ git init
- 2> 告诉git你是谁
告诉git怎么联系你
$ git config user.name lnj $ git config user.email lnj@itcast.cn
》上面一种配置方式是一次性的配置, 会配置到被管理文件的。git文件夹下的config 中
》下面一种配置方式是一劳永逸的方式:
两个命令会将用户信息保存在用户目录下的 .gitconfig 文件中$ git config --global user.name lmj $ git config --global user.email lmj@itcast.cn
- 3> 查看当前所有配置
$ git config -l
-
2.实际开发
- 1> 创建代码,开始开发
$ touch main.c $ open main.c
- 2> 将代码添加到代码库
查看当前代码库状态 $ git status 将文件添加到代码库 $ git add main.c 将修改提交到代码库 $ git commit -m "添加了main.c"
提示:
在此一定要使用 -m 参数指定修改的备注信息
否则会进入 vim 编辑器,如果对vim不熟悉,会是很糟糕的事情
将当前文件夹下的所有新建或修改的文件一次性添加到代码库
$ git add .
- 3> 添加多个文件
$ touch Person.h Person.m $ git add . $ git commit -m "添加了Person类" $ open Person.h $ git add . $ git commit -m "增加Person类属性"
b.团队开发
远程仓库(专门用于团队开发的代码仓库
SVN需要一个单独的服务器
Git不需要: 文件中、U盘中、云上、github、OSChina...
1.新建git远程仓库,这个仓库仅仅是用于管理代码,不参与开发
```
# 切换目录
$ cd /Users/lnj/Desktop/git演练/公司/weibo
# 建立空白代码库(专门用于团队开发)
$ git init --bare
```
2.项目经理初始化项目
- 切换目录
```
$ cd /Users/lnj/Desktop/git演练/经理
```
- "克隆"代码库到本地
```
$ git clone /Users/lnj/Desktop/git演练/公司/weibo/
```
- 忽略不需要加入版本控制器的文件以及文件夹.gitignore
```
touch .gitignore
open .gitignore
```
- 要忽略的⽂文件 可以去https://github.com/github/gitignore/blob/master/Objective-C.gitignore查看OC需要忽略 的内容,将内容填写到. gitignore中,.gitignore一定要在和.git隐藏文件夹同一级的目录下
- 生成好.gitignore文件之后, 还需要将.gitignore文件添加到版本控制
```
git add .gitignore
git commit .gitignore -m”将.gitignore文件添加到版本控制”
```
- 新建项目,初始化项目在.git同目录下
```
source conrol—>commit 将代码提交到本地仓库
source conrol—>push 将代码提交到远程仓库
```
3.新人加入
- git clone 共享代码库的地址
- 修改代码—>git commit —>git push
4.分支管理
```
# 查看当前标签
$ git tag
在本地代码库给项目打上一个标签
$ git tag -a v1.0 -m 'Version 1.0'
将标签添推送到远程代码库中
$ git push origin v1.0
使用tag,就能够将项目快速切换到某一个中间状态,例如产品开发线上的某一个稳 定版本
签出v1.0标签
$ git checkout v1.0
从签出状态创建v1.0bugfix分支
$ git checkout -b bugfix1.0
查看远程分支
$ git branch -r
删除远程分支
$ git branch -r -d origin/bugfix1.0
$ git merge v1.0
```
5.注意
- git中默认就会创建一个分支, 这个分支叫做origin/master, 相当于svn中的trunk
- 专业人员只需要在git仓库的hooks文件夹中写一些指令, 就可以完成自动测试(压力测试、自动测试、集成测试、冒烟测试、。。。)
- 和SVN一样, 如果服务器仓库的代码被修改了, 我们再提交代码也会报错。
fetch first == out of data
**要先从服务器`pull`之后再提交***
- 总结:
git和svn最大的区别
1.git每次修改新增都需要add
2.git每台电脑都有一个仓库
3.git是先提交到本地仓库, 再提交到远程仓库
c.新人服务器的搭建
1.新建一个新人服务器
cd /Users/lnj/Desktop/... 新人服务器
2.初始化仓库
git init --bare
3.添加一个新的远程仓库
source control —> master —>config —>remotes —>add —> add remote
Snip20160126_4.png
4.将经理最新的代码提交到新人服务器
xcode -> source control -> push
Snip20160126_5.png
5.经理分配新人服务器的地址给新人
c.分支 —bug 修复
1.开发
2.发布
```
# 查看当前标签
$ git tag
在本地代码库给项目打上一个标签
$ git tag -a v1.0 -m 'Version 1.0'
将标签添推送到远程代码库中
$ git push origin v1.0
```
3.保存稳定版本
4.继续开发
5.出现bug
6.分配员工到分支上修复bug
```
>员工从服务器下载最新代码
$git clone /Users/lnj/Desktop/。。。
》员工利用git checkout v1.0指令快速切换到1.0版本
》根据提示:开启一个新的分支开始修复代码
$git checkout -b 1.0bug_fix
》修复完成之后再打个标签
$ git tag -a v1.1 -m 'Version 1.1'
$ git push origin v1.0 将标签添推送到远程代码库中
```
7.合并修复后的代码到主线
在修复bug 的代码中
![Snip20160126_6.png](https://img.haomeiwen.com/i1482869/c551aa564d9a484e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
8.备份稳定版本
d.如何使用/学习第三方框架
优秀的第三方框架都在 github.com
1> 搜索
2> git clone 获得完整版本
$ git clone https://github.com/AFNetworking/AFNetworking.git
3> 获取最新版本 git pull
- 进入clone的本地文件夹
$ git pull
4> 看github上的文档,优秀的第三方框架都有好的文档
5> 编写测试程序,看运行结果
6> 针对感兴趣的部分,看源代码
7> 有问题去http://stackoverflow.com
e.通过Xcode将代码提交到github上
1.注册一个 github账号
2.新建远程仓库
Snip20160126_9.png
Snip20160126_12.png
3.复制远程仓库地址
Snip20160126_15.png
4.添加远程仓库
- a-
![Snip20160126_14.png](https://img.haomeiwen.com/i1482869/be0d032e0b29b0ab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Snip20160126_17.png](https://img.haomeiwen.com/i1482869/6c6540bc4331f2ad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Snip20160126_18.png](https://img.haomeiwen.com/i1482869/9f14a056141ef826.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Snip20160126_20.png](https://img.haomeiwen.com/i1482869/1fcf716895f09d83.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Snip20160126_22.png](https://img.haomeiwen.com/i1482869/20dffd907faae958.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- b-
通过 git clone 远程仓库地址
5.在代码仓库创建工程,提交 SourceControl -> commit -> push
push 成功之后,github上 就有了代码仓库。
6.配置SSH Keys
- 点击昵称来到个人主页
- 点击主页中的设置(setting)
- 点击SSH Keys
- 点击 generating SSH keys
- 1.检查本地的ssh keys
在“用户目录”下 ls -al ~/.ssh
- 2.如果文件夹不存在需要手动创建一个 mkdir .ssh(可不要)
- 3.根据github的提示2生成ssh keys
在.ssh目录下执行
`$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"`
输入完成之后连续按下回车, 知道出现牛逼的图形位置
- 4.生成完公钥和私钥之后输入
ls -la查看是否生成成功 id_rsa(私钥) id_rsa.pub(公钥)
- 5.根据提示3获得公钥
pbcopy < ~/.ssh/id_rsa.pub
打开id_rsa.pub文件拷贝里面的内容
- 6.点击 setting —》 ssh key —>add ssh key
将刚才获取到得公钥添加进去
![Snip20160126_24.png](https://img.haomeiwen.com/i1482869/55a83561ebc199e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Snip20160126_25.png](https://img.haomeiwen.com/i1482869/57686487cdf35778.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 7.更具github第4步提示, 验证公钥
验证成功网页上的灰色圆点会变成绿色
- 8.拷贝到公钥之后打开github主页
》点击仓库(Repositories)
》再点击new来到github创建仓库界面
- 9.通过github提供的地址下载一个空得仓库到本地
》创建一个新的项目到本地仓库文件夹中
》利用Xcode提交代码到github
》注意:要求输入用户名密码时候,输入的是github上显示的昵称而不是登录账号
```
6.删除代码仓库
Snip20160126_26.png Snip20160126_27.png7.怎么把别人的代码仓库弄到自己的代码仓库
Snip20160126_28.png
网友评论