81

我正在尝试弄清楚如何使用 git-lfs。我使用 gitlab EE 服务器。

也许我错过了一些东西,但是除了介绍“track”命令的非常简短的教程和可爱的 1 分钟视频之外,我没有找到任何关于 git-lfs 的文档。

例如,我在 repo 中添加和跟踪一个 3.7GB 的 tar 文件,然后推送它:

git lfs track "*.tar"
cp <a folder>/a.tar .
git add a.tar 
git commit -m "add a.tar"
git push origin master

问题1:这个过程结束时,gitlab服务器上是否上传了a.tar?目前还不清楚“添加”和“提交”命令需要一些时间(可能还不足以让我怀疑在此期间是否上传了 3.7GB),但推送根本不需要任何时间(一小部分第二)。

问题2:如果文件是在服务器上上传的,在哪里?显然与回购不在同一个地方(这就是重点)。我问是因为我的服务器正在备份,我需要知道使用 git-lfs 是否需要我以任何方式更新它。

问题 3:如果文件没有上传,这是否意味着 repo 的其他用户将在添加文件的原始机器上获得文件的链接?有没有办法将其更改为服务器上的位置?(回到问题 2)

问题 4:克隆 repo 后,确实没有完整的 3.4G 文件,“只是”一个包含内容的文本文件:

version https://git-lfs.github.com/spec/v1
oid sha256:4bd049d85f06029d28bd94eae6da2b6eb69c0b2d25bac8c30ac1b156672c4082
size 3771098624

这当然很棒,而且很重要。但是如果需要访问完整文件怎么办?怎么下载呢?

我很乐意直接回答这个问题或链接到正确的文档。

4

1 回答 1

45

答案 1 正如本视频(1:27)中所解释的,当你推送一个被它跟踪的文件时,git lfs它会被拦截并放置在不同的服务器上,在你的 git 存储库中留下一个指针。正如您在问题 4 中提供的参考资料中看到的那样,这对您有用。

答案 2 这有点棘手。阅读文档git lfs smudge,我们有:

从标准输入读取一个 Git LFS 指针文件,并将相应大文件的内容写入标准输出。如果需要,从 Git LFS 端点下载文件的内容。该参数(如果提供)仅用于进度条。

git lfs端点可以从 的输出中找到git lfs env。我的“端点”是我的存储库下(但不在其中)的一个文件夹,这让我认为 GitLab 在我们的帐户空间中的服务器上创建了一个 git 存储库来存储二进制文件。

也就是说,我不知道你会如何支持这一点。GitHub 提供了一个“未处于生产就绪状态”的git lfs服务器,因此您需要进行一些工作来设置它,以便将二进制文件上传到您管理的服务器。如果备份这些文件是当务之急,并且您不想使用其中一种实现(Amazon S3 等),您可以尝试另一种与 git 一起使用的二进制文件存储系统,例如git-media, git-annex, git-fat, git-bigstore.... I没有深入研究这些选项,所以无法提出建议。

答案 3 如果文件不是使用它上传的,git lfs那么它会被推送使用git,并且您的 git 存储库中有一个二进制文件。但是,您的上传是使用您在问题 4git lfs中所说的。

回答 4 您的存储库的其他用户git lfs在本地计算机上安装后,只需键入git lfs pull以引入您使用git lfs.

于 2015-12-09T15:33:05.497 回答