Почему я не могу перейти к этому голому хранилищу?
вы можете объяснить, что не так с этим рабочим процессом?
$ 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 всегда нажимать на репозиторий, из которого я клонировал?
6 ответов:
да, проблема в том, что в "голом"нет коммитов. Это проблема только с первой фиксацией, если вы создаете репозитории в порядке (bare, alice). Попробуйте сделать:
git push --set-upstream origin masterэто потребуется только в первый раз. После этого он должен работать нормально.
Как отметил Крис Джонсен, у вас не было бы этой проблемы, если бы ваш толчок.значение по умолчанию было настроено. Мне нравится вверх по течению / отслеживание.
Если вы:
git push origin masterон будет толкать к голому РЕПО.
похоже, что ваше РЕПО alice не отслеживается правильно.
cat .git/configэто покажет удаленный и ветвь по умолчанию.
Если вы
git push -u origin masterвы должны начать отслеживать этот пульт и ветку. Я не уверен, что этот вариант всегда был в git.
ответ на этот связанный вопрос предоставил мне решение... это была просто глупая ошибка:
Не забудьте совершить первый!
https://stackoverflow.com/a/7572252
Если вы еще не совершили свой локальный РЕПО, нет ничего, чтобы нажать, но сообщение об ошибке Git вы получите обратно не поможет вам слишком много.
git push --all- это канонический способ перенести все на новый "голый" репозиторий.
другой способ сделать то же самое-создать новый, не голый репозиторий, а затем сделать голый клон с
git clone --bareзатем использовать
git remote add origin <new-remote-repo>в исходном (не голом) репозитории.
попробуйте это в ваш
aliceхранилище (до нажатия):git config push.default trackingили, настроить его по умолчанию для вашего пользователя с
git config --global ….
git pushне по умолчаниюoriginрепозиторий (который обычно является репозиторием, из которого вы клонировали текущий репозиторий), но по умолчанию он не нажимает текущую ветвь-по умолчанию он нажимает только ветви, которые существуют как в исходном репозитории, так и в целевом хранилище.The
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
Это приводит к перемещению текущей ветви в ветвь с тем же именем в целевом репозитории.эти последние два в конечном итоге то же самое для общих случаев (например, работа на локальном мастер использует origin / master как его вверх по течению), но они отличаются, когда местная ветвь имеет другое название от его ветви "вверх по течению":
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 филиала.The
на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).
Я использую SourceTree git client, и я вижу, что их начальная команда commit/push:
git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master
Comments