Не может входить в репозиторий git

Это то, что я сделал до сих пор, и я скажу, что эта процедура работала над 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

Ответы

Ответ 1

На стороне сервера сделайте следующее:

git config receive.denyCurrentBranch ignore

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

Ответ 2

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

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

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

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

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

Новая опция:

updateInstead

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

То есть:

git config receive.denyCurrentBranch updateInstead

Ответ 3

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

git нажмите на не-голый репозиторий

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

Ответ 4

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

Используйте рабочий каталог, если вы хотите добавлять, редактировать и удалять файлы в своем проекте локально на своей машине dev.

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

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

Ответ 6

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

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

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