Как настроить git, чтобы избежать случайного нажатия git - PullRequest
34 голосов
/ 09 февраля 2009

После 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 на использование репозиториев по умолчанию и отдельных репозиториев для push и push, т.е.:

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

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

EDIT:
По сути, я хочу настроить push-репо по умолчанию так, чтобы оно отличалось от репо-извлечения по умолчанию.

Ответы [ 5 ]

35 голосов
/ 03 мая 2009

выглядит как

git config remote.origin.receivepack /bin/false

Вызывает ошибку при удаленном отправлении.

27 голосов
/ 09 сентября 2009

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

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

[remote "myremote"]
    url = git://server/path
    pushurl = user@server:/path
7 голосов
/ 09 февраля 2009

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

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

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

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

git mypush

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

0 голосов
/ 16 июня 2009

Оберните команду "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.

0 голосов
/ 27 февраля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...