我已经在多用户机器上建立了一个启用 LFS 的存储库,这样从事项目的其他人可以共享超过我们私有 GitLab 实例配额的大型专有文件。为避免冲突,我们让一个人(我)将主副本保存在他们的主目录中,并定期使用git fetch和git merge合并他们本地克隆的更改。
本地克隆都按预期工作。它们是用 创建的git clone /home/[MY USERNAME]/[REPO],并且更改在本地提交而不会出现问题。
但是,当我尝试合并他们的更改时,出现以下错误。
$ git fetch [OTHER USERNAME] # the remotes are named after each user
# no problems
$ git merge [COMMIT]
Downloading [FILENAME] (96 MB)
Error downloading object: [FILENAME]: Smudge error: Error downloading [FILENAME] ([HASH]): batch request: missing protocol: ""
Errors logged to /home/[MY USERNAME]/[REPO]/.git/lfs/logs/[TIMESTAMP].log
Use `git lfs logs last` to view the log.
error: external filter 'git-lfs filter-process' failed
fatal: [FILENAME]: smudge filter lfs failed
有趣的是,在收到错误后,我尝试合并的提交中存在所有非 LFS 跟踪文件的未跟踪副本。
日志文件不包含太多额外信息,除了以下环境信息:
LocalWorkingDir=/home/[MY USERNAME]/[REPO]
LocalGitDir=/home/[MY USERNAME]/[REPO]/.git
LocalGitStorageDir=/home/[MY USERNAME]/[REPO]/.git
LocalMediaDir=/home/[MY USERNAME]/[REPO]/.git/lfs/objects
LocalReferenceDirs=
TempDir=/home/[MY USERNAME]/[REPO]/.git/lfs/tmp
ConcurrentTransfers=8
TusTransfers=false
BasicTransfersOnly=false
SkipDownloadErrors=false
FetchRecentAlways=false
FetchRecentRefsDays=7
FetchRecentCommitsDays=0
FetchRecentRefsIncludeRemotes=true
PruneOffsetDays=3
PruneVerifyRemoteAlways=false
PruneRemoteName=origin
LfsStorageDir=/home/[MY USERNAME]/[REPO]/.git/lfs
AccessDownload=none
AccessUpload=none
DownloadTransfers=basic,lfs-standalone-file
UploadTransfers=basic,lfs-standalone-file
GIT_REFLOG_ACTION=merge aa5f82f
GIT_PREFIX=
GIT_EXEC_PATH=/usr/libexec/git-core
这是输出git config -l
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
[MY USERNAME]=[MY NAME]
user.name=[MY NAME]
user.email=[MY EMAIL]
init.defaultbranch=main
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.[OTHER USERNAME].url=/home/[OTHER USERNAME]/[REPO]
remote.[OTHER USERNAME].fetch=+refs/heads/*:refs/remotes/[OTHER USERNAME]/*
我是否错误地配置了 git-lfs?有没有替代方法可以避免这个问题?我们确实需要本地托管的所有内容,因为这些文件是专有的。