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