tag - no puede ingresar al repositorio de git
git push tag (8)
Esto es lo que he hecho hasta ahora y diré que este procedimiento funcionó en Ubuntu 9.10, que tal vez tenía una versión diferente de 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
Cuando intento sacar esto, aparece este mensaje de error:
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
Ahora es posible recurrir a un repositorio no desnudo (Git 2.3.0 febrero de 2015).
¡Y es posible cuando está presionando la rama que actualmente se está revisando en el repositorio remoto!
Ver commit 1404bcb por Johannes Schindelin ( dscho
) :
receive-pack
: agregue otra opción parareceive.denyCurrentBranch
Al sincronizar directorios de trabajo, puede ser útil actualizar la rama actual mediante ''
push
'' en lugar de ''pull
'', por ejemplo, cuando se inserta una solución desde dentro de una VM o cuando se aplica una solución en la máquina del usuario (donde el desarrollador está no tiene la libertad de instalar un daemon ssh y mucho menos saber la contraseña del usuario).La solución común - empujar en una rama temporal y luego fusionarse en la otra máquina - ya no es necesaria con este parche.
La nueva opción es:
updateInstead
Actualice el árbol de trabajo en consecuencia, pero se niega a hacerlo si hay cambios no confirmados.
Es decir:
git config receive.denyCurrentBranch updateInstead
Como ejecutó git init
en el servidor, creó una dirección de trabajo, pero creo que en su lugar quería hacer un repositorio vacío .
Use un directorio de trabajo cuando desee agregar, editar y eliminar archivos en su proyecto localmente en su máquina de desarrollo.
Cuando desee compartir su proyecto, git init --bare project.git
un repositorio git init --bare project.git
mediante git init --bare project.git
en el servidor, luego git init --bare project.git
en su máquina y podrá acceder a él.
Si no quieres crear uno nuevo ahora puedes clonar tu proyecto en un nuevo repositorio desnudo por git clone --bare project new-bare-project.git
Como señalé en este post de heroku como configuración de git? empujar hacia repositorios de trabajo es un poco peligroso ya que cualquier trabajo en progreso no se toma en cuenta por el empuje, y es bastante fácil perder cualquier cambio no confirmado (básicamente, el CABEZAL de trabajo puede desfasar con la rama de trabajo CABEZA). Git ahora tiene una advertencia para informarle sobre esto: los detalles sangrientos están en el siguiente enlace:
git push a un repositorio no desnudo
Se recomienda que su repositorio publicado sea un repositorio simple que no tenga un árbol desprotegido. Los repos sin formato se crean utilizando la opción "git clone --bare".
En el lado del servidor, haz esto:
git config receive.denyCurrentBranch ignore
Entonces puedes presionar en local.
Esto debería ayudar: empujar a un repositorio git no funciona
La respuesta de VonC fue útil, pero me tomó un tiempo darme cuenta de que para Windows el comando sería el siguiente sin los iguales.
d:/Repositories/repo.git>git config receive.denyCurrentBranch updateInstead
Mi versión es Git para Windows v2.11.1
Pruebe el siguiente comando:
git config receive.denyCurrentBranch warn
Tanto del lado del cliente como del servidor
d:/Repositories/repo.git>git config receive.denyCurrentBranch updateInstead
No funcionó para mí. Tanto la versión del cliente como la del servidor son 2.16.2.windows.1
Agregué esto a // File-server / projectFolder / .git / config
[receive]
denyCurrentBranch = updateInstead
Esto funciona para Windows. No necesita init --bare