小墨の博客

梦想需要付诸行动,否则只能是梦

​Git LFS

Git LFS官网:https://git-lfs.github.com/

个人使用到的一些命令:

sudo apt-get install git-lfs

git lfs migrate import --include="project/*"  --everything
git lfs migrate export --include="project/index.json"  --everything

git lfs fetch
git lfs checkout


官网安装说明

Getting Started

  1. Download and install the Git command line extension. Once downloaded and installed, set up Git LFS for your user account by running:

    git lfs install

    You only need to run this once per user account.

  2. In each Git repository where you want to use Git LFS, select the file types you'd like Git LFS to manage (or directly edit your .gitattributes). You can configure additional file extensions at anytime.

    git lfs track "*.psd"

    Now make sure .gitattributes is tracked:

    git add .gitattributes

    Note that defining the file types Git LFS should track will not, by itself, convert any pre-existing files to Git LFS, such as files on other branches or in your prior commit history. To do that, use the git lfs migrate[1] command, which has a range of options designed to suit various potential use cases.

  3. There is no step three. Just commit and push to GitHub as you normally would; for instance, if your current branch is named main:

    git add file.psd
    git commit -m "Add design file"
    git push origin main

    Check out our wikidiscussion forum, and documentation for help with any questions you might have!





Git-LFS 使用和迁移

原文链接:https://murphypei.github.io/blog/2019/12/git-lfs


一次 Git-LFS 的迁移记录。

网上说了一大堆 Git-LFS 的作用和好处,我觉得都是把官方文档零零碎碎翻译一下。在我看来,对于普通开发者而言,Git-LFS 的作用很简单,就是让你 pull 代码的时候不用每次都把一大堆大文件一块 pull 下来,而且我个人使用体验还有切换分支之类的操作都变快了。

Git-LFS 安装

sudo apt/yum install git-lfs 即可,然后 git lfs install

Git-LFS 使用

追踪和推送

在一个已经初始化后的 Git 仓库中使用 Git-LFS 来追踪大文件,命令如下:

git lfs track <filepattern>

track 会产生一个 .gitattributes 文件,和 .gitignore 类似,也是 git 自己的文件,用于描述 Git-LFS 的文件名匹配模板。一般而言,文件中的每一行类似这种:

*.pbtxt filter=lfs diff=lfs merge=lfs -text

-text 就是表示这个文件不是文本文件。其余的就是告诉 Git 在处理 filter、diff、merge 时将 pbtxt 文件通过 LFS 的方式处理,打开 .gitconfig 可以看到相关命令的替换。

用 Git-LFS track 追踪档案之后,就可以添加、提交和推送到远端目录上,你在首次推上去的时候,会要一些时间将大型档案传输到远端。这里是很多教程很模糊的地方,事实上,Git-LFS 并不是什么魔法,仍然要将文件同步到远端。有的 git 仓库页面会显示 Git-LFS 的标记,gitlab 就可以,好评,tx 自用的工蜂,呵呵。

拉取

其他用户使用这个仓库的时候,使用 git clone 会拉取普通的文件,但是 LFS 追踪的文件不会被拉下来。如果这些文件本地没有,则需要使用 git lfs pull 从远程仓库拉取。

现在的 git 貌似是直接能够拉取所有文件,包括 lfs 文件,如果不想拉取 lfs 文件,可以使用 GIT_LFS_SKIP_SMUDGE=1 git clone

总结来看,Git-LFS 唯一的目的就是于其他 clone 使用者来说,他们若不需要异动大型档案,就不需要进行git lfs pull 的动作,于是那个原本的大型档案会变成一个130 bytes 的文字档。即使他clone 整个master,也是很小的储存库。Git-LFS 的使用无关档案大小,唯一的重点在于某些档案你想放在 master 内,或是说必须放在master 内,而其他人又不需要同步这个档案的话,就可以使用 Git-LFS 的方式来管理此档案。

Git-LFS 迁移

这个才是比较实用的,因为很多仓库是用着用着才想着用 lfs…

对于一个已经用了一段时间的 Git 仓库,直接执行 git lfs migrate import --include="*.bin" --everything ,可以将所有本地分支上的匹配文件的提交历史版本都转换为 lfs,这个时候无论你切换到哪个分支,都会出现 .gitattributes 文件,且内容都是一样的。

如果只想更新某个分支的话,可以使用 git lfs migrate import --include="*.bin" --include-ref=refs/heads/master

可以通过 git lfs ls-files 查看哪些文件被转换成 lfs 了。

切换成功后,就需要把切换之后的本地分支提交到远程仓库了,需要手动 push 更新远程仓库中的各个分支。这里有个极大需要注意的地方,就是转换会更改所有提交的 hash,因此 push 的时候需要使用 force 选项,而当其他人员再次使用 pull 去远程拉取的时候会失败。这里当然可以使用 pull --allow-unrelated-histories 来把远程仓库被修改的历史与本地仓库历史做合并,但是最好是重新拉取

切换成功后,git 仓库的大小可能并没有变化,主要是之前的提交还在,因此需要做一些清理工作:

git reflog expire --expire-unreachable=now --all
git gc --prune=now

但是,如果不是历史记录非常重要的仓库,建议不要像上述这么做,而是重新建立一个新的仓库。个人经验,迁移可以使用,但并没那么美好

附一个迁移相关的基础教程

Git-LFS 需要多次输入密码的问题

解决 Git-LFS 使用导致 push 需要输入多次用户名和密码。

Linux:

# Set git to use the credential memory cache
git config --global credential.helper cache

# Set the cache to timeout after 1 hour (setting is in seconds)
git config --global credential.helper 'cache --timeout=3600'

其他平台可以参考:Caching your GitHub password in Git



Github又悄悄升级了,这次的变化是大文件的存储方式

原文链接:https://cloud.tencent.com/developer/article/1958315

简介

github是大家常用的代码管理工具,也被戏称为世界上最大的程序员交友网站,它的每次升级都会影响很多用户。在我的个人github网站上,之前在做JAVA NIO demo的时候上传了一个自制的大文件,最近对这个项目进行了一些修改,但是却上传不上github网站了,查看报错的原因,就是说项目中有一个大文件无法上传,现在github提供了一个叫做Git Large File Storage (LFS)的工具来替换github中的大文件。

那么什么是LFS,我们应该怎么使用LFS呢?一起来看看吧。

LFS和它的安装

LFS的全称是Git Large File Storage,可以将库中的大文件存储在远程服务器比如GitHub.com或者GitHub Enterprise上,在库中保存的是指向这些大文件的链接。

LFS安装起来比较简单,在mac上可以使用下面的brew命令:

brew install git-lfs

安装完毕之后,需要把LFS和你的git账号关联起来:

git lfs install

注意lfs需要git版本>= 1.8.2

接下来我们就可以愉快的使用LFS了。

LFS的使用

为了模拟github上的大文件,我们可以在github上创建一个新的repository,然后执行下面的命令添加对应的内容:

git init .
echo Hello World > README.md
git add README.md
git commit -m "Initial commit"

上面的代码提交到github上肯定没有问题。

为了测试大文件,我们可以使用dd命令创建一个256M的大文件如下:

dd if=/dev/urandom of=test.bin bs=1024 count=262144

在最新版本的github中,这个文件肯定是上传不上去的,那么我们应该怎么使用LFS呢?

lfs提供了下面的help命令:

$ git lfs help <command>
$ git lfs <command> -h

这里我们需要使用的是git lfs track命令如下:

git lfs track '*.bin'

上面的例子我们使用的是通配符来匹配所有以bin结尾的文件。

当然,如果你想匹配上面的test.bin文件,也可以直接这样使用:

git lfs track 'test.bin'

这个命令的目的就是使用lfs来跟踪这些bin文件。你也可以使用track命令来列出所有被lfs的跟踪路径:

git lfs track
Listing tracked paths
    *.bin (.gitattributes)

我们可以使用下面的命令来查看lsf具体的跟踪文件:

git lfs ls-files

但是因为你还没有commit上面创建的bin文件,所以这里是看不到的。

这些lfs的trace信息是存储在项目根目录下的.gitattributes中的。

我们需要一并提交这个.gitattributes文件,以便所有checkout这个库的用户都可以知晓这个lfs服务。

当我们把所有的文件都提交之后,再使用git lfs ls-files命令,可以看到类似下面的内容:

d05241dd24b * test.bin

说明这个文件已经添加到了lfs中。

从LFS中删除文件

上面我们讲解了如何将文件添加到LFS中进行跟踪,如果我们不想使用LFS而是使用传统的git来管理文件该怎么办呢?

lfs提供了untrack的命令,它是和track相反的命令如下:

git lfs untrack "*file-type"

在untrack之后,还要记得从git cache中删除这个文件:

git rm --cached "*file-type"

然后重新添加这个文件到git,commit然后提交即可:

git add "*file-type"
git commit -m "restore "*file-type" to git from lfs"

从LFS中拉取代码

从LFS中拉取代码和传统的普通的git拉取代码是一致的,直接使用git clone命令即可:

git clone https://github.com/username/test_repo.git destination_dir

转换历史数据到LFS

有时候我们的文件已经在repository中了,比如很多历史提交的文件,我们想要将其转换称为LFS存储该怎么办呢?

lfs提供了一个migrate命令,用来进行文件的转存。

git lfs migrate

要想使用migrate命令,需要安装 Git LFS v2.2.1版本以上。

比如我们想要migrate所有的bin文件,可以这样写:

git lfs migrate import --include="*.bin"

上面的命令只针对的是本地的branch,如果要migrate远程的branch,可以添加一个–include-ref参数,如下所示:

git lfs migrate import --include="*.bin" --include-ref=refs/heads/master

然后强制提交库即可:

git push --force

最后,上面的命令虽然将历史的git objects 转换成了 lfs objects,但是本地的.git文件中并没有变化,所以还需要执行下面的命令对.git文件夹进行清理:

git reflog expire --expire-unreachable=now --all
git gc --prune=now

总结

如果你没有使用大文件,那么你不会用到lfs,如果你项目中有大文件,那么就参考这篇文章吧。


张小弟之家

本文链接:
文章标题:

本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work

尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。

    发表评论:

    搜索
    本文二维码
    标签列表
    站点信息
    • 文章总数:545
    • 页面总数:20
    • 分类总数:96
    • 标签总数:213
    • 评论总数:63
    • 浏览总数:285197

    | | |
    | |  Z-Blog PHP