Почему я не могу перейти к этому голому хранилищу?



вы можете объяснить, что не так с этим рабочим процессом?



$ 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 всегда нажимать на репозиторий, из которого я клонировал?

520   6  
git

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

    Ничего не найдено.