Как автоматически пушить после коммита в git? - PullRequest
67 голосов
/ 28 октября 2011

Как настроить git на автоматическое продвижение к удаленному репо (включая автоматическое предоставление моей парольной фразы) после каждой фиксации в локальном репо?

Ответы [ 5 ]

127 голосов
/ 28 октября 2011

Во-первых, убедитесь, что вы можете нажать вручную, не предоставляя пароль. Если вы используете HTTP или HTTPS, это будет случай, когда создаст .netrc файл с данными для входа или , добавив ваше имя пользователя и пароль в URL для удаленного, Если вы используете SSH, вы можете создать пару ключей, в которой закрытый ключ не имеет пароля, или использовать ssh-agent для кэширования вашего закрытого ключа .

Затем вы должны создать исполняемый (chmod +x) файл в .git/hooks/post-commit, который содержит следующее:

#!/bin/sh
git push origin master

... настройка этой строки, если вы хотите передать на удаленное устройство, отличное от origin, или нажать на ветку, отличную от master. Убедитесь, что вы делаете этот файл исполняемым.

27 голосов
/ 20 января 2015

Если вы начнете использовать больше, чем основную ветку, вы можете автоматически выдвинуть текущую ветку.Мой хук (.git/hooks/post-commit) выглядит так:

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

Он выдвигает текущую ветку, если он может определить имя ветви с помощью git symbolic-ref.

" Как получить имя текущей ветви в Git? " имеет дело с этим и другими способами получения имени текущей ветви.

Автоматическая отправка для каждой ветви может бытьбеспокоит при работе в ветвях задач, где вы ожидаете, что колбаса заставит произойти (вы не сможете легко перебазировать после нажатия).Таким образом, ловушка не будет выдвигать ветви, которые заканчиваются определенным суффиксом (в примере "_local").

8 голосов
/ 28 октября 2011

Создайте файл с именем «post-commit» в каталоге .git / hooks с содержимым «git push», хотя, если вы хотите автоматически предоставить пароль, потребуется модификация.

3 голосов
/ 28 октября 2011

Этот сценарий git-autopush позволяет настроить перехват после фиксации, аналогично тому, что было рекомендовано в " Как настроить автоматическое нажатие? ".
парольную фразу, вам нужно запустить ssh-agent.

0 голосов
/ 24 августа 2016

Вот простая инструкция для push / pull без предоставления парольной фразы поверх 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: not access ...»), сгенерируйте новый. Если у вас есть какая-либо из клавиш, пропустите этот шаг.

    $ 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.
    

Примечание. Во время этой операции вам необходимо будет ввести пароль. После этого ваши операции push / push не будут запрашивать пароль.

Примечание 2: Вы должны войти на сервер, используя user_name хотя бы один раз, прежде чем использовать эту процедуру (домашний каталог, в который копируются ключи ssh, создается при первом входе в систему)

...