我正在尝试使用
git-p4
(在 Windows 上使用 git)将 Perforce 存储库转换为 git 存储库。我有很多图像,并且想对它们使用 LFS。但是,我似乎无法让 git-p4.largeFileExtensions
配置设置与多个扩展一起正常工作。如果我执行以下命令:
git config git-p4.largeFileSystem GitLFS
git config git-p4.largeFileExtensions png
git config --add git-p4.largeFileExtensions jpg
git p4 clone --verbose //depot/project@all .
我得到(如果我使用两个以上,所有对都会报告类似的警告):
WARNING: These git config values clash:
git config "git-p4.largefileextensions" = "png"
git config "git-p4.largefileextensions" = "jpg"
.git/config
文件是我所期望的,是largeFileExtensions的多值条目:
[git-p4]
largeFileSystem = GitLFS
largeFileExtensions = png
largeFileExtensions = jpg
但是创建的
.gitattributes
文件看起来像:
#
# Git LFS (see https://git-lfs.github.com/)
#
*.png
jpg filter=lfs -text
我做错了什么,还是
largeFileExtensions
属性的格式不同?
这似乎是 Windows 版 git 输出错误的 Windows 行结尾的问题。如果我跑步:
git config --get-all git-p4.largeFileExtensions
它会给我:
png\r
jpg\r
在
git-p4.py
脚本中,它使用 split(os.linesep)
来分割命令行的输出。在 Windows 上,os.linesep = '\r\n'
,因此线条不会被分割。如果我将脚本更改为使用 splitlines()
,那么它仍然会发出冲突警告,但是,跟踪现在似乎是正确的。
请注意,除了
git-p4.largeFileExtensions
之外,“git p4
”还用于忽略 lfs.storage
配置变量,该变量已在 Git 2.25(2020 年第一季度)中得到纠正。
请参阅r.burenkov (panzercheg
)
提交 ea94b16(2019 年 12 月 11 日)。
gitster
-- 合并于 commit 20aa6d8,2019 年 12 月 25 日)
:尊重lfs.storage配置变量git-p4
签署人:r.burenkov
“git lfs”允许用户使用配置变量
指定自定义存储位置,但是在与GitLFS指针交互时,“git p4”始终使用硬编码的默认值,即lfs.storage
目录,而不需要注意配置。.git/lfs/
使用
中配置的值(如果存在),就像所有“git”操作一样,以保持一致性。lfs.storage
并且,在 Git 2.43(2023 年第 4 季度)之前,
git p4
在被告知时尝试将符号链接存储到 LFS,但已修复不这样做,因为它没有意义。
请参阅提交 10c89a0(2023 年 10 月 18 日),作者:Matthew McClain (
MatthewMcClain17
)。gitster
-- 合并于 commit 9030f85,2023 年 10 月 30 日)
:git-p4 不应尝试在 LFS 中存储符号链接10c89a02b0
签署人:Matthew McClain
如果文件扩展名与
git-p4.py
匹配,将尝试在 LFS 中放置符号链接。git-p4.largeFileExtensions
Git LFS 不存储符号链接,因为涂抹/清理过滤器不处理符号链接。
它们永远不会传递到过滤器进程或污迹/清洁过滤器,如果不更改协议或命令行界面,也不会发生这种情况。
除非 Git 学会如何将它们发送到过滤器,否则 Git LFS 将很难以任何有用的方式使用它们。Git LFS 的目标是将大文件移出存储库历史记录,并且符号链接在功能上限制为 4 KiB 或大多数系统上的类似大小。
我使用
git p4
将现有的 Perforce 仓库和工作区迁移到新的 git 存储库,并使用 git lfs migrate
将大文件移动到其他地方。检查一个很棒的 github 教程这里。
列出文件及其大小:
git lfs migrate info --everything
要删除历史记录中的所有 .bin 文件(重写提交)并设置 LFS 配置:
git lfs migrate import --include="*.bin"
在将新存储库 git 推送到远程之前,您还可以将 GitHub LFS 服务器 url 更改为另一个实现。通过执行
git lfs env
检查 LFS 配置并通过 git config -f .lfsconfig lfs.url https://your.server.com/info/lfs
更改 url。