使用repo init -u ssh://...拉代码时,总是出现如下情况!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用repo init -u ssh://...拉代码时,总是出现如下情况!相关的知识,希望对你有一定的参考价值。

fatal: manifest 'navi.xml' not available
fatal: duplicate default in /home/xxxxx/Code/.repo/manifests/navi.xml
请问下这是什么情况导致的(链接是对的,同事拉成功了),是我个人环境问题,还是其他原因怎么解决?

android 使用 Git 作为代码管理工具,开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理,还开发了 Repo 命令行工具,对 Git 部分命令封装,将百多个 Git 库有效的进行组织。 参考技术A 不晓得了 。 参考技术B 可能是网络问题吧,你再看看吧

docker容器内的SSH密钥

【中文标题】docker容器内的SSH密钥【英文标题】:SSH keys inside docker container 【发布时间】:2020-05-21 08:53:27 【问题描述】:

我有一个连接gitlab的脚本,我该如何正确地把它转移到一个容器中,以便它可以通过SSH连接到gitlab?

   if not os.path.exists(os.path.join(PATH_SAVE_SCHEMA, '.git')):
        repo = Repo.init(PATH_SAVE_SCHEMA)
        origin = repo.create_remote('origin', GIT_REMOTE_URL)
        config_writer = repo.config_writer()
        config_writer.set_value('user', 'name', GIT_USER_NAME)
        config_writer.set_value('user', 'email', GIT_USER_EMAIL)
        config_writer.set_value('http', 'sslverify', 'false')
        config_writer.release()
        origin.fetch()
        origin.pull(repo.refs[0].remote_head)
        repo.git.reset('--hard')
    else:
        repo = Repo(PATH_SAVE_SCHEMA)
        repo.git.reset('--hard')
        repo.remote('origin').pull('master')

现在我的容器正在运行,但它给出了一个错误

Cmd('git') failed due to: exit code(1)
cmdline: git pull -v origin master
stderr: 'fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.'

如何为Docker文件中的key指定命令? 我需要在 GitLab 存储库中输入密钥吗?

我的 docker 文件:

ARG SSH_PRIVATE_KEY
ARG SSH_PUBLIC_KEY
ARG SSH_KNOWN_HOSTS
RUN mkdir ~/.ssh/
RUN echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
RUN echo "$SSH_PUBLIC_KEY" > ~/.ssh/id_rsa.pub
RUN chmod 700 ~/.ssh/id_rsa
RUN chmod 700 ~/.ssh/id_rsa.pub
RUN echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts

【问题讨论】:

在 Dockerfile 中安全地包含类似这样的凭据几乎是不可能的;最好从主机运行这样的命令。作为开发人员,如果docker build 序列尝试切换到不同的分支而不是仅仅构建我已经签出的分支,我也会感到惊讶。 【参考方案1】:

您没有在任何地方提供密码。

快速而简单的方法是在 git url 中指定你的密码:

<username>:<password>@github.com/<username>/<reponame>.git

但是您的密码将以明文形式出现在您的代码中。正确的方法是在to mount your secret as volume 中,即password.txt 文件。

更好的是使用ssh_key 并将其安装为卷。

【讨论】:

因为现在脚本在主机上运行,​​访问是在SSH密钥上,但是我不知道如何把这个密钥放到容器中【参考方案2】:

在构建映像期间,您可以将 ssh 密钥复制到某个“tmp”构建阶段,从 git 下载代码,然后在“main”构建阶段从“tmp”阶段复制该代码。

见https://docs.docker.com/develop/develop-images/multistage-build/

最后图片中不应有任何关于ssh key的信息。

【讨论】:

以上是关于使用repo init -u ssh://...拉代码时,总是出现如下情况!的主要内容,如果未能解决你的问题,请参考以下文章

通过 SSH 进行 git clone 需要很长时间才能完成

ssh克隆不克隆git中的repo

sh 使用特定的SSH私钥克隆git repo

linux centos 7 如何让新增的普通用户在使用sftp时可以有root哪样全部目录权限?

docker build 命令使用 ssh url 到 git repo:权限被拒绝

Android源码下载repo以及repo init总结