git - remote - refusing to update checked out branch refs heads master
git push falla: `se niega a actualizar la rama desprotegida: refs/heads/master` (6)
Cree el repositorio de origen (local) como un repositorio simple (es decir, git init --bare) o revise una rama que no sea maestra.
Quiero guardar mis modificaciones locales en la configuración de JBoss en git. Para esto, he configurado la siguiente estructura:
lrwxrwxrwx 1 jboss jboss 19 Jan 24 11:53 current -> jboss-as-7.1.0.CR1b
drwxr-xr-x 11 jboss jboss 4096 Jan 24 12:13 jboss-as-7.1.0.CR1b
-rw-r--r-- 1 jboss jboss 108211143 Jan 23 16:02 jboss-as-7.1.0.CR1b.tar.gz
drwxr-xr-x 6 jboss jboss 4096 Jan 24 11:36 local
local
es el repositorio git que será el "origen". La idea es que quiera poder actualizar fácilmente mi distribución de JBoss una vez que haya una actualización disponible. Quiero almacenar todas las modificaciones locales en el paquete JBoss distribuido en git.
Entonces, actualmente hago esto:
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git init
Initialized empty Git repository in /opt/jboss/jboss-as-7.1.0.CR1b/.git/
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git remote add origin ../local/
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git pull origin master
From ../local
* branch master -> FETCH_HEAD
Hasta ahora todo bien, todas mis modificaciones locales están allí donde las quiero.
Sin embargo, una vez que tengo modificaciones locales y quiero enviarlas al repositorio local
, aparece un error:
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ vim standalone/configuration/standalone.xml
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git commit -a -m "renamed database to project2_core, to distinguish from other projects"
[master 3e54f34] renamed database to project2_core, to distinguish from other projects
Committer: jboss <jboss@tpl0.(none)>
1 files changed, 1 insertions(+), 1 deletions(-)
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git push origin master
Counting objects: 9, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 447 bytes, done.
Total 5 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
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 t
remote: error: ''ignore'' or ''warn'' in the remote repository to allow pushing int
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 som
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, se
remote: error: ''receive.denyCurrentBranch'' configuration variable to ''refuse''.
To ../local/
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to ''../local/''
¿Qué puedo hacer sobre esto? ¡Cualquier ayuda es muy apreciada!
EDITAR
Esto es lo que hice, que resolvió el problema:
cd ~/current
git init
vim .gitignore # set up a basic .gitignore file
git add .gitignore
git commit -a -m "initial commit"
cd ~/local
git clone ~/current
git branch -m master current # rename master branch to ''current''
git branch repo
git checkout repo
Ahora, la current
bifurcación en el directorio ~/local
está siempre actualizada, pero no está desactivada, por lo que puedo acceder a ella.
Empujar está diseñado para repos sin datos. Para repositorios no desnudos, debe utilizarlos.
Si desea forzar esto de todos modos, puede hacer lo que indica el mensaje de error y establecer receive.denyCurrentBranch para ignorar. SSH a la ubicación del repositorio al que está presionando y ejecutando:
git config receive.denyCurrentBranch ignore
La rama principal en el sitio remoto está desprotegida. Si tiene acceso al repositorio remoto, revise cualquier otra rama y luego presione desde su repositorio.
Me las arreglé para evitar esto tirando de ''local'' en ''actual'' en lugar de presionar ''actual'' desde ''local''.
O,
cuando inicialice su proyecto remoto, usando
git init --bare
Sé que esta es una pregunta bastante antigua, pero si vas con git init --bare, ten cuidado con ''GIT_DIR =.'' que se establecerá para un gancho de repo desnudo si usa ganchos para pagar el reintegro después de empujar. Use ''export GIT_DIR = .git'' en su rutina de gancho para que reconozca el repositorio en el que está ingresando ...