Не может запихнуть в репозиторий git
Это то, что я сделал до сих пор, и я скажу, что эта процедура работала на Ubuntu 9.10, которая, возможно, имела другую версию git.
server: mkdir ~/git
local: scp -r /../project name@url.com:~/git/
server: cd git
cd project
git init
git add .
git commit -a -m "initial"
local: git clone name@url.com:/../git/project /home/name/project
cd project
capify . (from the ruby gem capistrano)
git add .
git commit -a -m "capified"
git push
Когда я пытаюсь вытолкнуть это, я получаю это сообщение об ошибке:
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 ответов
На стороне сервера сделайте это:
git config receive.denyCurrentBranch ignore
Тогда вы можете нажать на местных.
Теперь возможно продвижение к непроявленному репо (Git 2.3.0, февраль 2015 г.).
И это возможно, когда вы нажимаете на ветку, проверенную в данный момент в удаленном репо!
Смотрите коммит 1404bcb Йоханнеса Шинделина ( dscho
):
receive-pack
: добавить еще один вариант дляreceive.denyCurrentBranch
При синхронизации между рабочими каталогами может быть удобно обновить текущую ветку с помощью '
push
' скорее, чем 'pull
', например, при извлечении исправления изнутри виртуальной машины или при отправке исправления, сделанного на машине пользователя (где разработчик не вправе устанавливать демон ssh, не говоря уже о том, чтобы знать пароль пользователя).Обычный обходной путь - вставка во временную ветку и затем слияние на другом компьютере - больше не требуется с этим патчем.
Новая опция:
updateInstead
Обновите рабочее дерево соответствующим образом, но откажитесь сделать это, если есть какие-либо незафиксированные изменения.
То есть:
git config receive.denyCurrentBranch updateInstead
Попробуйте следующую команду:
git config receive.denyCurrentBranch warn
Как я уже указывал в этом посте, как в gitku-подобной настройке git? отправка в рабочие репозитории немного опасна, так как любая незавершенная работа не учитывается толчком, и впоследствии довольно легко потерять любые незафиксированные изменения (в основном, рабочий HEAD может выйти из шага с рабочей ветвью HEAD). Git теперь имеет предупреждение, чтобы сообщить вам об этом - gory, подробности находятся по следующей ссылке:
мерзавец толчок к не голому хранилищу
Рекомендуется, чтобы ваш опубликованный репозиторий был пустым репозиторием, у которого нет извлеченного дерева. Голые репозитории создаются с использованием опции "git clone --bare".
Так как ты побежал git init
на сервере вы создали рабочий директой, но я думаю, что вы хотите создать пустой репозиторий.
Используйте рабочий каталог, когда вы хотите добавлять, редактировать и удалять файлы в вашем проекте локально на вашем компьютере разработчика.
Если вы хотите поделиться своим проектом, создайте пустой репозиторий git init --bare project.git
на сервере, затем клонировать его на свою машину, и вы сможете нажать на него.
Если вы не хотите создавать новый сейчас, вы можете клонировать свой проект в новое голое хранилище с помощью git clone --bare project new-bare-project.git
Как на стороне клиента, так и на стороне сервера
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
Ответ VonC был полезен, но мне потребовалось некоторое время, чтобы понять, что для Windows команда будет следующей без равных.
d:\Repositories\repo.git>git config receive.denyCurrentBranch updateInstead
Моя версия Git для Windows v2.11.1