2013-12-06 5 views
2

Как я могу сделать git pull от [email protected]:... репозитория и git push до [email protected]:... репозитория по умолчанию?Как установить репозиторий по умолчанию в Git?

В Mercurial я создаю .hg/hgrc со следующим содержанием:

[paths] 
default = ssh://[email protected]/... 
default-push = ssh://[email protected]/... 

Какой способ установить такое же поведение по умолчанию в Git?

+0

дубликат: http://stackoverflow.com/questions/2916845/different-default-remote -tracking-branch-for-git-pull-and-git-push – Mali

+0

Кстати, необычно (хотя и не невозможно) нажать через 'git: //'. Как отмечается в man-странице, «отключено по умолчанию, поскольку в протоколе нет аутентификации (другими словами, кто-то может вставить что-либо в репозиторий, включая удаление ссылок). Это предназначено исключительно для настройки закрытой локальной сети, где все дружелюбный." – torek

+0

@torek, фиксированные ссылки, чтобы быть более реальными. –

ответ

3

В мерзавце пульты находятся в [remote "<name>"] разделах. Когда вы клонируете что-то, исходный пульт - origin, так что обычно это тот, который нужно использовать. URL-адрес выборки: url, а URL-адрес push - pushurl. Вам также нужна линия fetch (или несколько строк) для вызова названий ветвей.

Как правило, то, вы увидите, в .git/config, что-то вроде:

[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = ssh://... 

Изменить URL-адрес для git://source и добавить pushurl = git://target (вы можете сделать это с помощью git config команд или git remote, или просто запустить git config -e к поднимите свой обычный редактор в файл).

Филиалы должны иметь «восходящий» набор (в двух частях, remote и merge), чтобы заставить их «отслеживать» «удаленную ветвь». Обычно, поскольку пульт называется origin, вы установили branch.master.remote в origin и branch.master.merge в master, например. (Когда вы создаете локальный филиал на основе удаленной ветки, в любой даже немного современной версии git, он настроит его как «отслеживание» для вас.)

Как правило, вы также должны настроить push.default на что-то другое, кроме git 1.x значение по умолчанию; simple, вероятно, лучше всего избегает несчастных случаев.

Обратите внимание, что если вы привыкли к Mercurial, hg pull больше всего похож на git fetch, не git pull; hg pull -u несколько ближе к git pull, но я рекомендую тренироваться, чтобы использовать git fetch вместо git pull (даже если вы не привыкли к Mercurial, на самом деле :-)). Он также требует некоторой корректировки по различным направлениям ветвей hg и git handle (hg имеет одно глобальное пространство имен для ветвей и еще одно глобальное для закладок, git - для удаленных «удаленных филиалов», а локальные ветви - больше как hg local bookmarks.)

+0

Спасибо за объяснение. Этот жаргон 'remotes' необычен, но нормально. Я также не использую ветви много, поэтому сейчас это дополнительная информация для меня. Забыл сказать - 'pushurl = git: // target' помогает! –

+0

В git вы всегда вынуждены использовать удаленные и локальные ветви и называются «пульты», так как это именно то, как это работает. Однозначное пространство имен Hg означает, что если вы просто используете ветку 'default' (и, возможно, еще несколько), все намного проще, но они оказываются гораздо менее гибкими. Хорошие вещи плохие и наоборот, в зависимости от ваших потребностей; такова жизнь! :-) – torek

3

Это почти то же самое в git. Каждый репозиторий имеет .git/config файл и там должен быть какой-то вещи, как это в нем:

[remote "origin"] 
url = git://path/to/your/repo 
fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
remote = origin 
merge = refs/heads/master 

Вам не придется добавлять их вручную, есть довольно много команд, которые помогут вам. Хорошим началом является Git SCM Book.

Для установки по умолчанию передних одной ветви, вы можете просто ввести: git branch --set-upstream-to YOUR_REMOTE_NAME/YOUR_BRANCH_NAME (при использовании Git> = 1.8.0)

+0

Спасибо за подсказку - Git SCM определенно помогает - теперь я могу видеть эффективные настройки с помощью 'git remote -v'. Что касается этого ответа, я не вижу, как установить «default-push» здесь. Я не уверен, что владею филиалом в Git. –

1

Объединил подсказки от @torek, @klaustopher (спасибо за ответы) и дублирую ссылку от @Mali, чтобы облегчить людям из Mercurial фон, чтобы найти ответ.

default-push Чтобы добавить в Git, используйте:

$ git config remote.origin.pushurl [email protected]:yourname/project.git 

Чтобы проверить текущие настройки:

$ git remote -v 
origin [email protected]:user/project.git (fetch) 
origin [email protected]:yourname/project.git (push) 
Смежные вопросы