learn

A collection of resource about engineering, devops etc.

View the Project on GitHub openacid/learn

git 使用向导和规范

常用的 git 命令:

这里简单列出, 每个命令的具体行为和参数, 要看git help <command>, 和实际操作.

git小游戏

githug 这个小游戏是个不错的git交互教程, 覆盖了大部分常用操作, 玩通之后对基本的git使用就不会有太大问题了. 对新接触git的同学应该有不少帮助.

不建议使用以下操作:

UNLESS YOU KNOW WHAT YOU ARE DOING 🐶

git的提交

组织提交点的原则

1个commit点尽量小, 但完整, 原子:

准确详细的提交日志(commit message):

将commit message当做一封邮件来写:

commit message 规范:

参考: how-to-write-a-git-commit-message.html

Pull Request

Pull Request(PR), 用于多人协作的主要方式:

建立PR的原则

和commit点的建立类似: 1个commit点尽量小, 但完整, 原子:

PR建立后一般不建议再次修改修改PR中的提交(推送新的提交点等), 因为可能会引起评论和代码错位.

Review PR

branch 管理

GUI git

官方列出的GUI工具列表: list of git GUI

里面几个经xp简单试用.觉得还不错的推荐:

sourcetree 免费

sourcetree]

gitx 免费

gitx

tower 收费

tower

插件 git-subrepo

git-subrepo 用来将第3方的git库导入到我们的git库中作为依赖包. 他将第3方git库的全部代码作为一个目录加入到我们的git库中.

这样可以:

复制git-subrepo 的使用说明如下:

Merge sub git repo into sub-directory in a parent git dir with git-submerge. git-subrepo reads config from “.gitsubrepo” resides in the root of parent git working dir.

Usage

Configure file “.gitsubrepo” syntax:

    # set base of remote url to "https://github.com/"
    [ remote: https://github.com/ ]

    # set base of local dir to "plugin"
    [ base: plugin ]

    # <local dir>   <remote uri>            <ref to fetch>
    gutter          airblade/vim-gitgutter  master

    # if <remote uri> ends with "/", <local dir> will be added after "/"
    ansible-vim     DavidWittman/           master

    # change base to "root"
    [ base: ]

    # use a specific commit 1a2b3c4
    ultisnips       SirVer/                 1a2b3c4

With above config, “git subrepo” will:

  • fetch master of https://github.com/DavidWittman/ansible-vim and put it in: /plugin/ansible-vim

  • fetch master of https://github.com/airblade/vim-gitgutter and put it in: /plugin/gutter

  • fetch commit 1a2b3c4 of https://github.com/SirVer/ultisnips and put it in: /ultisnips

使用 git-subrepo

一般使用git-subrepo的项目里都加入了git-subrepo脚本, 在根目录下或在script目录下. 用git-subrepo工具同步自己的更新.

也可是把git-subrepo的脚本放到自己的某个bin目录下.

例如在s2-init项目中的.gitsubrepo配置如下:

[ remote_suffix: .git ]
[ remote: https://github.com/ ]

[ base: ]

shlib.sh         baishancloud/shlib             master   dist/shlib.sh
git-subrepo      baishancloud/git-subrepo       master   git-subrepo

git-subrepo产生的提交点是squash的, 例如:

* commit d81afd8
| Author:     drdr xp <drdr.xp@gmail.com>
| AuthorDate: Wed Apr 5 00:23:37 2017 +0800
| Commit:     drdr xp <drdr.xp@gmail.com>
| CommitDate: Wed Apr 5 00:25:26 2017 +0800
|
|     Squashed git-subrepo master:git-subrepo e0a10a81b
|
|     url:      https://github.com/baishancloud/git-subrepo.git
|     ref:      master
|     sub-dir:  git-subrepo
|
|     localtag: refs/tags/_gitsubrepo/git-subrepo e0a10a81b01b491fa2be8107f64a53fe19b96deb
|
|     git-subrepo-dir: git-subrepo
|     git-subrepo-hash: e0a10a81b01b491fa2be8107f64a53fe19b96deb
|