gui - Git y desagradable "error: no se puede bloquear la información existente/refs fatal"
git repository (12)
Actualizar:
Es posible que necesite editar su archivo ~ / .netrc:
https://bugs.launchpad.net/ubuntu/+source/git-core/+bug/293553
Respuesta original:
¿Por qué inhabilitaste ssl? Creo que esto podría tener que ver con que no puedas presionar a través de https. Lo volvería a intentar e intentaré presionar de nuevo:
git config –global http.sslVerify true
Después de clonar desde el repositorio remoto de git (en bettercodes) hice algunos cambios, me comprometí y traté de impulsar:
git push origin master
Errores con:
error: no se puede bloquear la información existente / refs
fatal: git-http-push falló
Este caso se refiere al repositorio ya existente.
Lo que hice antes, fue:
-
git config –global http.sslVerify false
-
git init
-
git remote add [url]
-
git clone
- cambiar los datos
-
git commit
En ''bettercodes'' no tengo acceso al registro de git.
Estoy usando Windows. El error detallado fue:
C:/MyWorkStuff/Projects/Ruby/MyProject/>git push origin master
Unable to create branch path https://user:[email protected]/myproject/info/
error: cannot lock existing info/refs
fatal: git-http-push failed
Cloné antes, luego cambié el código y me comprometí.
Así es como funciona para mí.
- busque el archivo de bloqueo de Apache DAV en su servidor (por ejemplo, / var / lock / apache2 / DAVlock)
- bórralo
- recrearlo con permisos de escritura para el servidor web
- reiniciar el servidor web
Una alternativa aún más rápida:
- busque el archivo de bloqueo de Apache DAV en su servidor (por ejemplo, / var / lock / apache2 / DAVlock)
- Vacía el archivo:
cat /dev/null > /var/lock/apache2/DAVlock
- reiniciar el servidor web
En el caso de bettercodes.org, la solución es más poética: el único problema puede estar en los derechos asignados a los miembros del proyecto. ¡Los miembros simples no tienen derechos de escritura! Asegúrese de tener los derechos de Moderador o Administrador. Esto debe establecerse en bettercodes.org en la configuración del proyecto por un administrador, por supuesto.
En mi caso, una rama se movió a un subdirectorio y se llamó al directorio como la rama. Git estaba confundido por eso. Cuando eliminé la rama local (en SourceTree simplemente haciendo clic derecho en eliminar) todo funcionó como de costumbre.
Esto me sucedió cuando mi control remoto git (bitbucket.org) cambió su dirección IP. La solución rápida fue eliminar y volver a agregar el control remoto, luego todo funcionó como se esperaba. Si no está familiarizado con la forma de eliminar y volver a agregar un control remoto en git, estos son los pasos:
Copie la URL de git de SSH de su control remoto existente. Puede imprimirlo al terminal usando este comando:
git remote -v
que imprimirá algo como esto:
origin [email protected]:account-name/repo-name.git (fetch)
origin [email protected]:account-name/repo-name.git (push)
Retire el control remoto de su repositorio git local:
git remote rm origin
Agregue el control remoto a su repositorio local:
git remote add origin [email protected]:account-name/repo-name.git
Esto probablemente ya esté resuelto por ahora. Pero aquí está lo que funcionó para mí.
Ubicación:
Si el repositorio bloqueado está en el lado del servidor:
- ssh a su repositorio git en el servidor.
- Inicie sesión como usuario que tiene permisos para modificar el repositorio y navegar al repositorio en su servidor.
Si el repositorio bloqueado es local solamente:
- Abra la consola de git y navegue hasta el directorio del repositorio.
Ejecute este comando:
git update-server-info
Repare los permisos en su repositorio (remoto o local) si es necesario. En mi caso tuve que
chmod
a777
ychown
aapache:apache
Intente volver a presionar desde el repositorio local:
git push
Esto suena como un problema de permisos: ¿es posible que tenga dos ventanas abiertas, ejecutándose con derechos por separado? Tal vez verificar la propiedad de la carpeta .git.
Tal vez verifique si hay un bloqueo de archivo pendiente pendiente, tal vez use lsof para verificar, o el equivalente para su sistema operativo.
Lo arreglé haciendo lo siguiente
git branch --unset-upstream
rm .git/refs/remotes/origin/{branch}
git gc --prune=now
git branch --set-upstream-to=origin/{branch} {branch}
#or git push --set-upstream origin {branch}
git pull
Esto suponiendo que sus ramas locales y remotas están alineadas y que usted acaba de obtener el error de refs como no fatal.
Para mí esto funcionó:
git remote prune origin
Como esta respuesta parece ayudar a mucha gente, profundicé un poco en lo que realmente sucede aquí. Lo que esto hará es eliminar las referencias a las sucursales remotas en la carpeta .git/refs/remotes/origin
. Por lo tanto, esto no afectará a las sucursales locales y no cambiará nada a distancia, pero actualizará las referencias locales que tiene a las sucursales remotas. Parece que en algunos casos estas referencias pueden contener datos que Git no puede manejar correctamente.
Quieres intentar hacer:
git gc --prune=now
Ver https://www.kernel.org/pub/software/scm/git/docs/git-gc.html
Tuve este problema porque estaba en una sucursal que tenía un nombre similar a una sucursal río arriba. es decir, la rama ascendente se llamaba example-branch
y mi rama local se llamaba example-branch/backend
. La solución fue cambiar el nombre de mi sucursal local así:
git branch -m <new name goes here>
Verifique que usted (el proceso git en realidad) tenga acceso al archivo .git/info/refs
y este archivo no esté bloqueado por otro proceso.