为什么 git lfs migrate 不跟踪所有 pdf 文件?
Why does git lfs migrate not track all pdf files?
提前注意: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
是 "large" 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
你的问题是你给 git lfs migrate import
的路径。您提供的路径需要适合 .gitattributes
文件,这意味着它必须相对于存储库的根目录指定。您提供了一个绝对路径,它告诉 Git LFS 匹配存储库根目录 C:
下名为 Temp
的子目录中的所有 PDF 文件。这样的目录不可能存在于 Windows 上,但可能存在于 Unix 系统上。
相反,您希望将模式指定为简单的 *.pdf
,这将影响存储库中的所有 PDF 文件,无论它们位于何处。
此外,如果你有多个分支,或者即使没有,你通常也想迁移所有分支,所以你应该通过--everything
。所以你的调用应该看起来像 git lfs migrate import --everything --include="*.pdf"
.
@bk2204's "你的问题是你给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 投诉。命令 运行 似乎成功了,历史被重写,.git 属性被更新,等等。事实上,.git 属性被正确更新 .
没有工作的是没有将大文件移动到 LFS 中。问题原来是路径的 ./foo/bar/mega.csv
的 find 输出。 git lfs 命令接受了这一点,在更新 .git 属性之前删除了前导 ./
但实际上并没有将文件移动到 LFS 中。更改为
find . -path ./.git -prune -false -o -size +49M -printf '%P[=11=]' | xargs -r0t -n1 -I{} git lfs migrate import --everything --verbose --include "{}"
成功了。
发帖是希望我能为其他人(也许 future-me)节省一些时间和挫败感。
顺便说一句,
git lfs ls-files
git show HEAD:foo/bar/mega.csv
有助于确定 LFS 是否已正确设置。
提前注意: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
是 "large" 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
你的问题是你给 git lfs migrate import
的路径。您提供的路径需要适合 .gitattributes
文件,这意味着它必须相对于存储库的根目录指定。您提供了一个绝对路径,它告诉 Git LFS 匹配存储库根目录 C:
下名为 Temp
的子目录中的所有 PDF 文件。这样的目录不可能存在于 Windows 上,但可能存在于 Unix 系统上。
相反,您希望将模式指定为简单的 *.pdf
,这将影响存储库中的所有 PDF 文件,无论它们位于何处。
此外,如果你有多个分支,或者即使没有,你通常也想迁移所有分支,所以你应该通过--everything
。所以你的调用应该看起来像 git lfs migrate import --everything --include="*.pdf"
.
@bk2204's 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 投诉。命令 运行 似乎成功了,历史被重写,.git 属性被更新,等等。事实上,.git 属性被正确更新 .
没有工作的是没有将大文件移动到 LFS 中。问题原来是路径的 ./foo/bar/mega.csv
的 find 输出。 git lfs 命令接受了这一点,在更新 .git 属性之前删除了前导 ./
但实际上并没有将文件移动到 LFS 中。更改为
find . -path ./.git -prune -false -o -size +49M -printf '%P[=11=]' | xargs -r0t -n1 -I{} git lfs migrate import --everything --verbose --include "{}"
成功了。
发帖是希望我能为其他人(也许 future-me)节省一些时间和挫败感。
顺便说一句,
git lfs ls-files
git show HEAD:foo/bar/mega.csv
有助于确定 LFS 是否已正确设置。