根据其文档,双击应该足够了.但是当我打开git bash并运行时git lfs init,它不起作用:
$ git lfs init
git: 'lfs' is not a git command. See 'git --help'.
Run Code Online (Sandbox Code Playgroud) 我只是为一个项目设置Git LFS,对于非图像文件(例如预编译库),它工作得很好.但即使我尝试重置(git checkout --)它们,所有的.png和.jpg文件也会一直显示为修改过.
条目看起来都是一样的.gitattributes:
*.jpg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.so filter=lfs diff=lfs merge=lfs -text
Run Code Online (Sandbox Code Playgroud)
输出git diff不是非常有用:
diff --git a/Design/faviconit/favicon.ico b/Design/faviconit/favicon.ico
index 3202014..b5d3daf 100755
Binary files a/Design/faviconit/favicon.ico and b/Design/faviconit/favicon.ico differ
Run Code Online (Sandbox Code Playgroud)
我不确定我应该采取哪些其他步骤来诊断问题.有没有其他人遇到这个?有任何想法吗?谢谢!
更新:
它实际上不是所有的图像文件,只是它们的一部分.但只有图像文件显示问题.
我尝试删除所有有问题的图像并推送该提交.然后在另一台机器上我添加了一些文件并再次推送.当我提取新的更改时,我遇到了同样的问题:文件立即显示为已修改.这些文件在磁盘上看起来是正确的,实际上与原件相同.
这是我的git lfs托管文件列表
$ git lfs ls-files
b1d5dd29dd - file1.zip
27d3073f43 - file2.zip
fb4e699c05 * file3.zip
Run Code Online (Sandbox Code Playgroud)
为什么一个文件旁边有一个星号/星号(*),而其他文件旁边有一个短划线( - )?
git lfs wiki似乎表明(*)是预期的.
https://github.com/github/git-lfs/wiki/Tutorial
git lfs status 显示全部清除(没有任何提交/推送/暂存).
我已经签出了git lfs存储库。所有的二进制文件都是指针。我用拉出了真正的二进制文件git lfs pull --include some/binaries。
我使用了二进制文件,现在我想“解压缩”二进制文件并将它们再次转换为指针,以便可以回收磁盘空间。
我没有找到合适的命令来执行此操作,并且使用.git / lfs / objects加上硬重置进行处理使我感到紧张。
问题:如何将跟踪的二进制文件转换回指针?
编辑:
我正在Unity3DUnity17.2.1中开展一个项目
我在Windows 10上使用git Git-LFS和SourceTree.
在我的本地克隆一切正常.
但是如果我在一个新文件夹中克隆项目(用于测试),我会遇到很多错误.它可以LFS很好地下载大多数文件轨道,但对于其中一些我得到:
下载对象时出错:Assets/VRITM/_Prefabs/SceneGraph/NetworkManager/DebugHUD/ConfigurationPanel/InputField.prefab(3a0c39040b397ab7120d427e019ad767b2bd6b91386856f9730507be1b59ad3c)
我可以以某种方式在本地恢复"复制"(新克隆的)项目,因为我已将整个Assets-Folder从我的工作本地克隆导出为unitypackage.
但在这样做之后,git仍然声称它是"最新的"所以我不能再次提交/推送.
如何修复远程存储库(github)上的LFS跟踪文件?
因为我已经在我的本地克隆上工作正常了所以我想必须有某种方式来"强制" git-lfs上传所有文件,就像我拥有它们一样.
另外,我有两个在合并之前重命名的脚本:
在主服务器上它是
DebugHUDManager.cs
ConfigurationHUDManager.cs
Run Code Online (Sandbox Code Playgroud)
但我将类和文件重命名为
DebugHudManager.cs
ConfigurationHudManager.cs
Run Code Online (Sandbox Code Playgroud)
所以在我的本地(工作)克隆中我有后来当我新克隆时我得到以前的文件(..HUD ..)因此GameObject只附加了缺少的脚本.我可以通过再次重命名文件来解决这个问题.但这也没有在git中跟踪.它一直说"最新".
这是我的.gitattributes:
# Unity
*.cginc text
*.cs diff=csharp text
*.shader text
# Unity YAML
*.anim merge=unityyamlmerge eol=lf
*.asset merge=unityyamlmerge eol=lf
*.controller merge=unityyamlmerge eol=lf
*.mat merge=unityyamlmerge eol=lf
*.meta merge=unityyamlmerge eol=lf
*.physicsMaterial merge=unityyamlmerge eol=lf
*.physicsMaterial2D merge=unityyamlmerge eol=lf
*.prefab merge=unityyamlmerge eol=lf
*.unity merge=unityyamlmerge eol=lf
# Unity LFS
*.cubemap …Run Code Online (Sandbox Code Playgroud) 如何仅将一个文件添加到GIT LFS?
大多数示例显示添加一个模式,该模式指定要添加到LFS的文件。但是,我希望添加单个文件。例如,如果
git lfs track "file.bin"
Run Code Online (Sandbox Code Playgroud)
这将跟踪所有命名的文件,file.bin无论它们位于哪个目录中。
我考虑过添加排除过滤器(!模式)以.gitattributes排除所有目录,但是不支持。
到目前为止,我所做的最好的工作是跟踪要添加的文件的文件模式,添加文件,然后删除对该文件模式的跟踪。这有点古怪。有没有更好的办法?
我想表达文件模式,$ROOT_OF_GIT_REPO/file.bin但是缺少表达$ROOT_OF_GIT_REPO部分的方法。
我一直在使用Gitlab与LFS一段时间,但今天不知何故遇到了这个问题:
me@some-PC MINGW32 /b/Unity Projects/Platballer (master)
$ git push
LFS upload missing objects: (32/33), 30 MB | 0 B/s
Uploading LFS objects: 97% (32/33), 30 MB | 0 B/s, done
(missing) Assets/External Assets/TimelineEvents/setup-guide.pdf (6ef8ef61e49821309de416925bf4e068ebb10a57f3398cb926e967eeb90cf034)
Counting objects: 401, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (400/400), done.
Writing objects: 100% (401/401), 1.40 MiB | 9.56 MiB/s, done.
Total 401 (delta 177), reused 0 (delta 0)
remote: Resolving deltas: 100% (177/177), completed with 31 local objects.
remote: GitLab: …Run Code Online (Sandbox Code Playgroud) 我正在使用虚幻引擎4,它将所有资产文件序列化为二进制文件.目前,项目大小小于10MB,但.git文件夹几乎是700MB.我有LFS跟踪所有资产文件并lfs migrate在回购中做了一个,但回购仍然很大.GitHub说文件在LFS中,但在推送重写的历史记录后我没有看到我的LFS存储使用率表上升.
我不确定这是否是LFS的工作方式,但据我所知,Git将在LFS中存储指向该文件的指针,并且只从HEAD所在的提交中下载该文件的版本.
我在这里很丢失.我认为值得一提的是我在git中是一个新手,所以请放轻松我.
提前致谢.
编辑:
我运行git lfs install --skip-smudge然后克隆了repo,这使得repo文件夹变得更小,因为克隆时没有下载LFS文件.问题是,现在我只有指针文件,并且git lfs pull无法检出所有文件.错误信息是Could not check out "<file-name>".
我最近将许多(新)文件添加到了git存储库中,并使用Git LFS对其进行了跟踪。我的遥控器是BitBucket,它可以按预期正常运行。
除此之外,对于我添加到LFS的每个文件,都会向我添加一个条目.git/config,如下所示:
[lfs "https://bitbucket.org/%7B%7D/%7B********-****-****-****-****6bcd1adc%7D/info/lfs/object/verify?upload_id=********-d87a-47f9-a857-ae04********"]
access = basic
Run Code Online (Sandbox Code Playgroud)
(*出于安全原因,所有都是十六进制字符,我删除了)
因为我为使用LFS跟踪和推送的每个文件添加了一个条目,并且我在LFS中有数百个文件,所以我的git config文件现在很大。
我认为这个问题是在将origin遥控器(从一个BitBucket存储库切换到另一个)后开始的。
发生了什么,更重要的是,我该如何解决?
我可以安全地从中删除这些条目.git/config吗?
作为参考,这是在相同的配置文件中配置BitBucket遥控器的方式:
[remote "origin"]
url = https://user@bitbucket.org/user/repository.git
fetch = +refs/heads/*:refs/remotes/origin/*
[lfs "https://user@bitbucket.org/user/repository.git/info/lfs"]
locksverify = false
access = basic
[lfs "https://bitbucket.org/user/repository.git/info/lfs"]
access = basic
Run Code Online (Sandbox Code Playgroud)
这就是仓库.gitattributes根目录中的LFS部分:
...
database/seeds/sql/content/*/allcontent.sql filter=lfs diff=lfs merge=lfs -text
public/img/*/path1/*.normal@2x.jpg filter=lfs diff=lfs merge=lfs -text
public/img/*/path2/*.normal@2x.jpg filter=lfs diff=lfs merge=lfs -text
Run Code Online (Sandbox Code Playgroud)
更新 ; 我跑了git lfs uninstall,然后git lfs install --local在存储库中查看它是否可以解决任何问题,但不能解决问题(也就是说,对于我添加到LFS的新文件,更多行仍被添加到.git / …
我在客户端和服务器上的git仓库*中都缺少一堆LFS对象。我知道这些对象丢失了,没关系。不幸的是,这意味着git lfs fetch --all甚至git lfs push --all origin将失败。
我想通过使用虚拟文本文件替换二进制文件或完全删除指针来清除存储库中的“损坏的指针”。我也知道这涉及到重写历史记录,这也很好。
最好的进行方法是什么?
*为了澄清,我丢失了服务器上的一些 LFS文件,但不是全部,也不是这些文件的所有修订版。
例如,我已经在3次提交中对foo.png进行了修改:
LFS服务器不再具有foo.png版本2,因此我想从历史记录中删除该提交。不幸的是,git lfs不会告诉我哪个提交被破坏了,只是告诉我661f0797丢失了。
(记录下来,我发现了丢失的文件,所以我不再有这个问题,但是解决方案应该仍然很有趣!)