首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多用户机器上的本地Git LFS存储库

多用户机器上的本地Git LFS存储库
EN

Stack Overflow用户
提问于 2021-09-10 23:33:26
回答 1查看 170关注 0票数 0

我已经在一台多用户机器上设置了一个启用了LFS的存储库,这样从事项目的其他人就可以共享超出我们私有GitLab实例配额的大型专有文件。为了避免冲突,我们让一个人(我)将主副本保存在他们的主目录中,并定期使用git fetchgit merge合并来自其本地克隆的更改。

本地克隆都按预期工作。它们是用git clone /home/[MY USERNAME]/[REPO]创建的,更改是在本地提交的,没有任何问题。

但是,当我尝试合并它们的更改时,我得到了以下错误。

代码语言:javascript
运行
复制
$ 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跟踪的文件都有未跟踪的副本。

除了以下环境信息外,日志文件不包含太多额外信息:

代码语言:javascript
运行
复制
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的输出

代码语言:javascript
运行
复制
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配置有误吗?有没有其他方法可以避免这个问题?我们真的需要一切都托管在本地,因为文件是专有的。

EN

回答 1

Stack Overflow用户

发布于 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的预期工作流,但它仍然是可能的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69138894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档