如何在git中提交后自动推送?
在每次提交本地回购后,如何将git设置为自动推送到远程回购(包括自动提供密码)?
首先,请确保您可以手动推送,而无需提供密码。 如果您正在推送HTTP或HTTPS,那么可以使用login详细信息创build.netrc
文件,或将您的用户名和密码添加到远程的URL中 。 如果你使用SSH,你可以创build一个私钥没有密码的密钥对,或者使用ssh-agent
来caching你的私钥 。
然后,您应该在.git/hooks/post-commit
中创build一个包含以下内容的文件:
#!/bin/sh git push origin master
…如果您想要推送到除origin
以外的其他远程,或者推送master
分支以外的分支,则自定义该行。 确保你使该文件可执行。
如果您开始使用多于主分支,则可能需要自动推送当前分支。 我的钩子看起来像这样:
#!/usr/bin/env bash branch_name=`git symbolic-ref --short HEAD` retcode=$? non_push_suffix="_local" # Only push if branch_name was found (my be empty if in detached head state) if [ $retcode = 0 ] ; then #Only push if branch_name does not end with the non-push suffix if [[ $branch_name != *$non_push_suffix ]] ; then echo echo "**** Pushing current branch $branch_name to origin [i4h_mobiles post-commit hook]" echo git push origin $branch_name; fi fi
它推送当前分支,如果它可以用git symbolic-ref确定分支名称。
“ 如何在Git中获取当前分支名称? ”处理这个和其他方式来获取当前分支名称。
在任务分支中工作时,每个分支的自动推送可能会令人不安,因为您希望发生某些香肠 (推送后您将无法轻松分发)。 所以钩子不会推送以定义的后缀结尾的分支(在本例中为“_local”)。
在.git / hooks目录下创build一个名为“post-commit”的文件,内容为“git push”,但是如果你想自动提供一个密码,那么就需要修改了。
这个git-autopush脚本允许你设置一个提交后的钩子,类似于“ 如何configuration自动推送? ”中的build议。
但是对于密码,你需要运行一个ssh-agent
。
这里是简单的指令推/拉,而不提供SSH密码使用Linux和Windows的人(git bash)
在你的客户端上:
-
看看你是否生成了ssh密钥:
$ ls ~/.ssh/id_rsa.pub; ls ~/.ssh/id_dsa.pub /c/Users/Cermo/.ssh/id_rsa.pub <-- I have RSA key ls: cannot access '/c/Users/Cermo/.ssh/id_dsa.pub': No such file or directory
-
如果您没有任何密钥(两个“ls:无法访问…”行)生成一个新的。 如果您有任何键跳过这一步。
$ ssh-keygen.exe Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Cermo/.ssh/id_rsa): Enter passphrase (empty for no passphrase): <-- press Enter Enter same passphrase again: <-- press Enter
-
将您的密钥复制到您想要使用git进行提取或推送的远程服务器:
$ ssh-copy-id user_name@server_name /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys user_name@server_name's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'user_name@server_name'" and check to make sure that only the key(s) you wanted were added.
注意:在此操作过程中您将不得不提供密码。 之后,你的拉/推操作将不会要求密码。
注2:在使用此过程之前,必须使用user_name至lesslogin一次服务器(首次login时创buildssh密钥的主目录)