¿No es posible crear alguna subcarpeta en un repositorio en un servidor?
si lo hago:
git push origin dev/master
todo el trabajo encuentra
pero si lo hago
git push origin dev/sub/master
tengo esto:
error: 'refs/heads/dev/sub' exists; cannot create 'refs/heads/dev/sub/master'
Verifiqué con "git branch -r" y directamente con ssh, no hay una carpeta dev / sub ya creada.
que esta mal
Respuestas:
No es una carpeta que existe, es una rama . (Bueno, puede haber una carpeta / directorio involucrado en alguna parte, o tal vez no, ya que las referencias se "empaquetan" y dejan de existir como archivos dentro de los directorios).
b
existe una rama, nob/anything
se puede crear ninguna rama con nombre .dev/b
existe una rama ,dev/b/c
no se puede crear.Esta es una limitación interna de git. En este caso particular, el control remoto
origin
tiene una rama nombradadev/sub
(independientemente de si la tienes o no, lo importante es si el control remoto la tiene). Para crear, enorigin
, una rama nombradadev/sub/master
, primero debe eliminar la rama nombradadev/sub
enorigin
:(Por supuesto, eliminar esta rama puede eliminar algo importante allí, así que asegúrese de saber lo que está haciendo. En general, es posible que desee
git fetch origin
primero, capturar sudev/sub
como suorigin/dev/sub
. Luego puede hacer una rama local llamada quedev/renamed-sub
apunte a la misma confirmación , creedev/renamed-sub
en el control remoto, elimine el control remotodev/sub
y luego creedev/sub/master
en el control remoto).Si puede iniciar sesión en el control remoto (el sistema que
origin
está alojado), puede ir al repositorio de allí y simplemente cambiar el nombre de ladev/sub
sucursal local . (Según los comentarios a continuación, sospecho que allí también hay un script de implementación automática roto, que probablemente debería arreglarse para implementar solo ramas "implementables", en lugar de todo lo que se empuja. Pero solo estoy adivinando).fuente
release/1.1
yrelease/1.2
conrelease/1.1/hofix/prevent-upload-bork
&release/1.1/hotfix/assure-user-of-competence
, etc. Y el mensaje de error lo lleva a uno aquí (gracias), en lugar de indicar la limitación. Pero gracias por una explicación simple y clara.refs/tags/foo
yrefs/tags/foo/2
, por ejemplo, no podría hacer esto: necesitaría implementar su propio almacén de clave-valor. Creo que Git se verá obligado a implementar su propio almacén de valores clave de todos modos, pero no sé si eliminarán la limitación en ese momento.git checkout -- master
significa verificar el archivo nombradomaster
, en lugar del nombre de la rama).Estaba en un estado en el que ni siquiera podía buscar porque mi repositorio tenía información sobre ramas remotas no existentes que ni siquiera había revisado. Lo resolví ejecutando la combinación (gracias @torek) de:
git branch -r
enumerar copias locales de sucursales remotasgit ls-remote
enumerar ramas remotasgit fetch --prune origin
actualizar copias locales de sucursales remotas ( esto en realidad no me ayudó )git remote prune origin
eliminar información sobre ramas remotas eliminadas ( esto lo hizo )fuente
git remote prune origin
fue el único comando que ejecuté para resolver este estado de error. De hecho, mensaje engañoso: en mi caso, estaba tratando de presionar un "release / 2.6.0" y había eliminado todo el directorio 'refs / remotes / origin / release *', pero git seguía quejándoseerror: update_ref failed for ref 'refs/remotes/origin/release/2.6.0': cannot lock ref 'refs/remotes/origin/release/2.6.0': 'refs/remotes/origin/release' exists; cannot create 'refs/remotes/origin/release/2.6.0'
cada vez que intentaba push / pull / fetchPara mi ->
Error =
Solución =
fuente
La respuesta actualmente aceptada no me ayudó porque no tenía una referencia en el repositorio remoto para eliminar, ¡estaba puramente en mi local! Entonces, si se encuentra en esa situación, esto es lo que debe hacer:
Este es el problema al que me enfrentaba:
Probé la sugerencia de la respuesta aceptada pero obtuve esto:
Así que el árbitro ni siquiera existía en
origin
- claramente estaba merodeando en algún lugar de mi repositorio local. Entonces corrí$ git remote show me
, lo que produjo:Lo que luego dejó clara la solución:
Con esto, el problema desapareció:
fuente
git remote prune origin
solucionó. ¡Gracias!Prueba este comando para solucionarlo:
para ejecutar una serie de tareas de limpieza dentro del repositorio actual y eliminar objetos inalcanzables (invocando
git prune
ygit fsck --unreachable
).Leer más:
git help gc
ygit help prune
fuente
Si todo lo demás falla, verifique que su sistema de repositorios no tenga limitaciones para los nombres de las sucursales. En mi caso, solo podrías crear ramas que comiencen con
SD-<number>
. Cualquier otro nombre le daría solo un genérico:fuente
El script anterior registrará los errores en XXX-errors.log y los solucionará generando y ejecutando un XXX-exist-tags-delete.sh automáticamente desde el XXX-errors.log utilizando los siguientes comandos:
fuente
git remote prune origin
solucionó el problema para mífuente
Como usuario de Windows, ninguna de las soluciones hasta ahora me resolvió el problema. La razón por la que estaba viendo este error era porque (usando los nombres de las ramas del OP) estaba tratando de crear una rama
dev/sub
pero alguien más había creado una rama llamadaDev
y, como todos sabemos, Windows tiene un sistema de archivos que no distingue entre mayúsculas y minúsculas.Entonces, cuando Windows intentó desplegarse
dev/sub
, primero estaba tratando de crear la carpetadev
, pero no pudo porqueDev
ya existía.La solución fue eliminar la
Dev
sucursal de forma local y remota congit branch -d Dev && git push origin :Dev
. Agit pull
después de esto funcionó bien.Otra lección en el futuro, los nombres de las sucursales siempre deben estar en minúsculas para evitar este tipo de errores.
fuente
Entiendo que esto ya está respondido, pero no funcionó para mí. No me importaron los cambios locales, ya que ya estaba subido, pero tenía problemas para retroceder. En mi caso, cambiamos a medio camino entre tener "revisión" como rama al sistema de carpetas y tener la carpeta principal como "revisión".
- revisión ---- revisión / 1234_bug ---- revisión / 3456_bug
Entonces recibí el siguiente error:
Después de buscar errores similares, finalmente encontré una solución en un hilo de discusión aquí .
fuente
fuente
Cambie el nombre
dev/sub
adev/sub/something
, luego puede crear una ramadev/sub/master
.fuente