Github 上传大文件

上传大文件和版本回退

Posted by BINBIN Blog on October 19, 2019

解决方案

维持单个文件在100M以内,保持原仓库,剔除单个文件大于100M的 github 官方解决方案 网上他人解决方案1:http://www.jianshu.com/p/09a2d9db861c 网上他人解决方案2:http://www.codeinterpreter.com/2015/01/solving-this-exceeds-githubs-file-size.html 网上他人解决方案3 :http://jingpin.jikexueyuan.com/article/36116.html

突破github限制,支持单个文件超出100M (使用 Git LFS) 这也是无意中浏览解决问题的方案时看到的 有关Google Maps SDK的问题 这里给了我们一个很好的处理方案: Git LFS 全名为:Git Large File Storage Git LFS的官方网址在这里: https://git-lfs.github.com/,官网上有很详细的说明,现在来简单说下使用方式:先安装 Git LFS 的客户端,然后在将要push的仓库里重新打开一个bash命令行: 只需设置1次 LFS : git lfs install 然后 跟踪一下你要push的大文件的文件或指定文件类型 git lfs track “*.pdf” , 当然还可以直接编辑.gitattributes文件

注意,要先上传.gitattributes! 使用git gui 后,使用git desktop push!

以上已经设置完毕, 其余的工作就是按照正常的 add , commit , push 流程就可以了 :


git add yourLargeFile.pdf
git commit -m "Add Large file"
git push -u origin master

git仓库版本回退

版本回退 前提条件:已经执行git commit命令了,但是没有push到远程仓库,用以下命令可以回退

git reset --hard HEAD^ 上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。其实这个回退就是将本地的HEAD指针移动到某个版本上而已,所以这个操作是非常快的。

git log [查看commit记录] //这个3628164 是一个commit版本号,可以指定回退到那个版本 git reset --hard 3628164 查看提交记录,也能看到每一次提交的版本号,这是一个很长的哈希值,这个时候我们通过这个版本号可以指定回退到某个版本上,用这个版本号的时候可以只用它前面几位,具体几位看你心情咯,只要能唯一标识这个版本就ok。

git reflog [查看本地会影响HEAD指针的命令操作记录,这个不会同步到远程仓库] 强调一下,注意这里是记录的会影响HEAD指针的操作记录。 简单举例说一下这个git reflog的使用场景。git reflog 假如当前我有三次提交,再假设三次提交的版本号分别为commitnum1,commitnum2,commitnum3,并且我当前处于commitnum3这个版本上(也就是HEAD指向了commitnum3),这个时候我用命令git reset –hard commitnum2就回退到了comminum2了,好,问题来了,如果突然又想回到commitnum3怎么办呢,当然你可以翻看上去看记录,那个版本号还能看到,但是如果这是第二天了,已经翻不上去了就麻烦了,这个时候git reflog就出场啦,他可以看到你昨天执行git reset –hard commitnum2命令的时候的所在版本号,这个时候就可以用git reset –hard commitnum3来恢复回去。

这个结果分三部分,前面黄色的文字就是执行那次命令时所在的版本号,中间的HEAD@[0]是就是HEAD指针变更记录,最后面就是那次命令所做的事情。

最后再啰嗦一点,如果这些commit都还没有同步到远程仓库,你reset后那些commit记录是不会被同步上去的。但是,如果已经同步上去了,就算你本地reset了,虽然本地工作区内容变成了你想要的了,但是记录就抹不去了。