Datalad从GitLab获取子数据集遇凭证重定向错误求助
问题描述
在GitLab实例上搭建了包含子数据集input的Datalad仓库,执行以下命令克隆主仓库并进入目录:
datalad clone https://gitlab.gwdg.de/thomas.wutzler/SesamFitSPP.jl.git SesamFitSPP cd SesamFitSPP
尝试运行datalad get -n input获取子数据集时,出现以下错误(已移除部分URL):
install(error): /User/homes/twutz/tmp/SesamFitSPP/input (dataset) [Failed to clone from any candidate source URL. Encountered errors per each url were:
- gitlab.gwdg.de/thomas.wutzler/SesamFitSPP.jl.git/input
CommandError: 'git -c diff.ignoreSubmodules=none clone --progress ...SesamFitSPP.jl.git/input /User/homes/twutz/tmp/SesamFitSPP/input' failed with exitcode 128 [err: 'Cloning into '/User/homes/twutz/tmp/SesamFitSPP/input'...
fatal: unable to update url base from redirection:
asked for: ...SesamFitSPP.jl.git/input/info/refs?service=git-upload-pack
redirect: https://gitlab.gwdg.de/users/sign_in']- .../SesamFitSPP.jl.git/input/.git
CommandError: 'git -c diff.ignoreSubmodules=none clone --progress .../SesamFitSPP.jl.git/input/.git /User/homes/twutz/tmp/SesamFitSPP/input' failed with exitcode 128 [err: 'Cloning into '/User/homes/twutz/tmp/SesamFitSPP/input'...
fatal: unable to update url base from redirection:
asked for: ...SesamFitSPP.jl.git/input/.git/info/refs?service=git-upload-pack
redirect: .../users/sign_in']]
已按照Datalad凭证帮助文档配置Git凭证,但错误仍未解决。从本地文件系统克隆仓库时,datalad get -n input可正常运行,说明子数据集配置无误。需解决如何配置才能获取该子数据集及已配置的annex-siblings信息。
解决方案
1. 检查子数据集URL配置
查看主仓库的子模块配置文件,确认子数据集的URL格式是否正确:
cat .gitmodules
若[submodule "input"]下的url是相对路径(如./input),Datalad会基于主仓库HTTP URL拼接,但GitLab的HTTP访问可能不支持这种嵌套路径克隆方式,需要改为子数据集的独立仓库URL。
2. 改用SSH协议访问
HTTP协议的凭证传递可能存在问题,改用SSH可避免重定向到登录页:
- 确保本地SSH公钥已添加到GitLab账户
- 重新克隆主仓库:
datalad clone git@gitlab.gwdg.de:thomas.wutzler/SesamFitSPP.jl.git SesamFitSPP cd SesamFitSPP - 再次尝试获取子数据集:
datalad get -n input
3. 手动修改子数据集URL
若不想重新克隆主仓库,可直接修改子模块配置:
- 编辑
.gitmodules文件,将input子模块的url改为SSH格式:[submodule "input"] path = input url = git@gitlab.gwdg.de:thomas.wutzler/[子数据集实际仓库名].git - 同步子模块配置:
git submodule sync input - 重新执行获取命令:
datalad get -n input
4. 验证Git凭证有效性
检查Git凭证存储是否正确应用:
- 查看当前凭证助手配置:
git config --global credential.helper - 若使用个人访问令牌,重新录入凭证:
按提示输入GitLab服务器地址、用户名和个人访问令牌。git credential approve
5. 确保SSH密钥正常生效
检查SSH代理和密钥状态:
- 查看已加载的SSH密钥:
ssh-add -l - 若未加载密钥,执行以下命令添加(替换为你的密钥路径):
ssh-add ~/.ssh/id_rsa
内容的提问来源于stack exchange,提问作者bgctw
相关产品推荐
相关产品推荐

