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

Как настроить git, чтобы избежать случайного нажатия git

После git clone, конфигурация в новом репо выглядит следующим образом:

remote.origin.url=<some url>
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

Затем я могу выполнить "git pull" и "git push". Но меня интересует только "git pull", потому что я хочу нажать в другое репо.

Единственное, что я могу сделать, это:

git add remote repo-for-push <some other url>
git push repo-for-push master

Но я хотел бы настроить git для использования стандартных и разных репозиториев для pull и push, i.e:

git pull # pulls from origin
git push # pushes into repo-for-push, avoiding accidental push into the origin

Как это можно настроить? Спасибо заранее.

EDIT:
В принципе, я хочу настроить репозиторий push по умолчанию, чтобы отличаться от репозитория выборки/вывода по умолчанию.

4b9b3361

Ответ 1

Похож на

git config remote.origin.receivepack /bin/false

Отбрасывает нажатие на удаленный источник.

Ответ 2

В версии 1.6.4, Git получил возможность удаленного удаления с одного URL-адреса и нажать на другой, используя remote.name.pushurl настройка конфигурации. Я могу представить себе странное поведение, если push-репозиторий не отслеживает pull-репозиторий, но я подозреваю, что Git будет просто пытаться перетащить push-репозиторий из текущей ветки/отслеживания/соответствия без учета что он будет тянуть, когда он спрашивает удаленное имя с тем же именем.

Например, если вы хотите выполнить анонимный Git протокол, но нажмите через SSH (возможно, вам нужно значение с токена SecurID или что-то для аутентификации):

[remote "myremote"]
    url = git://server/path
    pushurl = [email protected]:/path

Ответ 3

Я не уверен, что вы действительно можете сделать это в git сегодня. Реализация git -fetch (в builtin-fetch.c) и git -push (встроенный push.c) вызывает внутреннюю функцию remote_get (NULL), чтобы идентифицировать репозиторий по умолчанию для pull-from/push -в.

Один из вариантов - создать псевдоним, который указывает желаемое репо. Например:

git config --add alias.mypush "push repo-for-push"

Тогда вы могли бы:

git mypush

чтобы нажать на желаемое репо. Конечно, не совсем то, что вы хотите. (Вы также можете рассмотреть аргумент --repo для нажатия, см. http://kerneltrap.org/mailarchive/git/2008/10/7/3537694 для недавнего обновления документа, в котором разъясняется аргумент --repo. )

Ответ 4

Если вы можете сделать все свое нажатие из другого ветки, я думаю, вы можете настроить эту ветвь, чтобы иметь свой отдельный репозиторий для нажатия на:

git checkout master
git branch outbound
git remote add destination <some url>
git config branch.outbound.remote destination

Я не пробовал это, и вам может понадобиться сделать еще одну работу, чтобы создать полное решение. Это также может не сработать для вас, если вам нужно нажать от мастера.

Ответ 5

Оберните команду "git" в том, что ест аргумент push. С головы до ног я написал это:

~$ cat /usr/local/bin/git
#!/bin/bash

# git wrapper
# prevents pushing to repository

declare -a args
declare msg=''
while [ $# -gt 0 ]
do
    if [ "$1" != 'push' ]; then
        args=( "${args[@]}" "$1" )
    else
        msg="No pushing"
    fi
   shift
done

if [ ${#msg} -gt 0 ]; then
    echo "$msg"
fi
/usr/bin/git "${args[@]}"  

Просто убедитесь, что команда завершена на вашем пути до "реальной" команды git.