github

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团队协作

社畜也快半年了,说实话工作确实没有学生生活有趣。每天基本都是坐在电脑前写代码,可能我是那种更喜欢新鲜生活的人吧。对于重复的生活很容易就厌倦了,但生活由不得自己,上班的理由很简单,仅仅是因为穷。学生时代写代码基本都是一个人单干,但进入公司就开始正式的团队协作,也算是学到很多团队合作的知识了吧。特别是利用 Github 进行高效的合作开发。

# Github 协作开发

首先是切换到需要开发的分支,这里我们假设要在dev分支上进行开发。

git checkout dev
1

然后,在 dev 分支上建立属于自己的分支。命名可以以功能命名也可以用解决的 issue 命名。例如:dev-add-page dev-issue20,之后再切换到自己建立的分支。

git branch dev-issue20
git checkout dev-issue20
1
2

这样,就可以在自己分支上开发了,开发之后 push 到服务器上,再请求pull request进行合并操作,在pull request的时候,可以让同事来进行代码 review 保证开发质量。

协作要用到的 Github 命令很简单,之后再说说经常用的其他命令。例如,当我们写了半天发现自己在错误的分支上进行了开发,该怎么处理呢?我们可以使用git stash命令来把临时修改隐藏起来。

git stash
git checkout dev-issue20
git stash pop
1
2
3

如果我们不小心在 dev 分支上直接进行了开发,可以使用上面的命令迅速把自己的修改切换到自己的分支上。

还有一种情况是,我们在自己的分支上进行开发的过程中,dev分支上合并了其他同事的代码,我们需要和dev分支保持一致。这时可以使用git pull origin dev分支来同步其他同事的代码,避免自己的代码和主分支产生冲突。

自己的分支在上传到服务器并合并之后通常服务器会删掉这个分支,但本地还是会保留。我们需要定期删掉自己本地已经合并的分支,这里推荐使用下面的命令。

git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d
1

正则表达式里面是不需要删除的分支。

有时候发现某个分支做的功能被砍掉了,然后需要删掉这个分支。可以使用下面的命令:

git push -d origin <branch_name>
git branch -d <branch_name>
1
2

分别删掉远程服务器和本地的分支。

有时候发现自己写的思路是错的,需要舍弃现在所有的修改,可以使用reset命令来重置。

git reset --hard
1

当然这个操作比较危险,你应该慎用。

当你需要移除所有新加的文件,但这些文件还没加入库当中。你可以使用clean命令来清除所有新加文件。

git clean -f
1

目前经常使用的就是这么多,如果大家有更好的学习Git命令的推荐资料,欢迎留言。谢谢!

参考:

Stack Overflow (opens new window)

高质量的 Git 中文教程 (opens new window)

Pro Git (opens new window)