预先注意:git lfs migrate import --include="*.pdf"
的工作方式是git lfs ls-files
显示e6521dbea0 - large180m.pdf
(我想)。但是我还是不明白会发生什么。
我需要使用git lfs
,并且在C:/Temp/
(在Windows上)中创建了一个测试文件夹,以检查一切是否正常。不幸的是,它不是:git lfs ls-files
不列出任何文件!见下文...
({small.txt
和small2.txt
是空的文本文件,large180m.pdf
是具有180 MB的“大” pdf)
这是怎么了?我遵循了here的指示:
SQC@N6812 MINGW64 /c/Temp
$ ls C:/Temp/*.pdf
C:/Temp/large180m.pdf
SQC@N6812 MINGW64 /c/Temp
$ git init
Initialized empty Git repository in C:/Temp/.git/
SQC@N6812 MINGW64 /c/Temp (master)
$ git add .
SQC@N6812 MINGW64 /c/Temp (master)
$ git commit -m "Initial commit including large file"
[master (root-commit) 035a6ca] Initial commit including large file
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 large180m.pdf
create mode 100644 small.txt
create mode 100644 small2.txt
SQC@N6812 MINGW64 /c/Temp (master)
$ git status
On branch master
nothing to commit, working tree clean
SQC@N6812 MINGW64 /c/Temp (master)
$ git lfs migrate import --include="C:/Temp/*.pdf"
migrate: Fetching remote refs: ..., done
migrate: Sorting commits: ..., done
migrate: Rewriting commits: 100% (1/1), done
master 035a6ca083c3300bf33b5e399a547e8141daeb05 -> 53861996e1fe34a82e9b4e1f7b951266b250c4de
migrate: Updating refs: ..., done
migrate: checkout: ..., done
SQC@N6812 MINGW64 /c/Temp (master)
$ git reflog expire --expire-unreachable=now --all
SQC@N6812 MINGW64 /c/Temp (master)
$ git gc --prune=now
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), done.
Total 5 (delta 0), reused 0 (delta 0)
SQC@N6812 MINGW64 /c/Temp (master)
$ git lfs track
Listing tracked patterns
C:\Temp\*.pdf (.gitattributes)
SQC@N6812 MINGW64 /c/Temp (master)
$ git lfs ls-files
注意:最后,lfs应该在所有子文件夹中跟踪pdf
来自git lfs env
:
git-lfs/2.3.4 (GitHub; windows amd64; go 1.8.3; git d2f6752f)
git version 2.16.2.windows.1
LocalWorkingDir=C:\Temp
LocalGitDir=C:\Temp\.git
答案 0 :(得分:1)
您的问题是您通往git lfs migrate import
的道路。您提供的路径必须适合.gitattributes
文件,这意味着必须相对于存储库的根目录指定该路径。您提供了一个绝对路径,它告诉Git LFS匹配存储库根目录下一个名为Temp
的子目录C:
中的所有PDF文件。这样的目录在Windows上可能不存在,但在Unix系统上可能存在。
相反,您只想简单地将模式指定为*.pdf
,这会影响存储库中的所有PDF文件,无论它们位于何处。
此外,如果您有多个分支,甚至没有,则通常都希望迁移所有分支,因此应传递--everything
。因此,您的调用应类似于git lfs migrate import --everything --include="*.pdf"
。
答案 1 :(得分:0)
@ bk2204的answer says“ 您的问题是输入git lfs migrate
的路径。您提供的路径必须适合.gitattributes
文件,这意味着它必须
相对于存储库的根目录进行指定。“
不能夸大其词。使用Git for Windows 2.28.0,我尝试使用类似的命令
find . -path ./.git -prune -false -o -size +49M -print0 | xargs -r0t -n1 -I{} git lfs migrate import --everything --verbose --include "{}"
添加所有足以使Github向LFS投诉的文件。该命令运行并似乎成功,历史记录被重写,.gitattributes被更新,等等。实际上,.gitattributes被正确地 更新了。
无法正常工作的是,没有将大文件移入LFS。原来问题出在路径的./foo/bar/mega.csv
的find输出中。 git lfs命令接受了这一点,在更新.gitattributes之前剥离了前导./
,但实际上并未将文件移入LFS。更改为
find . -path ./.git -prune -false -o -size +49M -printf '%P\0' | xargs -r0t -n1 -I{} git lfs migrate import --everything --verbose --include "{}"
使其有效。
希望我能节省一些时间和沮丧的人。
偶然地,
git lfs ls-files
git show HEAD:foo/bar/mega.csv
有助于确定LFS是否已正确设置。