一、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.3.1.速度
-
2.4.SVN的工作流程(有中间环节)
- 2.4.1.首先要
Check Out
一份代码,之后上传代码Commit
,更新本地代码是Update
- 2.4.1.首先要
-
2.5.git的工作流程
- 2.5.1.Git在使用时先
Clone
,之后Commit
上传代码到本地仓库,更新代码用PULL
,上传到服务器用PUSH
- 2.5.2.分布式和集中式的最大区别在于:在分布式下开发者可以本地提交
- 2.5.3.每个开发者机器上都有一个服务器的数据库
- 2.5.1.Git在使用时先
-
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(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit”
查看起的别名(前往->个人->.gitconfig)
-
-
使用别名查看log信息
-
-
3.8.版本回退
-
3.8.1.打开person.h,添加代码
open person.h
-
3.8.2.在没有提交的情况下进行版本回退
git reset --hard HEAD:强制回退到当前版本,还未提交的一个版本
-
3.8.3.回退到上一个版本
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命令将暂缓区的所有内容上传到当前分支,提交成功后清空暂缓区内容
五、初始化共享版本库和初始化项目
-
5.1.作为共享版版本库
- I.搭建git服务器
真实的git服务器的搭建需要使用Linux来进行搭建,搭建难度大且繁琐 - II.将代码托管Github:必须开源,不想开源需要交钱
- III.或者OSChina:免费,推荐国内速度快
- IV.一个U盘可以为共享版本库
- V.一个文件可以作为共享版本库
- I.搭建git服务器
-
5.2.这里以文件作为共享版本库为例展示共享版本库的使用
I.在
GIT
目录下创建一个Server
的文件夹来作为共享版本库-
II.打开终端,使用命令行初始化一个共享版本库
说明一下:config
里面的bare = true
代报是共享版本库且没有.git
,false
代表本地仓库git init --bare
-
III.在GIT目录创建一个开发人员文件夹,并在里面创建一个经理的文件夹代表经理的电脑
-
5.3.三.项目经理初始化项目
-
I.将服务器完整的内容下载到本地
git clone 服务器地址
-
-
II.添加忽略文件".gitignore",使用git需要忽略的一些文件(说明:.gitignore 名字不能错)
touch .gitignore
-
III.github中拷贝需要忽略的内容(github搜索.gitignore->找星最多的,点进去,找到object-c,打开复制)
-
1.进入github,搜索.gitignore,回车
-
2.选择星星最多的项目
-
-
3.找到Object-C点进去(因为使用的是OC),当然里面也有swift的忽略文件
4.复制所有内容到.gitignore文件中
-
5.将.gitignore添加到缓存区
git add .gitignore
-
6.将.gitignore提交到服务器
git commit -m "添加了需要忽略的文件"
-
7.使用xcode的初始化weibo项目放到经理的工作目录中
-
8.打开项目weibo项目,所有文件已经在暂缓区了
-
9.使用xcode提交到本地版本库(Source control -> commit),提交仅仅是提交到了本地版本库
-
10.使用xcode上传到共享版本库(Source control -> push)
-
IV.开发人员1加入开发(验证项目经理的push操作是否成功在共享版本库中)
cd 开发人员1的目录 git clone server里面weibo的路径
-
V.总结
- 1.文件作为共享版本库首先要创建个共享版本库,之后将共享版本库下载到本地就有了个.git仓库,在初始化项目之前先创建忽略文件,并从github上复制需要忽略的内容在文件中
- 2.新增命令,git clone 共享版本库地址:下载共享版本库完整的内容到本地
- 3.初始化完项目commit提交到本地版本库,push提交到共享版本库
六、GIT共享版本库多人开发
-
6.1.多人开发
-
1.项目经理开发
viewcontroller删除点代码后提交并push到共享版本库(source control -> commit)
-
2.开发人员1
-
2.1.从共享版本库将最新的代码更新到本地(Source control -> pull)
-
2.2.打印"好好工作"提交并push到共享版本库
-
2.3.项目经理开发
1.从共享版本库将最新的代码更新到本地(Source control -> pull)
2.创建person类提交并push到共享版本库
-
2.4.开发人员1开发
1.从共享版本库将最新的代码更新到本地(Source control -> pull)
2.打印"你好啊"提交并push到共享版本库
-
2.5.项目经理开发
1.在张三打印相同的那行代码打印"张三傻x",commit提交到本地版本库
2.点击push到共享版本库,报错过期
3.点击pull更新代码到本地,发生冲突
4.解决冲突,两者都保留
5.提交本地的修改commit并push到共享版本库
6.张三开发
从共享版本库将最新的代码更新到本地(Source control -> pull) -
-
6.2.使用静态库(我的Xcode9支持静态库)
-
下面是不支持静态库的处理办法
-
1.将静态库拖入项目中,不识别.h文件也不识别.a文件,可以说不识别RegexLib文件夹的所有内容(仅仅是目前xcode对git支持的bug,以前并没有此情况,期待后期修复)
-
2.解决方案(一):
通过命令行,将RegexLib文件夹的所有内容添加到暂缓区git add .
-
3.解决方案(二):
-
1.先创建真实文件夹拖入到项目中
-
2.静态库和代码拖入到项目中
-
3.提交添加的静态库并push到共享版本库中
-
-
4.总结
- 1.使用git先commit提交到本地版本库,再push到共享版本库
- 2.更新共享版本库的最新代码使用pull
- 3.先pull后再修改代码可以有效的避免冲突
- 4.保证只有一个人在修改storyboard的内容
- 5.在xcode中使用git解决冲突与svn使用解决冲突类似
- 6.静态库拖入后不识别两种解决方案
-
七、GIT版本备份(以1.0版本为例)
-
7.1.现在以1.0版本开发完毕,将1.0版本上传到Appstore,对1.0版本进行备份(打上标签)
git tag -a weiB o1.0 -m "这个是1.0版本" 注释:给某个版本打上标签,weibo是你的项目的名字 git tag 查看tag
-
7.2.需要将标签push到共享版本库(origin的意思是当前的目录)
git push origin weiBo1.0 注释:weiBo1.0是你打tag的名字,origin的意思是当前的目录
7.3.开始2.0版本的开发
-
7.4.发现1.0版本的bug,在经理版本的文件夹下面创建一个文件夹,用于修复bug,将共享版本库的内容clone
git clone 把服务器最新的代码都clone下来
-
7.5.将当前的代码转为1.0标签,创建分支,并切换到该分支
git checkout weiBo1.0 : 转为 1.0标签 git checkout -b weiBo1.1fixBug : 创建分支并切换到该分支
-
7.6.在分支中修复bug,上传到Appstore,将修复好的版本,打上tag,并上传到共享版本库
git tag -a weiBo1.1 -m "这是修复了1.0bug的1.1版本" git push orgion weiBo1.1
-
7.7.跟当前正在开发的2.0版本进行合并
source Control -> pull ->weiBo1.1fixBug
-
7.8.删除分支
git branch : 查看当前在哪个分支 git branch -r : 查看本地版本库的分支 git branch -d weibo1.1fixBug : 删除本地分支 git branch -r -d origin/weiBo1.1fixBug : 删除本地版本库分支 git push origin --delete weiBo1.1fixBug : 删除共享版本库的分支
八.创建Github代码仓库和HTTPs验证
-
8.1.前提准备
-
注册一个账号
-
-
8.2.登陆github网站 git hub
-
8.3.创建远程仓库
-
8.3.1.点击+ ->New repository
-
8.3.2.创建远程代码仓库
-
8.3.3.创建后会来到此界面,将https的url复制下来
-
-
8.4.在Xcode中添加远程仓库
-
8.4.1.点击Xcode的偏好设置
-
8.4.2.点击添加仓库
-
8.4.3.输入账号和密码
-
8.5.在桌面创建放项目的文件夹(名字自己随便起)
-
8.6.clone自己github上的项目到刚刚创建的文件夹里面
-
8.6.1.cd 进入该文件夹,初始化一下
git init
-
8.6.1.从Github上Clone项目到本地(下面是我的项目地址)
git clone https://github.com/JoanKing/WeiBo.git
-
-
8.7.在刚才的文件夹下面创建项目
-
8.8.查看下载的内容
-
8.9.初始化项目,上传到GitHub仓库
-
8.10.刷新GitHub的代码库,上传的内容就会在下面展示出来
-
8.11.总结
- 1.创建代码仓库的时候选择需要忽略的语言文件
- 2.在提交到服务器的时候,如果网络不太好,可以先commit,之后再push到远程服务器
-
九、SSH验证(上面的八是HTTPS创建的仓库)
9.1.新建一个meituan代码仓库 ,步骤和上面的8.3.2一样
-
9.2.切换
HTTPS
->SSH
-
9.3.创建公钥与私钥
公钥:存在
GitHub
上用来解密私钥:存在本地的一个
.ssh
文件夹下用来加密-
查看生成步骤
-
9.3.1.在代码仓库点击个人头像->settings
-
9.3.2.点击SSH,查看如何生成
-
9.3.3.点击生成一个新的SSH key
-
9.3.4.查看是否有SSH(下面的结果是没有的)
ls -al ~/.ssh : 在终端输入命令
-
9.3.5.终端生成SSH
ssh-keygen -t rsa -b 4096 -C "你注册GitHub的邮箱"
-
9.3.6.查看SSH Key
点击前往->个人->.ssh隐藏文件夹(看不到的话Command+Shift+.
就能看到隐藏的文件,查看完,记得还输入Command+Shift+.
,隐藏起来隐藏文件)
-
-
9.4.将公钥放到GitHub上
-
9.5.复制公钥并给此公钥起名(command+V的时候会多一个空格)
-
9.6.使用SSH添加远程仓库(我的xcode是9.2)
-
9.7.切换SHH和复制url
-
9.8.clone项目到电脑
-
9.9.创建项目meituan,并push到GitHub
-
十、github删除代码仓库
-
10.1.查看有哪些代码仓库(点击头像,选择profile)
-
10.2.比如删除meituan,点击meituan项目,再点击Settings
-
10.3.在上一步点击之后滚动到最下面
-
10.4删除仓库确认
-
10.5.检查是否删除成功
-
10.6.总结
-
1.查询是否存在SSH key
ls -al ~/.ssh
-
2.生成SSH key
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
3.私钥存在本地用于加密,公钥存在github上用于解密
-
十一、Github的其他用法(以JSONModel为例)
-
11.1.
GitGub
搜索JSONModel
-
11.2.复制
JSONModel
到自己GitHub
-
11.3.Clone JSONModel到自己的电脑
-
11.4.对JSONModel简单的修改提交到自己的GitHub代码仓库,提交的步骤就不写了,和上面的一样,下面只是提交后的结果
-
11.5.告诉JSONModel的作者自己对他的建议,可以如下操作
-
-
11.6.查看别人对
JSONModel
的提交的建议
- 11.7.对
JSONModel
作者提出一些建议
- 总结
- 1.如果想给某个框架的作者提意见,可以先将框架fork到自己的仓库中,clone后修改再push到上来,之后向作者提意见
- 2.如果对框架不明白不会使用的地方可以通过创建Issues向作者提问
- 11.7.对
十二、OSChina (码云) 的使用
-
12.1、进入到OSChina网页登陆/注册账号OSChina
-
12.2.在OSChina上创建项目
-
12.3.项目信息的填写
-
12.4.clone项目到本地
cd +桌面文件夹地址 git clone + HTTPS/SSH地址
-
12.5.本地
Xcoede
创建代码说明:在source control->push的时候弹出下面框的说明
-
12.6.push项目到OSChina成功
-
12.6.项目的管理(多人开发)
-
12.7.身份的说明
-
12.8.生成并部署SSH key
-
I.在此我只对此项目(yuehuiba)进行了SSH的部署
- II.SSH key 公钥的生成
-
终端输入 三次回车即可生成 ssh key
ssh-keygen -t rsa -C "注册OSChina的邮箱"
-
查看你的 public key,并把他添加到码云(添加到上面的框中,名字随便起)
cat ~/.ssh/id_rsa.pub
-
添加后,在终端(Terminal)中输入
ssh -T git@gitee.com
-
若返回下面则代表成功
Welcome to Gitee.com, yourname!
-
- II.SSH key 公钥的生成
-
-
12.9.SSH key clone项目
-
12.10.初始化SSH的项目
说明一下,如若你在Xcode无法操作,就使用终端来操作
-
如果你提交代码下面的报错
解决办法就是图片上面的两个命令行,打开终端,按照提示,敲入以下命令并回车即可
git config --global user.name "(开发者的用户名)" git config --global user.email "(随便填)"
-
-
终端的操作如下
-
12.11.总结
- 1.OSChina的使用与Github一致,都能使用SSH与Https的认证方式.
- 2.OSChina可以免费创建私有仓库,而Github私有的需要收费
- 3.OSChina在国内传输速度快
-
十三、码市
-
13.1.注册一个码市的账号
-
13.2.创建自己在码市的项目,有了前面的经验,相信大家对于这些创建就简单了
-
13.3.clone项目到桌面或者指定的文件夹下面
-
I、打开终端,进入你的桌面或者文件夹
cd + 地址(进入的地方)
-
II、clone项目
git clone + HTTPS/SSH地址
-
13.4.用xcode创建项目,项目要创建在clone的问价下面
-
13.5.提交项目到码市(coding)
UserName是你的码市账号的昵称
Password 是码市账号的密码
-
13.6.验证是否初始化项目成功
十四、总结
看了这么多的代码仓库,基本都是一样的,国外较好的是GitHub(私有的收费),国内是OSChina(私有的免费)和码市(私有的免费)
- 给个喜欢吧~~~~~嘿嘿😊😊😊😊😊😊