我将普通(非 lfs)存储库克隆到本地驱动器。现在我想向其中添加一个大于 100MB 的文件并将更改提交到存储库。我为此使用了以下命令:
git clone ....
Run Code Online (Sandbox Code Playgroud)
然后,我复制要添加到存储库的大小 >100MB 的文件。假设该文件的名称是“文件名”。
git lfs init
git lfs track "filename"
git add "filename"
git commit -m "commit message"
git push -u origin
Run Code Online (Sandbox Code Playgroud)
此操作失败,并显示文件大小错误消息,指出仅允许最大 100MB 的文件大小。
那么在这种情况下我该如何使用 git lfs 呢?
既然 Gitlab 宣布了Git LFS 支持,我想问是否可以将 Git LFS 文件存储在 Amazon S3 上?我不想将存储库本身存储为 LFS 文件。
我正在尝试估计我的项目在GitHub上的存储需求,并对git-lfs如何存储文件的多个版本有一些疑问:
我正在用一大堆文件初始化一个新的Git仓库.回购正在使用Git LFS.我想确保在我第一次提交之前告诉LFS跟踪应该处理的所有文件.
我看到git lfs ls-files它将列出LFS跟踪的所有文件.但是,(a)我想要相反:repo中未被LFS跟踪(并且在其中.gitignore)的所有文件,以及(b)此命令仅在您提交文件后才有效.
有没有人有一些git-fu或Ubuntu-fu列出repo中所有未被忽略的文件,并且与.gitattributeGit LFS使用的各种文件中的轨道模式不匹配?
我最接近的是这个命令,它将repo中的文件列出超过100kB,然后手动扫描所有文件,并希望我用跟踪模式覆盖它们.
find . -type f -exec du -Sha -t 100000 {} +
Run Code Online (Sandbox Code Playgroud) 我一直在尝试通过将一些文件移动到 git LFS 来减小 Git 存储库的大小。再加上几个 100 个命令,这里我们的文件位于 git LFS 中,并且我的 git 提交中不再有这些文件的历史记录。
然而,每当我克隆存储库时,我仍然会下载大约 3GB 的对象。我通过在 Visual Studio Team Services 中创建一个新存储库来解决这个问题,在本地修剪和垃圾收集我的存储库,然后推送到那里后,它减少到 300mb。(在这篇文章中本地执行此操作的命令:Git:什么是悬空提交/blob 以及它们来自哪里?)
但是我无法想象您总是必须删除/重新创建完整的存储库才能删除悬而未决的提交。
我还尝试过执行 git init,然后将其推送到现有存储库上,但它只会进一步增加对象数量。
对于也遇到类似问题的任何人,这些是我执行的用于创建新存储库而不需要悬空提交的命令,但是我想了解如何在现有存储库中执行此操作而不必删除它:
git clone https://avavedse.visualstudio.com/Test/_git/TestRepository
cd blahblah
git reflog expire --expire=now --all
git gc --prune=now
git remote add newrepo https://avavedse.visualstudio.com/Test/_git/TestRepositoryNewEdition
git push newrepo
Run Code Online (Sandbox Code Playgroud) 我有两个存储库:parent和child. 他们都使用 git-lfs。我正在尝试child作为子树导入到parent.
在parent目录中时,我尝试添加它并得到以下信息:
> git subtree add --prefix child [child_url]
git fetch [child_url] master
From [child_url]
* branch master -> FETCH_HEAD
Downloading [child_binary_file_path] (12.55 KB)
Error downloading object: [child_binary_file_path] ([sha])
Errors logged to .git\lfs\objects\logs\20170613T115607.1992713.log
Use `git lfs logs last` to view the log.
error: external filter git-lfs smudge -- %f failed 2
error: external filter git-lfs smudge -- %f failed
fatal: [child_binary_file_path]: smudge filter lfs failed
Run Code Online (Sandbox Code Playgroud)
在日志文件中,我看到
Error downloading …Run Code Online (Sandbox Code Playgroud) 我们目前正在从 CVS 迁移到 git 存储库。然而,一个团队大约一年前已经将 cvs2git 用于他们的存储库,因为他们的新功能需要大量具有历史记录的移动文件,而 CVS 在历史上并不擅长。然后,两个存储库都应该将 GIT-LFS 用于我们更大的签入源(例如,预先构建的外部库)
我们的想法是创建相同的起点,以便在迁移后将所有更改与历史记录合并到我们的存储库中。
所以我已经有了起点的精确复制品;这个想法是现在使用 git format-patch 创建所有补丁文件。现在大多数补丁都运行良好,问题仅在于使用 git lfs 的补丁。
一个例子:
diff --git a/Foo/bar/baz.zip b/Foo/bar/baz.zip
new file mode 100644
index 00000000000..6fce3f4bd05
--- /dev/null
+++ b/Foo/bar/baz.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c90b657621e07fa40476186d94e2f6e06f055b49294b83ee976f73dfac120d86
+size 116056
--
2.13.2.windows.1
Run Code Online (Sandbox Code Playgroud)
当我尝试应用该补丁时,会发生以下情况:
$ git am ../patches/mypatch.patch
Applying: #someTfsId: myCommit
Downloading Foo/bar/baz.zip (113.34 KB)
Error downloading object: Foo/bar/baz.zip (c90b657): Smudge error: Error opening media file.: open D:\repositories\myrepo\.git\lfs\objects\c9\0b\c90b657621e07fa40476186d94e2f6e06f055b49294b83ee976f73dfac120d86: The system cannot find the file specified.
Errors logged …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来下载我在 repo 中的一些 git LFS zip 文件,而不必签出整个存储库。
我尝试了以下方法:
curl -L <URL to the file RAW download on github page>
curl -L <URL from .lfsconfig file + object ID from the file's pointer information in git repo>
更多示例尝试:
curl -L https://gitlfs.es.com/api/company/myrepository/content/framework/7d5dfcf764118df4867dc676b615e1ee4bf67e5b37fd56275f8845d
curl -L https://gitlfs.es.com/api/company/myrepository/7d5dfcf764118df4d188d5838867dc676b615e1ee4bf67e5b37fd56275f8
curl -L https://gitlfs.es.com/api/company/myrepository/sha256:7d5dfcf764118df4d188d5838867dc676b615e1ee4bf67e5b37fd56275f8845d
Run Code Online (Sandbox Code Playgroud)
以上似乎都不起作用
任何线索将不胜感激。
我找到了一个 git 存储库,其中包含我需要的一堆 *.png 文件。
然而,文件的原始格式使用 git lfs,如下所示:
version https://git-lfs.github.com/spec/v1
oid
sha256:82247bedcaf9f441851f272ca2213a64b1b1084b13709eee02f185921b057efe
size 258233
Run Code Online (Sandbox Code Playgroud)
我尝试克隆存储库来查看图像,但得到以下信息:
error: external filter 'git-lfs filter-process' failed
fatal: "file_name".png: smudge filter lfs failed
warning: Clone succeeded, but checkout failed.
Run Code Online (Sandbox Code Playgroud)
“git pull”命令返回相同的错误:
error: external filter 'git-lfs filter-process' failed
fatal: "file_name".png: smudge filter lfs failed.
Run Code Online (Sandbox Code Playgroud)
“git lfs pull”命令只是返回“无法拉取”。
我最终希望将“file_name”.png 作为图像文件而不是 sha256 字符串查看。
我有一个较大的(32k 次提交)git 存储库,我需要在其中重写一个分支中的历史记录以删除 .gitattributes 文件所描述的一堆大文件。这个分支完全是本地的,从来没有碰到过远程(实际上我们的远程因为历史上的大文件而拒绝了它)。
我知道以下命令将遍历分支的历史记录并删除所有.dll文件:
$ git lfs migrate import --include='*.dll'
Run Code Online (Sandbox Code Playgroud)
但是由于 .gitattributes 文件存在并且相当广泛,如果在创建分支时 .gitattributes 文件已经存在,那么是否有一个命令可以简单地重放为指针化这些文件所做的工作?
git-lfs ×10
git ×9
amazon-s3 ×1
format-patch ×1
git-clone ×1
git-subtree ×1
github ×1
gitlab ×1
repository ×1