github

Git 提交规范

良好的代码风格很重要,但是良好的 commit 记录同样重要。我们提交代码的时候都要提交 commit message,否则就不允许提交。

$ git commit -m "hello world"
1

# commit message 格式

目前最流行的提交规范是Conventional Commits (opens new window),格式如下:

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]
1
2
3
4
5

Header 有三个字段,type(必须),scope(可选) 和 description(必须)。

type 用于说明 commit 的类别,有以下几个选项:build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test

build: 对构建系统或者外部依赖项进行了修改
chore: 构建过程或辅助工具的变动
ci: 对CI配置文件或脚本进行了修改
docs: 对文档进行了修改
feat: 增加新功能
fix: 修复BUG
perf: 优化相关,比如提升性能,体验
refactor: 重构代码
revert: 回滚到上一个版本
style: 修改代码格式
test: 添加测试代码
1
2
3
4
5
6
7
8
9
10
11

scope 用于说明 commit 影响的范围,比如某个组件的修改。

description 是 commit 目的的简短描述,不超过 50 个字符。最好以动词开头,首字母小写,末尾不加句号(.)

# Body

Body 是可选的,用来对本次提交进行详细描述, 可以写成多行,例如:

fix: prevent racing of requests

Introduce a request id and a reference to latest request. Dismiss
incoming responses other than from latest request.
1
2
3
4

Footer 也是可选的,主要有两个使用情况。一种是不兼容性更新:

chore!: drop support for Node 6

BREAKING CHANGE: use JavaScript features not available in Node 6.
1
2
3

一种是引用提交的问题,例如本次提交是修正某个 Issue 的问题。

feat(lang): add Polish language

Closes #234
1
2
3

# 总结

良好的 commit 提交规范和代码规范同样重要。

# 参考

Commit message 和 Change log 编写指南 (opens new window)

Github 存储大文件

最近在做项目的时候,需要上传一个超过 200MB 的数据库文件到 Github 上保存,结果 Github 提示文件过大。这才知道 Github 对单文件有 100 MB 的容量限制。

# 问题介绍

正常情况下,我们执行 add, commit 操作的时候都没啥问题。

$ git add .
$ git commit -m "add large file"
1
2

但是执行 push 操作的时候会返回错误。

$ git push
Enumerating objects: 21, done.
Counting objects: 100% (21/21), done.
Delta compression using up to 10 threads
Compressing objects: 100% (17/17), done.
Writing objects: 100% (17/17), 153.95 MiB | 13.82 MiB/s, done.
Total 17 (delta 4), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (4/4), completed with 3 local objects.
remote: error: Trace: ###
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File xxx.db is 259.50 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
To https://github.com/acgotaku/switch.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://github.com/{user}/{repo}.git'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

这里提示我们可以使用 Git Large File Storage 来解决。

# 安装 LFS

根据官网的教程进行安装:

$ brew install git-lfs
1

然后 cd 到对应的 repo:

$ cd {repo}
$ git lfs install
Updated git hooks.
Git LFS initialized.
1
2
3
4

# 重新提交

这时候我们需要保留文件的同时,取消 commit:

$ cd {REPO}
$ git reset --soft HEAD^
1
2

然后单独提交大文件:

$ git lfs track {LARGE_FILE}
Tracking {LARGE_FILE}
$ git add .gitattributes
1
2
3

执行第一行命令之后会生成一个 .gitattributes 文件,记得这个也需要一并提交。

接下来执行普通的 add commit, push 三个步骤就可以了。

$ git add .
$ git commit -m "add large file"
$ git push
1
2
3

# 总结

Github 针对大文件存储有一个月 1GB 流量的限制,所以如果到达限制了需要付费才能继续使用。

# 参考

GitHub に 100MB 超のファイルを置く (opens new window)

Github如何省略每次输入验证信息

项目开发中经常会遇到 CI 自动拉取 Github 库的情况,我们个人使用的时候会手动输入账户密码信息,但是针对 CI 来说,我们一般会把敏感的认证信息放在环境变量里。所以针对认证信息的自动输入,需要做一些处理。

# 环境变量自动替换

针对 Travis CI,我们一般把认证信息放在环境变量里,所以在执行 clone 其他 repo 的时候,可以先设置认证信息。

git config --global url."https://${CI_USER_NAME}:${CI_USER_TOKEN}@github.com/".insteadOf "https://github.com/"'
1

这样设置的话,会自动替换 git clone 的网址。

# URL 里面写入认证信息

有时候需要以另外一个身份进行 clone repo 的时候,会直接在 repo 的 URL 前面加上认证信息。

git clone https://${USER_NAME}:${USER_TOKEN}@github.com/{username}/{repo}
1

这样可以很方便的 clone 信息,但是认证信息会存在当前库的 git config 文件里,有泄漏的风险。

# netrc 设置

netr 文件用于存储网站的认证信息,一般位置在~/.netrc。格式是:

machine github.com
login username
password xxxxxxx
1
2
3

# 总结

总共有这么三种省略认证信息的方式,根据实际情况选择自己方便的一种认证方式即可。

参考:

GitHub でユーザ名・パスワード省略 (opens new window)