一:Git简介和概念
SVN:集中式版本管理工具
Git:分布式版本管理工具, 由Linux之父开发, 先提交到 本地版本库的【暂缓区】,然后在提交到本地仓库的【分支中】,最后将本地版本库提交到远程服务器的【共享版本库】
暂缓区(stage)
分支(master):在SVN中开发都是在trunk主线中开发,而Git会自动创建一个分支master,而Git是在master分支中进行开发的
HEAD指针:指向当前分支,Git可以创建无数个分支,可以用HEAD保存当前所在的分支
版本号:git版本号是由sha1算法生产的40位哈希值,SVN是用的数字从1开始累加
客户端管理工具: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 reset --hard 版本号,然后重新拉去最新代码 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文件夹中
3. 切换到tag, git checkout 标记名
因克隆是克隆共享代码库中的最新代码,我们需要将当前最新代码切换到之前打标记的tag的代码上
4. 创建并切换到该分支, git checkout -b <分支名称>
分支是在tag的基础上创建的,上步已经切换到tag上了
5. 修复bug,并提交
6. 打tag
合并分支:
1.先从新建的分支中拉去最新代码,2. 再将代码推送到master分支中
Source Control ---> pull (Xxx1.0FixBug)
Source Control ---> push (master)
7. 删除分支
先切换分支并删除
git branch -d Xxx1.0FixBug // 删除本地分支
git branch -r -d origin/Xxx1.0FixBug // 删除本地版本库分支
git push origin --delete Xxx1.0FixBug // 删除远程版本库中的分支
SVN中checkout用于检出代码, Git使用Clone,Git中的checkout 用于切换标记或分支
创建新人的共享版本库
1.在服务器上创建一个新的共享版本库文件夹
2.对该文件夹进行初始化共享版本库 git init --bare
3.添加远程共享仓库
4. Source Control --- Push (NewWeibo/master(create))
将当前代码推送到新创建的远程仓库中的master分支中,这样新创建的远程仓库就有代码了
5. 新人将新建的远程仓库代码克隆下来来查看项目
注意:添加的或修改的都要通过add命令将文件添加到暂缓区,修改也要add操作
共享版本库
共享版本库可以有多种
1. 将文件夹作为共享版本库 git init --bare
2. 第三方代码托管平台(GitHub、OSChina)
1.初始化共享版本库
git init --bare // 初始化共享版本库(共享版本库没有.git文件)
> cd /Users/macmini/Documents/GIT/Server/Weibo
> git init --bare
2.将共享版本库克隆到本地仓库
git clone 共享版本库位置
> cd /Users/macmini/Documents/GIT/Developer/manager
> git clone /Users/macmini/Documents/GIT/Server/Weibo
3. 忽略文件
touch .gitignore
> git add .
该文件内容可以在github官网搜索.gitignore 找到Objective-C.gitignore粘贴该文件的内容到.gitignore里面,然后add到缓存区,再commit到分支中
// SVN 是先使用Xcode初始化项目,然后再进行忽略操作,然后再提交, Git是先做忽略操作,然后再使用Xcode初始化项目
4.初始化项目
直接使用Source Control ---> Commit 直接提交即可, 并提交到共享版本库里面 Source Control ---> Push
注意:当提交到共享版本库中,去共享版本库库中去找初始化的项目是不能直接看见的,因为项目已经零散的放在objects中的多个文件夹里了
6.同事B将共享版本库的项目克隆到本地
git clone 共享版本库路径
> cd /Users/macmini/Documents/GIT/Developer/zhangsan
> git clone /Users/macmini/Documents/GIT/Server/Weibo
7. 开发并提交代码
Source Control ----> commit 并 Push to remote:origin/master
GitHub
1. 创建仓库
Source Control ----> Checkout ----> 选择远程仓库 ---> ...
初始化项目存储到Meituan本地仓库位置并Commit 并 push to remote, 再次查看github就有新项目了
认证的时候可以使用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 "[email protected]" // 换成自己的邮箱, 然后一路回车 ----》
右键文本编辑器打开id_rsa.pub ,并粘贴文件中的所有内容 -----》
New SSH Key: 将内容粘贴到key中