阐述
正如每只猴子都有一根尾巴,每个程序猿都有一个GitHub账号。但是很多人只是有之而不是尽之,Git、GitHub、SVN这些概念都没有理清,故理之录之。(此篇为介绍篇,指令使用部分没有详细介绍)
初探
Git
一个免费并且开源的版本控制系统,用于敏捷高效地处理任意或小或大的项目。
GitHub
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。
因在Git中并不存在主库这样的概念,每一份复制出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。
GitHub作为一个托管平台,保存着大量的版本库,这些库可以变相的看成主库(只是一种叫法)。
了解 Git 与 SVN
开发者一般对SVN比较熟悉,那我们就从SVN旁敲侧击。
Git 分布式版本库控制系统
SVN 集中式版本库控制系统
Git 与 SVN 比较
速度: 很多情况下,Git速度高于SVN
结构: SVN是集中式管理,Git是分布式管理
其它: SVN使用分支比较笨拙,Git可以轻松拥有无限个分支
SVN必须联网才能正常工作,Git支持脱机版本控制工作
旧版本的SVN会在每一个目录下放一个.svn,Git只会在根目录中拥有一个.git
Tip:
.svn 和 .git 在系统中一般都以隐藏文件夹的形式展现 。
macOS 显示隐藏文件: $ defaults write com.apple.finder AppleShowAllFiles -bool true
macOS 隐藏隐藏文件: $ defaults write com.apple.finder AppleShowAllFiles -bool false
macOS 显示/隐藏文件快捷键 CMD + Shift + .
SVN (集中式版本库控制系统概念图)
GIT (分布式版本库控制系统概念图)
分布式和集中式的最大区别在于:
在分布式下开发者可以本地提交,每个开发者机器上都有一个服务器的数据库,拥有一个本地的代码库。
在集中式下开发者只能向远程主仓库提交,每个开发者机器上拥有的只是本地的代码库,以及版本快照。
SVN工作示意图
GIT工作示意图
Git的使用
- 图形界面(Mac)
SourceTree https://www.sourcetreeapp.com/download/
GitHub https://desktop.github.com/
Xcode
- Terminal终端 使用Git命令
Terminal环境 参考官方说明 https://git-scm.com/book/zh/v2/起步-安装-Git
工作原理
远程仓库(remote): 分库(除本机的版本库)
工作区(Working Directory): 仓库文件夹里除.git目录以外的内容
版本库(Repository): .git目录,用于存储记录版本信息
- 暂缓区(stage)
- 分支(master):git自动创建的第一个分支
- HEAD指针:用于指向当前分支
Git 常用命令
git help git指令帮助手册
git help 其它指令 查看其它指令帮助手册
git init 初始化一个空的本地代码仓库
git init - - bare 初始化一个代码共享库
git config 相关 (git的配置信息相关(修改的是 .git/config文件))
git config user.name “Levis” 管理当前项目Git中的提交用户 name
git config user.email “levis@gmail.com” 管理当前项目Git中的提交用户邮箱
git config -l 查看配置信息
git config -e 编辑配置信息
git config alias.别名 原指令名 给Git 命令起别名
git config - -global
git status [文件名] 查看文件的状态
git diff [文件名] 查看文件最新修改的地方
git add . 将工作区所有的文件添加到暂缓区中
git add 文件名 将指定的文件添加到暂缓区中
git commit -m “注释” 将暂缓区的文件提交到本地版本库当前分支
git reset 版本回退(建议加上 - - hard参数)
回退到上一个版本:git reset - - hard HEAD^
回退到上上一个版本:git reset - - hard HEAD^^
回退到上N个版本:git reset - - hard HEAD~N
回退到任意一个版本: git reset - -hard 版本号(7位)
git log [文件名] 查看当前[文件]历史版本
git relog 查看当前项目所有版本
git 版本号是由sha1加密算法生成的一个40为的哈希值
git rm 删除文件
git clone 仓库URL 下载远程仓库到当前路径
git clone 仓库URL 存放仓库的路径 下载远程仓库到特定路径
git pull 下载远程仓库的最新信息到本地仓库
git push 将本地的仓库信息推送到远程仓库
git add 和 git commit 原理
+ git add :把文件修改添加到暂存区
+ git commit : 把暂存区的所有内容提交到当前分支
远程仓库
+ 自己搭建Git服务器
+ GitHub上托管项目: 公开项目免费,私有项目收费
+ oscina上托管项目:完全免费,在国内访问速度快
GitHub上创建项目
搭建远程仓库 - - 配置SSH Key
- 配置Mac的SSH Key的公钥(用于限制提交)
- ssh -v 查看ssh版本
- 生成SSH Key
- cd ~/.ssh
- ssh-keygen -t rsa -C “你的邮箱地址”
- 根据提示 进行输入
- 在 ~/.ssh目录下会生成 SSH Key秘钥对
- id_rsa:私钥,不可泄露
- id_rsa:公钥,可以公开,放置GitHub配置中
- cat id_rsa.pub 使用cat命令查看文件的内容
参考资料
1 https://git-scm.com
2 http://www.ruanyifeng.com/blog/2014/06/git_remote.html