git annex / ssh:ControlPath太长

11

运行命令:git annex sync时,我遇到以下错误:

ControlPath too long
Command ssh ["-S","<local path to git repo>/.git/annex/ssh/git@<git url>","-o","ControlMaster=auto","-o","ControlPersist=yes","git@<git url>","git-annex-shell 'configlist' '<local path to git repo>'"] failed; exit code 255

根据这里所说,问题不在于git而是ssh(但是那里提出的解决方案没有起作用)。

我能做些什么来避免这个问题?

1个回答

9
"-S","<local path to git repo>/.git/annex/ssh/git@<git url>"

根据unix(7)的建议,此路径不应超过92个字符:

编写可移植应用程序时,请记住某些实现的sun_path长度只有92字节。

如果你知道你深入了目录结构并且路径将扩展到此限制之外,你可以根据git-annex的官方文档中提供的以下方法之一进行处理,修改.git/config:

  1. 使用annex.sshcaching=off关闭连接共享。 警告:这会显著增加执行所有操作所需的时间和资源!

  2. 指定自己的共享连接路径,使用annex.ssh-options="-S=~/.ssh/control-%l.%r@%h:%p" -oControlMaster=auto


sshcaching=false(注意不是“off”)会导致:“GitLab:不允许的命令”。 尝试使用ssh-options进行操作并没有改变任何内容(我尝试了各种方法,包括您的建议),特别是在“Command ssh”之后显示的列表没有改变。 - Vince
我稍微编辑了一下答案,因为我错过了 ControlMaster 选项。但是可能会被附加文件覆盖。如果您指定我发布的两个点,会发生什么?如果没有帮助,请提供 annex.ssh-options="-vvv" 的输出。 - Jakuje
ssh缓存=关闭和ssh选项="-vvv"/"-S=~/.ssh/control-%l.%r@%h:%p" -oControlMaster=auto"不会对输出产生任何更改。ssh缓存=false导致[start]GitLab: Disallowed command Command ssh ["<git host url>","git-annex-shell 'configlist' '<local path to git repo>'"] failed; exit code 1[end]. 看来ssh选项确实被忽略了。 - Vince

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接