Як автоматично натискати після здійснення в git?

Як встановити git, щоб автоматично переходити до віддаленого репо (включивши автоматичне надання мій парольної фразу) після кожного приєднання до місцевого репо?

60
Який протокол ви натискаєте? Якщо буде запропоновано пароль, я вважаю, що це або SSH, або HTTP.
додано Автор Mark Longair, джерело
Крім того, завжди корисно з питань Git, щоб принаймні згадати, яку операційну систему ви використовуєте.
додано Автор Mark Longair, джерело
Я сумніваюсь про мудрість такого створення. Це усуває будь-яку здатність реорганізувати ваші зміни в інший набір зобов'язань (переробки, особливо). Я створюю забагато помилок для налаштування, як це, в кінцевому підсумку буде корисним для мене.
додано Автор jpmc26, джерело

5 Відповіді

По-перше, переконайтеся, що ви можете натиснути вручну, не надаючи пароль. Якщо ви натискаєте HTTP або HTTPS, це буде випадок створення файлу .netrc з деталями входу або додавання вашого імені користувача та пароля до URL-адреси дистанційного керування . Якщо ви використовуєте SSH, ви можете створити пари ключем, де в приватному ключі немає пароля, або використовуйте ssh-agent для кешування приватного ключа .

Потім потрібно створити файл у файлі .git/hooks/post-commit , який містить наступне:

#!/bin/sh
git push origin master

... налаштувати цю лінію, якщо ви хочете натиснути на віддалений, крім origin , або натиснути іншу гілку, ніж master . Переконайтеся, що цей файл виконуваний файл.

110
додано
Не вдалося зробити ssh-agent запам'ятати мою парольну фразу, тому довелося зробити це порожнім. Сподіваюся, що моя дружина не зламає мого акаунта :)
додано Автор ulu, джерело
git push - все походження
додано Автор Yada, джерело
Говорячи про налаштування, що, якщо я хочу натиснути деякі, але не всі гілки таким чином? Наприклад, я хочу, щоб автоматично натиснути лише ті гілки, які мають відповідну віддалену гілку, зазначену в .git/config з префіксом feature/xy/.
додано Автор A-B-B, джерело
chmod + x .git/hooks/post-commit
додано Автор UnchartedWorks, джерело

Якщо ви почнете використовувати більше, ніж основна гілка, можливо, ви захочете автоматично натискати поточну гілку. Мій гачок ( .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 = 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

Він натискає поточну гілку, якщо вона може визначити назву гілки з символом-ref ref.

" Як отримати поточну назву гілки в Git? " deals за допомогою цього та інших способів отримати поточну назву гілки.

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

23
додано
Для першого рядка я мав використовувати #!/Bin/sh , щоб він працював. В іншому випадку він продовжував говорити: error: неможливо запустити .git/hooks/post-commit: немає такого файлу чи каталогу . Дякую, мені подобається ваше рішення найкраще.
додано Автор oyalhi, джерело
Дякую за коментар, @oahlhi, я оновлював лінію в головному вікні у відповідь. Він повинен тепер краще портувати!
додано Автор i4h, джерело

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

8
додано
Я зробив це для вас.
додано Автор ulu, джерело
Я хотів би оновити відповідь у Марка Лонгайра, якщо Я міг би.
додано Автор Colin R, джерело
Чекати, що? Колін Р зараз у верхній 2% :)
додано Автор Post Self, джерело

Цей сценарій git-autopush дозволяє встановити пост-крючок, подібний до того, що було рекомендовано в " Як налаштовувати автоматичне натискання? ".
Але для парольної фрази вам потрібно запустити ssh-agent .

3
додано

Ось проста інструкція для натискання/перетягування без надання парольної фразу над SSH для людей, які використовують Linux і Windows (git bash)

На вашому клієнті:

  1. Check out if you have ssh keys generated:

    $ 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. If you don't have any key (two "ls: cannot access ..." lines) generate a new one. If you have any of the keys skip this step.

    $ 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. Copy your key to remote server from which you want to pull or push using 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's 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: Ви повинні зареєструватися на сервері, використовуючи user_name принаймні один раз, перш ніж використовувати цю процедуру (домашній каталог, до якого копіюються ключі ssh, створюється під час першого входу).

0
додано