使用 git-lfs-transfer 进行组

问题描述 投票:0回答:1

我已经从

https://github.com/bk2204/scutiger
编译了 git-lsf-transfer,这样我就可以通过 ssh 而不是 https 为 lsf 传输大文件。

它有效。但是,它仅在存储库实际由调用 git 命令(从而执行 ssh)的用户拥有时才有效。当我将存储库的所有权更改为组/用户

git
(我的用户所属的)时,lsf 传输失败,并显示用户不是存储库所有者的消息。

如何配置 git-lsf-transfer 使其了解我是拥有该存储库的组的成员?

调试详情

执行

git push
时,我收到以下消息:

batch request: bash: line 1: git-lfs-authenticate: command not found: exit status 127                                                        
error: failed to push some refs to '{host ip}:/mnt/data/git-repos/tst.git'

经过研究,我了解到 git-lfs-authenticate 被调用是因为 git-lfs-transfer 失败。

然后执行 git Push 并跟踪详细信息 (

GIT_TRACE_PACKET=true GIT_SSH_VARIANT=simple GIT_TRACE=1 GIT_TRANSFER_TRACE=1 GIT_CURL_VERBOSE=1 git push
)

...
11:53:55.020553 trace git-lfs: exec: git 'config' '--includes' '-l' '--blob' 'HEAD:.lfsconfig'
11:53:55.025721 trace git-lfs: attempting pure SSH protocol connection
11:53:55.025742 trace git-lfs: spawning pure SSH connection
11:53:55.025806 trace git-lfs: run_command: ssh {host ip} git-lfs-transfer /mnt/data/git-repos/tst.git upload
11:53:55.026081 trace git-lfs: exec: ssh '{host ip}' 'git-lfs-transfer /mnt/data/git-repos/tst.git upload'
11:53:57.797163 trace git-lfs: pure SSH connection successful
11:53:57.797176 trace git-lfs: pure SSH protocol connection failed: Unable to negotiate version with remote side (unable to read capabilities): EOF
11:53:57.797986 trace git-lfs: pre-push: refs/heads/master c038a0e6a57beae72c25efeccfe5cf0f516ad330 refs/heads/master e28e585285e828041442ac2e4b24b38340d3aa60
11:53:57.798080 trace git-lfs: exec: git '-c' 'filter.lfs.smudge=' '-c' 'filter.lfs.clean=' '-c' 'filter.lfs.process=' '-c' 'filter.lfs.required=false' 'show-ref'
...

从这个跟踪中,我得到了用于调用 git-lfs-transfer 的 ssh 命令。

随后我使用以下命令重现了该错误(基于跟踪):

ssh {host ip} git-lfs-transfer /mnt/data/git-repos/tst.git upload

导致出现以下错误:

repository path '/mnt/data/git-repos/tst.git/' is not owned by current user; class=Config (7); code=Owner (-36)

解决办法

因此,当存储库的所有者是

git:git
时,就会发生这种情况。当我将其更改为
dstibbe:dstibbe
(我的帐户)时,它就可以工作了。
dstibbe
git
小组的成员。

git git-lfs
1个回答
0
投票

原因是因为 Scutiger 与 Git LFS 本地存储库适配器一样,需要查找

.git
目录的位置,对于 Scutiger 来说,还需要查找配置。如果没有合适的配置选项,Git 和 libgit2 都不会在另一个用户拥有的存储库上运行,而 Scutiger 使用的 libgit2 无法覆盖此功能。

理论上,Git 本身可以配置为允许这两项功能,并且我有一个分支切换到使用 Git。然而,虽然我作为一名 Git 开发人员知道这两项功能目前是安全的,但不能保证它们将来仍然如此。因此,如果我们启用此功能,Git 的未来版本可能会发生变化,然后我们就会遇到安全漏洞。

我已经在 Git 列表上开启了讨论,看看是否就改善这种情况达成了一致。通过与人们交谈,我得到的印象是,这可能很有价值,但做起来并不一定非常简单,因此有必要进行一些讨论。

© www.soinside.com 2019 - 2024. All rights reserved.