не может запихнуть в репозиторий git - PullRequest
42 голосов
/ 11 июля 2010

Это то, что я сделал до сих пор, и я скажу, что эта процедура работала в Ubuntu 9.10, которая, возможно, имела другую версию git.сообщение:

   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 inconsistent
   remote: error: with what you pushed, and will require 'git reset --hard' to match
   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 ...
   ! [remote rejected] master -> master (branch is currently checked out)
   error: failed to push some refs to

Ответы [ 8 ]

72 голосов
/ 22 августа 2012

На стороне сервера, сделайте это:

git config receive.denyCurrentBranch ignore

Затем вы можете нажать локально.

45 голосов
/ 01 февраля 2015

Теперь возможен переход на репо без обнажения (Git 2.3.0, февраль 2015 г.).
И это возможно, когда вы нажимаете на ветку, которая в данный момент проверена в удаленном репо!

См. коммит 1404bcb от Йоханнес Шинделин (dscho) :

receive-pack: добавить еще один параметр для receive.denyCurrentBranch

При синхронизации между рабочими каталогами может быть удобно обновить текущую ветвь с помощью «push», а не «pull», например. при загрузке исправления изнутри виртуальной машины или при установке исправления, сделанного на компьютере пользователя (где разработчик не вправе устанавливать демон ssh, не говоря уже о том, чтобы знать пароль пользователя).

Обычный обходной путь - вставка во временную ветку и затем слияние на другом компьютере - больше не требуется с этим патчем.

Новая опция:

updateInstead

Обновите рабочее дерево соответствующим образом, но откажитесь сделать это, если есть какие-либо незафиксированные изменения.

То есть:

git config receive.denyCurrentBranch updateInstead
7 голосов
/ 11 июля 2010

Как я уже отмечал в этом посте heroku-like git setup? отправка в рабочие репозитории немного опасна, так как любая незавершенная работа не учитывается push, и ее довольно легковпоследствии потеряйте все незафиксированные изменения (в основном, рабочий HEAD может выйти за рамки рабочего ветки HEAD).У Git теперь есть предупреждение, чтобы сообщить вам об этом, gory, подробности находятся по следующей ссылке:

git push в не-пустое хранилище

ЭтоРекомендуется, чтобы ваш опубликованный репозиторий был пустым репозиторием, у которого нет извлеченного дерева.Голые репозитории создаются с использованием опции "git clone --bare".

5 голосов
/ 10 января 2016

Поскольку вы запустили git init на сервере, вы создали рабочий директой , но я думаю, что вы хотели создать голое хранилище вместо этого.директории, когда вы хотите добавлять, редактировать и удалять файлы в вашем проекте локально на вашем компьютере разработчика.

Если вы хотите поделиться своим проектом, создайте пустой репозиторий с помощью git init --bare project.git на сервере, а затем скопируйте егомашина и ты сможешь ее подтолкнуть.

Если вы не хотите создавать новый сейчас, вы можете клонировать свой проект в новый голый репозиторий git clone --bare project new-bare-project.git

2 голосов
/ 21 августа 2018

Попробуйте команду ниже:

git config receive.denyCurrentBranch warn
1 голос
/ 17 февраля 2017

Ответ VonC был полезен, но мне потребовалось некоторое время, чтобы понять, что для Windows команда будет следующей без равных.

d:\Repositories\repo.git>git config receive.denyCurrentBranch updateInstead

Моя версия Git для Windows v2.11.1

1 голос
/ 11 июля 2010
0 голосов
/ 04 мая 2018

Как на стороне клиента, так и на стороне сервера

d:\Repositories\repo.git>git config receive.denyCurrentBranch updateInstead

У меня не работает. Версия клиента и сервера: 2.16.2.windows.1

Я добавил это в \\ File-server \ projectFolder \ .git \ config

[receive]
    denyCurrentBranch = updateInstead

Это работает для Windows. Не нужно init --bare

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...