如何在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)

在你的客户端上:

  1. 看看你是否生成了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 
  2. 如果您没有任何密钥(两个“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 
  3. 将您的密钥复制到您想要使用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密钥的主目录)