Mil*_*red 39 git hook gitorious mirroring git-push
我有一个在git.debian.org(alioth)上托管的项目,我想在http://gitorious.org上配置一个post-receive钩子来更新存储库的镜像.
我想我必须要用 git push --mirror gitorious
现在,我需要让Alioth获得授权才能获得成功.我怎么做?
我想我需要在gitorious上配置用户并为其创建一个ssh密钥.然后当我在post-receive钩子中执行git push时,请确保使用此ssh键.
我可以使用~/.ssh/config
但问题是许多用户可以推送aloth,每个人都必须登录并配置~/.ssh/config
.相反,我想要一个命令行选项或环境变量来告诉ssh使用哪个键.我能这样做吗?
另外,您是否有其他想法可以实现镜像?并且,是否有可能以相反的方式配置它(有效推动阿里斯)?
Mil*_*red 38
答案可以在git参考手册中找到.
GIT_SSH
如果设置了此环境变量,那么git fetch和git push将在需要连接到远程系统时使用此命令而不是ssh.该
$GIT_SSH
命令将给出两个参数:来自URL的username @ host(或只是host)以及要在该远程系统上执行的shell命令.要将选项传递给要列出的程序,
GIT_SSH
需要将程序和选项包装到shell脚本中,然后设置GIT_SSH
为引用shell脚本.通常,通过您的个人
.ssh/config
文件更容易配置任何所需的选项.有关详细信息,请参阅ssh文档.
所以,我需要编写一个包装器脚本,我编写这个push-gitorious.sh
脚本:
#!/bin/sh
if [ "run" != "$1" ]; then
exec ssh -i "$GITORIOUS_IDENTITY_FILE" -o "StrictHostKeyChecking no" "$@"
fi
remote=YOUR_SSH_GITORIOUS_URL
echo "Mirroring to $remote"
export GITORIOUS_IDENTITY_FILE="`mktemp /tmp/tmp.XXXXXXXXXX`"
export GIT_SSH="$0"
cat >"$GITORIOUS_IDENTITY_FILE" <<EOF
YOUR SSH PRIVATE KEY
EOF
cat >"$GITORIOUS_IDENTITY_FILE.pub" <<EOF
YOUR SSH PUBLIC KEY
EOF
#echo git push --mirror "$remote"
git push --mirror "$remote"
rm -f "$GITORIOUS_IDENTITY_FILE"
rm -f "$GITORIOUS_IDENTITY_FILE.pub"
exit 0
Run Code Online (Sandbox Code Playgroud)
当然,您必须填写私钥(公钥包含在脚本中仅供参考.您还需要填写好的URL.
在post-receive钩子中,你必须把:
path/to/push-gitorious.sh run
Run Code Online (Sandbox Code Playgroud)
运行选项很重要,否则它将直接运行ssh.
警告:未对远程主机标识进行检查.您可以从ssh命令行中删除该选项,并根据known_hosts
需要进行自定义.在这个用例中,我认为这不重要.
alv*_*bad 28
我知道两种方法,您可以在git命令行指定要用于git站点的任何密钥文件.您不需要在配置文件或脚本中对此密钥文件进行硬编码.你只需在git命令行直接提供.
方法1:使用GIT_SSH环境变量
在命令行中的用法如下:
$ PKEY=~/.ssh/keyfile.pem git clone git@github.com:me/repo.git
Run Code Online (Sandbox Code Playgroud)
要使用此命令,您需要进行一些预设置.首先,使用以下内容创建shell脚本:
#!/bin/sh
if [ -z "$PKEY" ]; then
# if PKEY is not specified, run ssh using default keyfile
ssh "$@"
else
ssh -i "$PKEY" "$@"
fi
Run Code Online (Sandbox Code Playgroud)
接下来,导出并设置GIT_SSH变量的值等于上面的shell脚本的位置.
$ export GIT_SSH=~/ssh-git.sh
Run Code Online (Sandbox Code Playgroud)
其中〜/ ssh-git.sh是上面的shell脚本的文件名.
该脚本必须是可执行的,所以做一个chmod:
$ chmod +x ~/ssh-git.sh
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用您选择使用的任何密钥文件运行此命令:
$ PKEY=~/.ssh/keyfile1.pem git clone git@github.com:me/repo.git
Run Code Online (Sandbox Code Playgroud)
要为其他主机使用另一个密钥文件:
$ PKEY=~/.ssh/keyfile2.pem git clone git@myothersite.com:other/repo.git
Run Code Online (Sandbox Code Playgroud)
这支持您要使用的任何密钥文件.每次你需要使用你想要使用的密钥文件运行git时,只需将它提供给PKEY变量即可.只要预先配置了GIT_SSH,您就可以忘记其他所有内容.
记下PKEY变量.您可以使用任何名称,只要它与GIT_SSH指向的shell脚本中使用的名称相匹配即可.
方法2:使用包装器脚本
包装器脚本的用法如下:
$ git.sh -i ~/.ssh/keyfile.pem clone git@github.com:me/repo.git
Run Code Online (Sandbox Code Playgroud)
这种用法很直观,因为它看起来像使用-i选项运行ssh.
这不需要预先设置shell脚本和GIT_SSH.您只需要使用git命令下载并运行此单个包装器脚本.
您可以在此处获取此包装脚本的副本:http: //alvinabad.wordpress.com/2013/03/23/how-to-specify-an-ssh-key-file-with-the-git-command/
归档时间: |
|
查看次数: |
38245 次 |
最近记录: |