Git push получает сообщение «ошибка: отказ от обновления извлеченной ветки»

Вот'что ядо сих пор сделали:

Я успешно клонировал мое удаленное хранилище в новый каталог на моей локальной машине.

Затем я отредактировал файл в рабочей копии, зафиксировал его и попытался отправить в удаленное хранилище. Вот'S ошибка, которую я получил:

$ git push origin master
[email protected]'s password:
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 456 bytes | 0 bytes/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsist
ent
remote: error: with what you pushed, and will require 'git reset --hard' to matc
h
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to

remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into

remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some

remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set

remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To [email protected]om:/var/www/html
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to '[email protected]:/var/www/html'

У вас есть идеи, как я могу решить эту проблему? Благодарю.

Вот'Моя локальная конфигурация Git:

$ git config -l
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
merge.tool=tortoisemerge
gui.recentrepo=C:/Users/Chris/Dev/Projects/html
[email protected]
user.name=CBarnhill
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
[email protected]:var/www/html
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
user.name=Chris Barnhill
[email protected]
gui.wmstate=normal
gui.geometry=887x427+26+26 171 192
 StuartLC24 июн. 2013 г., 15:40
Git вопросы очень приветствуются на SO :)

Ответы на вопрос(2)

Вы можете сделать три вещи:

сделай оригинальное репо голым и дави как хочешьустановите receive.denyCurrentBranch в config, как предложено, чтобы разрешить отправку в извлеченные ветви и позаботиться о расхожденияхпроверить другую ветку в целевом репо

возможно, даже принудительный толчок сработает, я нене могу предложить это.

 eckes07 окт. 2013 г., 13:54
+1 за хороший RTFM
Решение Вопроса

что удаленная главная ветвь находится в непроходном состоянии, что означает, что любой, кто нажмет эту ветку, перезапишет существующее состояние извлеченной рабочей копии (ссылка на HEAD). Это не хорошая вещь.

Чтобы решить эту проблему, вы можете использовать пустой репозиторий как "коммунальный» репо (сделайте это с 'git init --bare '), или работа с филиалами:

git checkout -b myBranch

Работай над этой веткой и делай коммит. Затем вставьте свою веткуgit push origin myBranch ' без необходимости что-либо разрушать. После этого ваша ветка в удаленном репо может быть объединена или перебазирована в master.

 Chris Barnhill01 июл. 2013 г., 04:53
Я создал репо из существующего производственного каталога на производственном сервере. Я неправильно это настроил? Мой рабочий каталог находится на моем локальном компьютере. Я клонировал производственный каталог с сервера и пытаюсь сделать разработку здесь. Это где я сталкиваюсь с ошибкой толчка.
 Chris Barnhill01 июл. 2013 г., 17:46
ХОРОШО. Пожалуйста, помогите мне ясно понять, что вы говорите. Поэтому я должен создать чистое репо и подтолкнуть мое локальное репо к этому репо. Затем я удаляю свое существующее производственное содержимое и клонирую голое репо в производство? Поэтому, когда мне нужно обновить производство, я бы вытащил последнюю версию из чистого репо? Если это то, что вы хотели сказать, пожалуйста, подтвердите. Спасибо!
 Chris Barnhill29 июн. 2013 г., 16:45
Я создал удаленную ветку с именем 'CBarnhill» и совершил изменение файла. Я попробовал следующую команду push, но получил следующую ошибку: $ git push origin CBarnhill [email protected] 'Ваш пароль: fatal: 'вар / WWW / HTML» не похоже на то, что git-репозиторий фатален: не удалось прочитать из удаленного репозитория. Пожалуйста, убедитесь, что у вас есть правильные права доступа и хранилище существует.
 Chris Barnhill30 июн. 2013 г., 14:43
не могли бы вы предложить мне еще какие-нибудь советы по моей проблеме с мерзавцем?
 Andreas Gnyp01 июл. 2013 г., 19:44
Да, это будет в основном так. С этим можнозащищать» ваш производственный код от случайных изменений, иметь чистый репо для обмена, и вы также можете настроить "тестирование»- таким образом. Например, какая-то дополнительная (обфусцированная) папка, например "yourdomain.com/fallonyourkeyboard» - где вы можете проверить свой код, прежде чем он попадет в производственную папку.
 Andreas Gnyp01 июл. 2013 г., 17:03
Вы, вероятно, не можете вернуться в репо, потому что origin-url как-то изменился. Вы пытаетесь подтолкнуть квар / WWW / HTML», Вместо этого должно быть/ Вар / WWW / HTML», Тем не менее, это не то, как вы должны это сделать. Если вы действительно хотите сохранить git-репо в качестве инструмента развертывания, вам нужно создать голое репо в другом месте и клонировать его в производство (пожалуйста, нене цитируй меня по этому поводу ;-)). Например в "/opt/repo.git» на удаленной машине. В зависимости от ваших прав там, конечно.
 Andreas Gnyp30 июн. 2013 г., 14:57
обычно ты бы неt использовать рабочий каталог для производства. Есть много файлов, которые неон, как, например, .gitignore, и вы рискуете перезаписать производственный код, вмешиваясь в репо. Для этого вы можете использовать инструменты развертывания или написать сценарий, который развертывает ваш код в рабочей среде. ... Конечно, где-то в сети есть некоторые рекомендации, но я также мог бы дать вам несколько советов о том, как настроить производственную систему
 Chris Barnhill29 июн. 2013 г., 16:49
Что касается работы с голым удаленным репо, это неt вариант, потому что удаленное репо содержит производственный код. Я могу'удалить его.
 Andreas Gnyp03 июл. 2013 г., 17:01
вы'Добро пожаловать :-)
 Chris Barnhill03 июл. 2013 г., 01:21
Наконец-то я сработал с твоей помощью. Спасибо.
 Chris Barnhill02 июл. 2013 г., 19:40
Я создал голое репо на своем производственном сервере. Затем я подтолкнул свой локальный репо к голому репо, и это сработало. Однако затем я понял, что вместо этого я должен был перенести свое производственное репо, потому что мой локальный ресурс устарел. Я попробовал это, но получил ошибку. Поэтому я попытался создатьпроизводства» ветвь голая и подталкивающая к этому. Проблема в том, что когда я делаюgit push /var/www/html.git (мой голый репозиторий) ' он сообщает, что не может обновитьмастер', Как мне подтолкнуть кпроизводства» ветка голая?

Ваш ответ на вопрос