Ответ 1
Похож на
git config remote.origin.receivepack /bin/false
Отбрасывает нажатие на удаленный источник.
После 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 по умолчанию, чтобы отличаться от репозитория выборки/вывода по умолчанию.
Похож на
git config remote.origin.receivepack /bin/false
Отбрасывает нажатие на удаленный источник.
В версии 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
Я не уверен, что вы действительно можете сделать это в 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. )
Если вы можете сделать все свое нажатие из другого ветки, я думаю, вы можете настроить эту ветвь, чтобы иметь свой отдельный репозиторий для нажатия на:
git checkout master
git branch outbound
git remote add destination <some url>
git config branch.outbound.remote destination
Я не пробовал это, и вам может понадобиться сделать еще одну работу, чтобы создать полное решение. Это также может не сработать для вас, если вам нужно нажать от мастера.
Оберните команду "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.