Почему я не могу нажать на этот пустой репозиторий?
Можете ли вы объяснить, что не так с этим документооборотом?
$ git init --bare bare
Initialized empty Git repository in /work/fun/git_experiments/bare/
$ git clone bare alice
Cloning into alice...
done.
warning: You appear to have cloned an empty repository.
$ cd alice/
$ touch a
$ git add a
$ git commit -m "Added a"
[master (root-commit) 70d52d4] Added a
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
$ 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 '/work/fun/git_experiments/bare'
Не git push
всегда нажимать на репозиторий, который я клонировал?
Ответы
Ответ 1
Да, проблема в том, что в "голом" нет коммитов. Это проблема только с первым фиксацией, если вы создаете репозиции в порядке (голый, alice). Попробуйте сделать:
git push --set-upstream origin master
Это потребуется только в первый раз. Впоследствии он должен работать нормально.
Как заметил Крис Джонсен, у вас не было бы этой проблемы, если бы ваш push.default был настроен. Мне нравится восхождение/отслеживание.
Ответ 2
Если вы:
git push origin master
он будет двигаться к голой репо.
Похоже, что ваш репозиторий alice не отслеживает правильно.
cat .git/config
Показывает удаленный доступ и ветвь по умолчанию.
Если вы
git push -u origin master
Вы должны начать отслеживать этот удаленный и ветки. Я не уверен, что этот параметр всегда находился в git.
Ответ 3
Этот ответ, связанный с ответом, предоставил мне решение... это была просто глупая ошибка:
Не забудьте сделать первый!
fooobar.com/questions/793/...
Если вы еще не сделали ставку на свое местное репо, вам нечего толкнуть, но сообщение об ошибке Git, которое вы вернете, вам не поможет.
Ответ 4
git push --all
- это канонический способ перебросить все в новый открытый репозиторий.
Другой способ сделать то же самое - создать новый, небедный репозиторий, а затем сделать голой клон с
git clone --bare
затем используйте
git remote add origin <new-remote-repo>
в исходном (не голом) репозитории.
Ответ 5
Попробуйте сделать это в репозитории alice
(до нажатия):
git config push.default tracking
Или настройте его как значение по умолчанию для вашего пользователя с помощью git config --global …
.
git push
по умолчанию используется репозиторий origin
(который обычно является репозиторием, из которого вы клонировали текущий репозиторий), но он не по умолчанию не нажимает текущую ветку - по умолчанию он нажимает только ветки, которые существуют в обоих исходный репозиторий и репозиторий-получатель.
Конфигурационная переменная push.default
(см. git -config (1)) управляет тем, что git push
будет толкать, когда это не будет с учетом любых аргументов "refspec" (т.е. что-то после имени репозитория). Значение по умолчанию дает описанное выше поведение.
Ниже приведены возможные значения для push.default
:
-
nothing
Это заставляет вас поставлять "refspec".
-
matching
(по умолчанию)
Это подталкивает все ветки, которые существуют как в исходном репозитории, так и в репозитории назначения.
Это полностью не зависит от ветки, которая в настоящее время проверена.
-
upstream
или tracking
(Оба значения означают одно и то же: более поздняя версия устарела, чтобы избежать путаницы с ветвями удаленного отслеживания. Первая была введена в 1.7.4.2, поэтому вам придется использовать последнюю, если вы используете Git 1.7.3.1.)
Они нажимают текущую ветвь на ветвь, указанную в ее "восходящей" конфигурации.
-
current
Это подталкивает текущую ветку к ветки с тем же именем в репозитории-получателе.
Эти последние два заканчиваются одинаковыми для обычных случаев (например, работа над локальным мастером, который использует источник/ведущий как его восходящий поток), но они различаются, когда локальная ветка имеет другое имя из своей ветки "вверх по течению":/p >
git checkout master
# hack, commit, hack, commit
# bug report comes in, we want a fix on master without the above commits
git checkout -b quickfix origin/master # "upstream" is master on origin
# fix, commit
git push
Если push.default
равно upstream
(или tracking
), то нажатие переходит к главной ветки origin
s. Когда он равен current
, нажатие перейдет в ветвь origin
s quickfix.
Параметр matching
обновит мастер bare
s в вашем сценарии после его создания. Чтобы установить его, вы можете использовать git push origin master
один раз.
Однако параметр upstream
(или, может быть, current
) выглядит так, как будто это может быть лучшим совпадением с тем, что вы ожидаете, поэтому вы можете попробовать:
# try it once (in Git 1.7.2 and later)
git -c push.default=upstream push
# configure it for only this repository
git config push.default upstream
# configure it for all repositories that do not override it themselves
git config --global push.default upstream
(Опять же, если вы все еще используете Git до 1.7.4.2, вам нужно будет использовать tracking
вместо upstream
).
Ответ 6
Я использую SourceTree git клиент, и я вижу, что их первая команда commit/push:
git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master