一:Git简介和概念

SVN:集中式版本管理工具

Git:分布式版本管理工具, 由Linux之父开发, 先提交到 本地版本库的【暂缓区】,然后在提交到本地仓库的【分支中】,最后将本地版本库提交到远程服务器的【共享版本库】


暂缓区(stage)

分支(master):在SVN中开发都是在trunk主线中开发,而Git会自动创建一个分支master,而Git是在master分支中进行开发的

HEAD指针:指向当前分支,Git可以创建无数个分支,可以用HEAD保存当前所在的分支

版本号:git版本号是由sha1算法生产的40位哈希值,SVN是用的数字从1开始累加

iOS Git基本使用_初始化

客户端管理工具:SourceTree、GitHub、Xcode


二:Git命令行操作

当Mac安装了Xcode的时候就安装了Git,所以Git不用再安装了

git  init     // 初始化本地代码仓库(包含.git文件)


git  config  user.name  "用户名"                      // 配置该仓库的 用户名和邮箱

git  config  user.email   "邮箱"     

git  config  --global  user.name "用户名"       // 配置全局的用户名和邮箱,所有仓库都共享这一套用户名和邮箱

git  config  --global user.email   "邮箱"

git  status                                                           // 查看状态

git  log                                                                //  查看版本信息

git  reflog                                                           // 可以查看版本回退的信息

红色:该文件被添加或被修改,但是没有添加到git的【暂缓区stage】

绿色:在暂缓区但没有提交到本地版本库 


git   add  文件名                         // 将新添加的文件或修改的文件添加到  暂缓区,  . 代表将该目录下所有文件添加到暂缓区

git   rm    文件名                         // 从暂缓区中 删除,仍然需要提交到分支

git  commit   -m  "注释"      //  把暂缓区的所有内容提交当当前分支


git   reset  --hard   HEAD                     //  强制回退到当前最新版本

git   reset  --hard   HEAD^                   //  强制回退到当前最新版本的上一个版本

git  reset  --hard   HEAD~100      //  回到前100个版本


----------------------git 版本回退需要所有开发人员都要操作,比较麻烦-------------------------

git  reset  --hard  版本号     // 操作的是本地仓库

git  push  -f                       // 提交到共享版本库

这还不够,其他同事也需要进行回退 版本号,然后重新拉去最新代码 git  pull, 一般回退需要版本备份,以免回退失败


git   tag                                      // 查看标记

git   branch   [-r]                       // 查看分支


版本备份:打tag

git  tag  -a  标记名  -m "注释"             //  本地操作

git  push  origin  标记名                     //  推送到共享代码库中


>   git  tag  -a  Weibo1.0   -m  "这是1.0版本" 

>   git  push  origin  Weibo1.0 

打分支:

1. 创建一个文件夹用于存放要修复bug的项目:如 Xxx1.0FixBug

2. 将共享版本库克隆到新建的bug文件夹中


>  cd /Users/macmini/Documents/GIT/Developer/manager/Weibo1.0FixBug 
>  git clone /Users/macmini/Documents/GIT/Server/Weibo 




iOS Git基本使用_git_02




3. 切换到tag,      git  checkout   标记名

因克隆是克隆共享代码库中的最新代码,我们需要将当前最新代码切换到之前打标记的tag的代码上


>  cd /Users/macmini/Documents/GIT/Developer/manager/Weibo1.0FixBug/Weibo 
>  git checkout Weibo1.0 



4. 创建并切换到该分支,        git  checkout  -b  <分支名称>

分支是在tag的基础上创建的,上步已经切换到tag上了


>  git checkout -b Weibo1.0FixBug 


5. 修复bug,并提交

6. 打tag


> git  tag  -a  Weib1.1  -m  "修复了1.0bug的1.1版本"
> git  push origin Weib1.1 



合并分支:

1.先从新建的分支中拉去最新代码,2. 再将代码推送到master分支中

Source Control --->  pull  (Xxx1.0FixBug)

iOS Git基本使用_版本库_03

Source Control --->  push  (master)

iOS Git基本使用_版本库_04


7. 删除分支

先切换分支并删除  

git  branch  -d   Xxx1.0FixBug                          // 删除本地分支

git  branch  -r  -d  origin/Xxx1.0FixBug          //  删除本地版本库分支

git   push   origin  --delete   Xxx1.0FixBug     // 删除远程版本库中的分支


> git checkout  origin/master


> git branch -d Weibo1.0FixBug
> git branch -r -d origin/Weibo1.0FixBug
> git push origin --delete Weibo1.0FixBug 


SVN中checkout用于检出代码, Git使用Clone,Git中的checkout 用于切换标记或分支


创建新人的共享版本库

1.在服务器上创建一个新的共享版本库文件夹

2.对该文件夹进行初始化共享版本库   git init --bare

3.添加远程共享仓库

iOS Git基本使用_初始化_05

iOS Git基本使用_git_06

4. Source Control --- Push (NewWeibo/master(create)) 

将当前代码推送到新创建的远程仓库中的master分支中,这样新创建的远程仓库就有代码了

iOS Git基本使用_git_07

5. 新人将新建的远程仓库代码克隆下来来查看项目


 cd /Users/macmini/Documents/GIT/Developer/lisi 
 git clone /Users/macmini/Documents/GIT/Server/NewWeibo 



给新人创建一个新的远程共享仓库让他下载而不是从之前的远程仓库中下载的目的是放在新员工恶意或胡乱操作,影响其他老员工的开发




注意:添加的或修改的都要通过add命令将文件添加到暂缓区,修改也要add操作

iOS Git基本使用_git_08


共享版本库

共享版本库可以有多种

1.  将文件夹作为共享版本库      git  init  --bare

2. 第三方代码托管平台(GitHub、OSChina) 


1.初始化共享版本库   

git  init  --bare       // 初始化共享版本库(共享版本库没有.git文件) 


> cd /Users/macmini/Documents/GIT/Server/Weibo 
> git init --bare

iOS Git基本使用_版本库_09

2.将共享版本库克隆到本地仓库

git  clone  共享版本库位置


> cd /Users/macmini/Documents/GIT/Developer/manager
> git clone /Users/macmini/Documents/GIT/Server/Weibo 

iOS Git基本使用_版本库_10

3. 忽略文件

touch  .gitignore     


> git add .


> git commit -m "添加了忽略文件.gitignore" 


iOS Git基本使用_git_11

该文件内容可以在github官网搜索.gitignore 找到Objective-C.gitignore粘贴该文件的内容到.gitignore里面,然后add到缓存区,再commit到分支中

// SVN 是先使用Xcode初始化项目,然后再进行忽略操作,然后再提交, Git是先做忽略操作,然后再使用Xcode初始化项目

4.初始化项目

iOS Git基本使用_版本库_12

直接使用Source Control ---> Commit 直接提交即可, 并提交到共享版本库里面  Source Control ---> Push 

iOS Git基本使用_git_13


注意:当提交到共享版本库中,去共享版本库库中去找初始化的项目是不能直接看见的,因为项目已经零散的放在objects中的多个文件夹里了

iOS Git基本使用_版本库_14

6.同事B将共享版本库的项目克隆到本地

git  clone  共享版本库路径


> cd  /Users/macmini/Documents/GIT/Developer/zhangsan 
> git clone /Users/macmini/Documents/GIT/Server/Weibo 

iOS Git基本使用_版本库_15

7. 开发并提交代码

Source Control ---->  commit  并 Push to remote:origin/master


GitHub

1. 创建仓库

iOS Git基本使用_初始化_16

iOS Git基本使用_初始化_17



iOS Git基本使用_初始化_18



仓库创建好之后,使用Xcode克隆项目


1. 首先先配置一下账号 Xcode---> Preferences--->Accounts----> + Add Repository...


HTTPS方式:


iOS Git基本使用_版本库_19




Source Control ----> Checkout ----> 选择远程仓库 ---> ...

iOS Git基本使用_初始化_20


初始化项目存储到Meituan本地仓库位置并Commit 并 push to remote, 再次查看github就有新项目了

iOS Git基本使用_版本库_21


认证的时候可以使用HTTPS,SSH两种方式

公钥:存在github上用来解密

私钥:存在本地.ssh文件下用来加密

生产SSH Keys:

Settings---> SSH And GPG keys ---> generating SSH Keys---> Generating a new SSH Key and adding it to the ssh-agent ---》

在命令行中执行  ssh-keygen -t rsa -b 4096 -C "your_email@example.com"   // 换成自己的邮箱, 然后一路回车 ----》

右键文本编辑器打开id_rsa.pub ,并粘贴文件中的所有内容 -----》

New SSH Key: 将内容粘贴到key中



iOS Git基本使用_初始化_22

iOS Git基本使用_初始化_23

iOS Git基本使用_git_24

iOS Git基本使用_初始化_25

iOS Git基本使用_初始化_26

iOS Git基本使用_版本库_27


iOS Git基本使用_版本库_28

iOS Git基本使用_版本库_29