M.M*_*M.M 9 git git-submodules
我有一个包含3个子模块的仓库.repo和子模块都在同一台服务器上,我有ssh访问权限.远程URL是:
ssh://mm@theserver.com/path/to/sub1.git
ssh://mm@theserver.com/path/to/sub2.git
ssh://mm@theserver.com/path/to/sub3.git
Run Code Online (Sandbox Code Playgroud)
如果我进行操作,git submodule update --remote那么它会提示我输入密码3次.
有没有办法更新子模块,但只需要一次密码?提交更改等同样如此.
小智 9
另一种方法是使用内置的git缓存(v.7.7.10或更新版本),因此git会在你第一次提供它之后记住你的登录名和密码.
要使用默认超时(15分钟)启用git缓存,请键入
git config --global credential.helper cache
Run Code Online (Sandbox Code Playgroud)
要更改默认超时类型
git config --global credential.helper 'cache --timeout=3600'
Run Code Online (Sandbox Code Playgroud)
信用:这个答案从 rjv 的答案开始,尽管我需要更多的步骤才能让它正常工作。其他源材料链接如下。
背景:我在 Windows 中使用 Cygwin,有一个git从源代码构建的版本。我没有使用 Cygwin git,尽管这应该同样适用。我正在使用 Cygwin 的ssh. 但是以下方法也适用于类 Unix 系统。
首先:在 git 调用之间不可能“记住”密码。(这git submodule是一个脚本,git在这里为每个子模块调用一次)。
但是,可以使用ssh-agent记住RSA 密钥密码。所以这里的步骤列表是:
.ssh/config为git主机设置一个条目ssh-agent记住密码——或者只是在当前命令的持续时间内;或在当前 shell 的持续时间内。如果您已经有一个密钥~/.ssh/id_rsa或其他想要使用的密钥,请跳过此步骤
创建一个密钥对ssh-keygen。使用强密码。对于这个答案,我们假设文件是mm_rsa和mm_rsa.pub。默认文件名是id_rsa等,但是在这个答案中,我将使用不同的名称,以便我们可以了解如何指定名称。如果您希望为不同的主机使用不同的密钥,这可能很有用。
在服务器上:
mm_rsa.pub到~/.ssh mm_rsa.pub到~/.ssh/authorized_keys(如果它不存在则创建它)在客户端:
mm_rsa到~/.sshandchmod 600 mm_rsa以便其他人无法读取您的私钥。此时,您可以通过使用常用ssh命令打开 SSH 连接以及选项-i ~/.ssh/mm_rsa.
在~/.ssh/config文件中(如果它不存在则创建它),创建一个这样的条目:
Host the_git_host
HostName bla.bla.com
User mm
Port 2222
IdentityFile ~/.ssh/mm_rsa
Run Code Online (Sandbox Code Playgroud)
完成这些步骤后,您应该能够通过 ssh 连接,只需发出命令ssh the_git_host,然后它会提示您输入密码。链接到更多详细信息
此外,您现在可以更改要使用的 git remote the_git_host,然后它将从.ssh/config文件中提取这些详细信息!
$ git remote -v
origin ssh://mm@bla.bla.com:2222/path/to/repo (fetch)
origin ssh://mm@bla.bla.com:2222/path/to/repo (push)
$ git remote set-url origin ssh://the_git_host/path/to/repo
Run Code Online (Sandbox Code Playgroud)
此时,您将能够执行此操作git remote update,它将使用mm_rsa证书,并提示您输入密码。
ssh-agent是一个守护进程。要启动它,您运行ssh-agent -s,但这有点棘手。它想设置环境变量,以便其他程序可以与它通信。然而,它不是仅仅设置它们,而是在命令行上输出它们。所以要实际运行ssh-agent你必须写:
eval $(ssh-agent)
Run Code Online (Sandbox Code Playgroud)
它既启动 ssh-agent 又设置环境变量。
要稍后杀死它并清除环境,请使用ssh-agent -k.
代理运行后,您可以通过以下命令记住密码:
ssh-add ~/.ssh/mm_rsa
Run Code Online (Sandbox Code Playgroud)
这将提示输入密码。如果您收到错误“无法打开与您的身份验证代理的连接”,请参阅此处。
最后,每次都必须输入有点烦人,所以你可以将这个 gem插入你的.bashrc,这将延迟身份验证,直到你发出git命令:
ssh-auth() {
# Start the SSH agent only if not running
[[ -z $(ps | grep ssh-agent) ]] && echo $(ssh-agent) > /tmp/ssh-agent-data.sh
# Load the environment variables for ssh-agent
source /tmp/ssh-agent-data.sh > /dev/null
# Authenticate
[[ -z $(ssh-add -l | grep "mm_rsa") ]] && ssh-add ~/.ssh/mm_rsa
}
Run Code Online (Sandbox Code Playgroud)
这将为当前 shell 的其余部分(或直到您ssh-agent -k)保持身份验证。
所以,终于,我们可以去:
$ ssh-auth
$ git submodule update --remote
Run Code Online (Sandbox Code Playgroud)
一种解决方案可能是将您的计算机添加ssh public key到authourized_keys服务器的文件中。之后,系统将不会要求您输入密码。
仅当您具有服务器访问权限时才可以实现此操作。
这就是你要做的
~/.ssh/id_rsa.pub~/.ssh/authorized_keys服务器中的文件中。之后就可以不用密码连接服务器了
| 归档时间: |
|
| 查看次数: |
4749 次 |
| 最近记录: |