Gitolite: удаленные пулы по умолчанию для нового репозитория

Я установил gitolite (локально на данный момент, чтобы экспериментировать), и, похоже, он работает, за исключением того, что новые репозитории не отслеживают удаленный файл по умолчанию после git clone. Если я правильно помню, когда я клонировал репозиторий из github.com, он уже мог нажать и потянуть.

Вот что я пробовал:

$ git clone [email protected]:sandbox
Cloning into sandbox...
warning: You appear to have cloned an empty repository.
$ echo "A" > README
$ git add README
$ git commit README -m 'test'
$ git push
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '[email protected]:sandbox'

Когда я пытаюсь нажать явно, все работает:

$ git push origin master
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 426 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To [email protected]:sandbox
 * [new branch]      master -> master

Нужен ли этот дополнительный шаг? Можно установить по умолчанию? На github это не так?

Спасибо

Ответ 1

Первый git push всегда требует указать ветку, которую вы хотите нажать.

git push -u origin master

Затем можно нажать следующий шаг из той же ветки, что и вы:

git push

От git push справочная страница:

Специальный refspec : (или +:, чтобы разрешить немедленные обновления) направляет git на нажатие "соответствующих" ветвей: для каждой ветки, которая существует на локальной стороне, удаленная сторона обновляется, если ветвь с тем же именем уже существует на удаленной стороне.
Это режим работы по умолчанию, если не найдено явного refspec.

Так как вы клонировали пустой репозиторий, первый push не находит никакой соответствующей ветки (в репозитории upstream origin) нет()

Примечание. См. "Что является результатом git push origin?":

Политика по умолчанию для git push изменится с помощью git 2.0 (или, возможно, git1.9)

Был введен новый режим push, " simple", который представляет собой крест между "current" и "upstream".
"git push" без какого-либо refspec будет нажимать текущую ветку на одно имя в удаленном репозитории только тогда, когда она настроена на отслеживание ветки с тем же именем там.
Планируется сделать этот режим новым значением по умолчанию, если push.default не настроен.

Итак, в git push -u origin master здесь важна -u (--set-upstream-to) (а не просто для того, чтобы направить ветвь с тем же именем на удаленный 'origin', но это ветвь удаленного отслеживания.

Ответ 2

Вы можете использовать команду git branch --set-upstream, например:
 git branch --set-upstream develop origin/develop