tipos tag remove practices etiquetas crear best git githooks git-push post-commit-hook

remove - git tag best practices



¿Cómo presionar automáticamente después de cometer en git? (5)

¿Cómo configuro git para enviar automáticamente a un repositorio remoto (que incluye automáticamente mi frase de contraseña) después de cada compromiso con el repositorio local?


Aquí hay instrucciones simples para empujar / tirar sin proporcionar una frase de contraseña sobre ssh para las personas que usan Linux y Windows (git bash)

En tu cliente:

  1. Echa un vistazo si tienes claves ssh generadas:

    $ 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 no tiene ninguna clave (dos líneas "ls: no se puede acceder ..."), genere una nueva. Si tiene alguna de las teclas omita este paso.

    $ 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. Copie su clave al servidor remoto desde el que desea extraer o presionar usando 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.

Nota: Deberá proporcionar una contraseña durante esta operación. Después de eso, sus operaciones de extracción / extracción no solicitarán contraseña.

Nota 2: debe iniciar sesión en el servidor utilizando user_name al menos una vez antes de usar este procedimiento (el directorio de inicio en el que se copian las claves ssh se crea durante el primer inicio de sesión)


Cree un archivo llamado "post-commit" en el directorio .git / hooks con el contenido "git push", aunque si desea proporcionar una contraseña automáticamente, será necesario modificarlo.



Si comienza a usar más de la rama principal, es posible que desee presionar automáticamente la rama actual. Mi gancho se ve así:

#!/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

Empuja la rama actual, si puede determinar el nombre de la rama con git symbolic-ref.

" ¿Cómo obtener el nombre de la sucursal actual en Git? " Trata sobre esta y otras formas de obtener el nombre de la sucursal actual.

Una pulsación automática para cada rama puede ser molesta cuando se trabaja en las ramas de tareas donde se espera que ocurra algún embutido (no se podrá volver a ajustar fácilmente después de empujar). Por lo tanto, el gancho no empujará ramas que terminen con un sufijo definido (en el ejemplo "_local").


Primero, asegúrese de que puede presionar manualmente sin proporcionar su contraseña. Si está presionando HTTP o HTTPS, será un caso de crear un archivo .netrc con los detalles de inicio de sesión o agregar su nombre de usuario y contraseña a la URL del control remoto . Si está utilizando SSH, puede crear un par de llaves donde la clave privada no tenga una contraseña o usar ssh-agent para almacenar en caché su clave privada .

Luego debe crear un archivo en .git/hooks/post-commit que contenga lo siguiente:

#!/bin/sh git push origin master

... personalizando esa línea si desea presionar a un control remoto que no sea el origin , o empujar una rama que no sea master . Asegúrese de hacer ese archivo ejecutable.