web-dev-qa-db-fra.com

Comment pousser automatiquement après avoir validé git?

Comment puis-je configurer git pour pousser automatiquement vers un référentiel distant (y compris fournir automatiquement ma phrase de passe) après chaque validation dans le référentiel local?

69
ulu

Tout d'abord, assurez-vous que vous pouvez pousser manuellement sans fournir votre mot de passe. Si vous poussez sur HTTP ou HTTPS, ce sera le cas soit création d'un .netrc fichier avec les informations de connexion ou en ajoutant votre nom d'utilisateur et votre mot de passe dans l'URL de la télécommande . Si vous utilisez SSH, vous pouvez soit créer une paire de clés où la clé privée n'a pas de mot de passe, soit tilisez ssh-agent pour mettre en cache votre clé privée .

Ensuite, vous devez créer un exécutable (chmod +x) fichier dans .git/hooks/post-commit qui contient les éléments suivants:

#!/bin/sh
git Push Origin master

... personnalisation de cette ligne si vous souhaitez envoyer à une télécommande autre que Origin, ou pousser une branche autre que master. Assurez-vous de rendre ce fichier exécutable.

127
Mark Longair

Si vous commencez à utiliser plus que la branche principale, vous souhaiterez peut-être pousser automatiquement la branche actuelle. Mon crochet (.git/hooks/post-commit) ressemble à ça:

#!/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 -eq 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 post-commit hook]"
        echo
        git Push Origin $branch_name;
    fi
fi

Il pousse la branche courante, s'il peut déterminer le nom de la branche avec git symbolic-ref.

" Comment obtenir le nom de la branche actuelle dans Git? " traite de cela et d'autres façons d'obtenir le nom de la branche actuelle.

Un Push automatique pour chaque branche peut être dérangeant lorsque vous travaillez dans des branches de tâches où vous vous attendez à ce que fabrication de saucisses se produise (vous ne pourrez pas rebaser facilement après avoir poussé). Le hook ne poussera donc pas les branches qui se terminent par un suffixe défini (dans l'exemple "_local").

27
i4h

Créez un fichier nommé "post-commit" dans le répertoire .git/hooks avec le contenu "git Push", bien que si vous souhaitez fournir automatiquement un mot de passe, une modification sera nécessaire.

8
Colin R

Ce script git-autopush vous permet de configurer un hook post-commit, similaire à ce qui a été recommandé dans " Comment configurer la poussée automatique? ".
Mais pour la phrase secrète, vous devez exécuter un ssh-agent .

3
VonC

Voici des instructions simples pour pousser/tirer sans fournir de phrase secrète sur ssh pour les personnes utilisant Linux et Windows (git bash)

Sur votre client:

  1. Vérifiez si vous avez généré des clés 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. Si vous n'avez pas de clé (deux lignes "ls: impossible d'accéder ..."), générez-en une nouvelle. Si vous avez l'une des clés, ignorez cette étape.

    $ 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. Copiez votre clé sur le serveur distant à partir duquel vous souhaitez extraire ou pousser à l'aide de 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.
    

Remarque: Vous devrez fournir un mot de passe lors de cette opération. Après cela, vos opérations Pull/Push ne demanderont pas de mot de passe.

Remarque 2: Vous devez vous connecter au serveur en utilisant nom_utilisateur au moins une fois avant d'utiliser cette procédure (le répertoire personnel dans lequel les clés ssh sont copiées est créé lors de la première connexion)

0
Rafał Gnitecki

Voici le script bash pour git pour automatiquement Push vers un dépôt distant

  1. Vérifier automatiquement ssh-agent
  2. Envoi automatique de la phrase de passe à l'aide de script attend
  3. L'utilisation est simplement: $ cd /path/to/your/repository puis $ Push

Mettez ce script dans un fichier par exemple $HOME/.ssh/Push

#!/bin/bash

# Check connection
ssh-add -l &>/dev/null
[[ "$?" == 2 ]] && eval `ssh-agent` > /dev/null

# Check if git config is configured
if [ ! $(git config user.name) ]
then 
    git config --global user.name <user_name>
    git config --global user.email <user_email>
fi

# Check if expect is installed
if [[ ! $(dpkg -l | grep expect) ]]
then 
    apt-get update > /dev/null
    apt-get install --assume-yes --no-install-recommends apt-utils expect > /dev/null
fi

# Check identity
ssh-add -l &>/dev/null
[[ "$?" == 1 ]] && expect $HOME/.ssh/agent > /dev/null

# Clean and Push repo
REMOTE=$(git remote get-url Origin)
[email protected]:${REMOTE##*github.com/}
[[ $REMOTE == "http"* ]] && git remote set-url Origin $URL
git add . && git commit -m "test automatically Push to a remote repo"
git status && git Push Origin $(git rev-parse --abbrev-ref HEAD) --force

Liez-le à /bin répertoire afin qu'il puisse être appelé par $ Push commande

$ Sudo ln -s $HOME/.ssh/Push /bin/Push
$ chmod +x /bin/Push
0
Chetabahana