Подтвердить что ты не робот

Как автоматически нажать после фиксации в git?

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

4b9b3361

Ответ 1

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

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

#!/bin/sh
git push origin master

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

Ответ 2

Если вы начинаете использовать больше, чем основную ветвь, вы можете автоматически выдвинуть текущую ветвь. Мой хук (.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").

Ответ 3

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

Ответ 5

Вот простая инструкция для push/pulling без предоставления passphrase по 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 [email protected]_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
    [email protected]_name password:
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh '[email protected]_name'"
    and check to make sure that only the key(s) you wanted were added.
    

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

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

Ответ 6

Вот скрипт bash для git для автоматического push удаленного репо

  1. Автоматически проверять ssh-agent
  2. Автоматически отправлять парольную фразу с помощью ожидаемого сценария
  3. Использование просто: $ cd /path/to/your/repository затем $ push

Поместите этот скрипт в файл, например $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

Свяжите его с каталогом /bin, чтобы его можно было вызвать просто командой $ push

$ sudo ln -s $HOME/.ssh/push /bin/push
$ chmod +x /bin/push

Ответ 7

Кроме того, я разработал пакет " live-git-push ", который будет использоваться в курсах и тому подобном, для синхронизации реального времени онлайн-репо с локальными изменениями файлов, фиксации и отправки каждого файла при сохранении.