我已经在一台多用户机器上设置了一个启用了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配置有误吗?有没有其他方法可以避免这个问题?我们真的需要一切都托管在本地,因为文件是专有的。
发布于 2021-09-13 21:08:24
Git LFS设计为与单个主遥控器一起工作,该遥控器通常名为origin
。因此,当您调用git merge
时,Git LFS将查看遥控器中的对象并尝试下载它们。
但是,在您的示例中,您有多个远程数据库,因此在合并之前需要使用git lfs fetch REMOTE BRANCH
。请注意,在执行合并之后,您还应该运行git lfs fetch --all REMOTE
,因为您需要确保从该特定分支的历史记录中下载了所有对象;否则,如果此人删除了他们的遥控器,那么您可能会在历史记录中丢失对象。
正如您可能已经猜到的那样,这不是Git LFS的预期工作流,但它仍然是可能的。
https://stackoverflow.com/questions/69138894
复制相似问题