Unsplash
Photo by David Marcu on Unsplash

Contents
  1. 1. 前言
  2. 2. 安装Git for Windows
  3. 3. 配置SSH
  4. 4. 创建项目或拉取项目
    1. 4.1. 跟踪空目录
  5. 5. 项目开发流程
  6. 6. 修改bug流程
  7. 7. 分支开发过程中,主线有紧急修改需要合并
  8. 8. 回滚
  9. 9. 分支管理
  10. 10. 打包更新文件
  11. 11. 下一步
  12. 12. Reference

前言

虚拟机里安装完了GitLab,报告上去,管理员在公司内部服务器也配置好了,接下来整理Git开发流程。

安装Git for Windows

  1. 下载
  2. 选择安装目录
  3. select Components
    3.1 勾中Windows Explorer Intergration/Simple Content Menu(Gui+Bash)
    3.2 勾中关联.git*,.sh等
  4. 选择Run Git from the Windows Command Prompt
  5. 选择Checkout as-is, commit as-is
  6. 安装

配置SSH

  1. 进入Git Bash
  2. 检查是否含有.ssh/id_rsa文件
    2.1 有则复制id_rsa.pub内公钥文本
    windows下
    cat ~/.ssh/id_rsa.pub后复制命令行,或
    clip < ~/.ssh/id_rsa.pub
    linux下
    xsel < ~/.ssh/id_rsa.pub
    mac下
    pbcopy < ~/.ssh/id_rsa.pub
    2.2 没有则创建,一路回车,执行2.1
    ssh-keygen -t rsa -C "EMAIL@E.C"
  3. 将复制的ssh的public key放入项目
    3.1 github.com-右上角头像-Settings-侧边栏SSH and GPG keys-New SSH Key
    3.2 gitlab-右上角头像-Settings-顶部SSH Keys-Add Key
  4. 设置全局变量
    git config --global user.name "name"
    git config --global user.email "mail@box.com"

创建项目或拉取项目

  1. 初始化路径
    git init
  2. 将GitLab SSH路径添加为origin
    git remote add origin git@*.*.*.*:GROUP/PROJECT.git
    将Github路径添加为origin
    git remote add origin git@github.com/USERNAME/REPOSITORY.git
    2.1 假如路径添加有误可删除后重加
    git remote remove origin
    2.2 或修改路径
    git remote set-url origin NEW_PATH
    2.3 检查已经设定的路径
    git remote -v
  3. 添加文件提交并上传或拉取目录
    3.1 【创建】
    git add .
    git commit -m "Initial commit"
    git push origin master第一次上传需要添加-u--set-upstream参数
    3.2 【拉取】
    git pull

跟踪空目录

由于git只跟踪文件而不跟踪目录,所以假如要将一个空目录加入追踪,该目录下必须有至少一个文件。
假如空目录是为了保持项目的整洁性而存在的,比如RuntimeTemp
该类目录下可放入一个.gitignore,里面写入

1
2
*
!.gitignore

假如空目录是为了留出给即将创建的文件,则可放入一个空的.gitkeep,这是为了与gitignore区分

在目录下搜索空的并且没有gitignore占位文件的目录并创建一个空的.gitignore
find . \( -type d -empty \) -and \( -not -regex ./\.git.* \) -exec touch {}/.gitignore \;
或只搜索空的并且没有gitignore占位文件目录:
find . \( -type d -empty \) -and \( -not -regex ./\.git.* \);

项目开发流程

  1. 配置git并拉取master,每次push前都pull一下防止失败
    git pull
  2. 查看分支
    git branch
    2.1 没有分支则创建并切换分支
    git checkout -b NEW_BRANCH
    2.2 有分支则切换分支
    git checkout BRANCH
  3. 在分支中开发,提交
    git status查看可添加的文件
    git add .添加文件
    git diff --cached --name-only查看已添加的文件
    git commit -m "MSG"提交并输入信息
    git push origin --set-upstream BRANCH上传
  4. [网页]发起Merge Request
  5. [网页]项目master通过MR请求
    5.1 或删除分支
    git branch --delete BRANCH

:在GitLab默认权限管理中,只有Owner和Master才能对项目的master分支进行push,其他身份(比如developer)对master进行push操作会被驳回。

修改bug流程

  1. 从master创建并切换分支
    git checkout -b issue-NAME master
  2. 在issue分支中修复bug
  3. 将issue分支合并到master
    git checkout master
    git merge issue-NAME
  4. 提交master
    git push

分支开发过程中,主线有紧急修改需要合并

  1. 合并前先提交
    git add .
    git commit -m "MSG"
  2. 切换到master,拉取最新
    git checkout master
    git pull
  3. 查看需要合并的commit id
    git log --oneline
  4. 记下commit id,切换到分支,摘樱桃
    git checkout BRANCH
    git cherry-pick COMMIT_ID

回滚

  1. 樱桃摘错了怎么办?
    1.1 查看版本日志
    git log --oneline
    git log --oneline
    1.2 使用revert回退版本,并编辑回退消息
    git revert COMMIT_ID
    git rever COMMIT_ID
    1.3 回退完成查看日志
    git log --oneline
  2. 一个否认历史的做法,不建议在多人合作开发中使用
    git reset --hard COMMIT_ID退回版本
    ===继续开发===
    git push -fforce提交

分支管理

  1. 查看所有分支
    git branch -a
    在Git Bash中,跟踪的远程分支显示为红色,当前分支显示为绿色,其他分支显示为白色。
    git branch -a
  2. 删除跟踪的远程分支
    git push origin :REMOTE_BRANCH
    git push origin icecream
    2.1 可能会遇到跟踪的远程分支删除不了的情况,
    git push origin change
    使用git fetch -p来清除,参照此处
    git fetch -p
    :按照git手册上-p -prune说明
    该命令可以去除所有本地在跟踪的且远程不存在的远程分支。
  3. 删除本地分支
    git branch -d LOCAL_BRANCH
    git branch -d icecream
    3.1 假如出现
    error: The branch 'store' is not fully merged.
    If you are sure you want to delete it, run 'git branch -D store'.
    则按照提示,运行
    git branch -D LOCAL_BRANCH

展示一下删干净的分支列表
git branch -a

打包更新文件

git archive -o update.zip NEW_ID $(git diff --name-only OLD_ID NEW_ID)
git archive -o update.zip HEAD $(git diff --name-only OLD_ID HEAD)

下一步

向Git前进(三) | 稀疏检出sparse checkout

Reference

关于 GIT 生成更新包的问题 - v2ex
Git 如何从某个Commit后导出所有修改过的文件? - ruby-china
How to undo ‘git add’ before commit? - so
what is the difference between origin/master vs origin master? - so
Git for Windows安装和基本设置 - vitah
Gitflow工作流 - oldratlee
拷贝复制命令行 - oldratlee
git 回退到某版本后,再在此版本上更新,无法 push - ruby-china
用git 保存空目录 - zhaodezhong
How can I add an empty directory to a Git repository? - so

Contents
  1. 1. 前言
  2. 2. 安装Git for Windows
  3. 3. 配置SSH
  4. 4. 创建项目或拉取项目
    1. 4.1. 跟踪空目录
  5. 5. 项目开发流程
  6. 6. 修改bug流程
  7. 7. 分支开发过程中,主线有紧急修改需要合并
  8. 8. 回滚
  9. 9. 分支管理
  10. 10. 打包更新文件
  11. 11. 下一步
  12. 12. Reference