一.简介
Git(读音为/ɡɪt/
)是一个开源的分布式版本控制系统, Linus Torvalds 为了帮助管理 Linux Kernel 代码而创建了Git.
Git的优势:
- 分布式版本库,无单点故障;
- 支持离线提交, 几乎大部分操作都是本地执行, 速度快;
- 记录文件快照, 而非更改差异, 通过SHA-1哈希算法保证文件完整性;
- 分支操作方便,比较合并性能好;
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
SVN vs Git:
1. 由一个中央服务器管理所有文件的修订版本(中央服务器数据丢失, 则会导致版本库丢失);
1. 协同工作的通过客户端连到这台服务器,取出最新的文件或者提交更新(无法离线提交);
1. 创建分支即拷贝目录, 分支不易合并, 切换分支速度慢.
1. 每个人电脑上均有一份完整的版本库, 可离线提交.
2. 操作速度快
基本操作对照
SVN Git 从仓库获取代码 checkout clone 提交到服务器 commit add -> commit -> push 更新代码 update pull
Git交互流程
二.Git的安装和配置
安装:
- 在命令行界面下输入
git
, 如果未找到该命令, 则需要安装Git - windows系统可到 https://git-scm.com/download 下载windows版, 按默认选项安装即可 macOS 默认已自带git, 如未找到命令, 可使用 Homebrew 安装Git.
GUI安装(非必须): IDE自带GUI, gitk(git-scm安装后自带), SourceTree, TotorisGit
配置
重要: 初次安装git后需要配置个人的用户名
和电子邮件地址
。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录. user.name
为真实姓名(用汉字), user.email
为公司邮箱
git config --global user.name "张三"
git config --global user.email "zhangs@gantsoftware.com"
查看配置的值:
git config user.name
git config user.email
三. 常用操作
克隆远程仓库到本地
git clone git@git.gantsoftware.com:tangsw/git-demo.git
查看当前状态
git status
添加文件到暂存区 git add
# 添加文件file1到暂存区 # git add file1 # 添加所有更改到到暂存区 git add -A
提交
git commit -m "注释信息" # # 自动将已经跟踪的文件加入暂存区, 并提交 git commit -am "注释信息"
推送到远程
# 推送到本地master分支到远程master分支 git push origin master # # 推送本地feature/FW-1分支到远程feature/FW-1分支 git push origin feature/FW-1
拉取代码
# 拉取并直接合并到本地的master分支 git pull origin master # # 下载远程所有更新 (不直接合并入本地分支) git fetch origin
分支相关的操作
# 列出所有分支 git branch -a # # 新建并切换到feature01分支 git checkout -b feature01 # # 切换到master分支 (工作空间或暂存区有修改则无法切换) git checkout master # # 强制切换到master分支 (会丢失工作空间和暂存区的修改) git checkout master -f # # 删除feature01分支 git branch -d feature01
# 将feature01分支合并到当前分支 git merge feature01 # # 将feature01分支合并到当前分支, 不使用fast-forward方式 git merge --no-ff feature01
撤销操作
# 检出版本库最后一次提交的中的file1, 本地的file1文件会丢失. 但是暂存区文件不受影响 git checkout file1 # # 重置暂存区的file1, 恢复到本地; 如果本地的file1文件又进行过修改, 则丢弃暂存区的file1 git reset file1 # # 清除本地和暂存区的所有修改 git reset --hard # # 清除未跟踪的文件和目录 git clean -fd
版本回退
# 方法1: 清除139dcf到develop当前位置的提交, 不包含139dcf git revert 139dcf..develop # # 方法2: 方法1中回退少数提交是比较方便的, 但是如果提交中包含merge, 则无法回退. # STEP1: 删除该目录下所有的文件 (.git, .gitignore文件不要删除) # STEP2: 检出139dcf的提交, 但不能影响branch git checkout 139dcf -- ./ # STEP3: 提交并推送到远程 git commit -am "Revert to 139dcf" git push origin develop # # 会撤销指定版本之后的提交, 不推荐 (可通过git reflog显示所有的提交) git reset --hard 139dcf git push -f origin master
四. 使用GitLab
GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。
登录GitLab
地址: http://git.xxxx.com/ 使用邮箱前缀作为用户名
生成秘钥对
Git支持多种协议,包括http/https,但通过ssh支持的原生git协议访问比http方式访问稳定, 并且可免去输密码的麻烦.
windows 下在任意目录右键 -> 打开Git Bash Here; macOS下直接打开终端
- 进入到.ssh目录
cd ~/.ssh
; - 用
ls
命令查看是否存在秘钥对文件 id_rsa 和 id_rsa.pub; - 若不存在, 可通过以下命令创建秘钥对, 提示信息回车即可;
ssh-keygen -t rsa -C "zhangs@gantsoftware.com"
- 查看公钥文件
cat id_rsa.pub
- 登录GitLab后, 访问
http://git.gantsoftware.com/profile/keys
页面, 将上一步显示的公钥拷贝至此处, 点击Add key.
Issue
Merge Request
合并请求, 例如分支上的feature开发完成, 需要合并到master