2010-10-23 16 views
6

Tengo un repositorio remoto sin formato en el que he insertado una rama desde una máquina y llevado a otra máquina.Obteniendo el error 'receive.denyCurrentBranch' al presionar al repo de Git al descubierto

Realicé algunos cambios en la otra máquina, tratando de llevar esos cambios de regreso al repositorio remoto remoto, y aparece el error 'receive.denyCurrentBranch'.

¿Qué está pasando?

Esto no se supone que ocurra en un repositorio simple, no hay nada que se le haya prestado.

Las ramas como se ve desde la máquina 2 son:

Fix 
dev1 
dev2 
remotes/origin/HEAD -> origin/dev1 
remotes/origin/Fix 
remotes/origin/dev1 
remotes/origin/dev2 
remotes/origin/master 

'Fix' es la rama actual en ambas máquinas dev.

Cuando originalmente sacó esa rama en la máquina 2, lo hice:

git pull 
git checkout -b Fix origin/Fix 

soy sospechoso de la primera línea 'remotos' - Parece que la cabeza debe estar apuntando a mi rama actual, pero no es Creo que me falta algo, aquí ..

Actualización 1 Fusioné la rama 'Fix' a la rama dev1, y luego la pushd 'dev1' rama - que funcionaba bien (que estaba a punto de hacer eso, de todos modos).

Entonces, eso fue una solución, pero creo que el problema real era que HEAD no estaba vinculado a la rama actual ('Fix'), sino a una rama inactiva ('dev1'). No estoy seguro de cómo cambiar la cabeza en el repositorio remoto?

+0

Alguien por favor me corrija si me equivoco, pero no se supone que los repositorios desnudas para tener aún * * una cabeza.Eso indicaría que hay un directorio de trabajo, y HEAD apunta al commit del cual está basado ... ¿Está seguro de que el repositorio remoto está vacío? – Jonathan

+0

bastante cierto. No hay ningún proyecto desprotegido, y todos los archivos 'git' están en el directorio de nivel superior del repositorio. – rickb

+0

Jonathan, un repositorio de Git desnudo tiene un HEAD, pero no un espacio de trabajo predeterminado. Aún puede existir un espacio de trabajo para un repositorio vacío, pero debe informar a Git donde existe utilizando la variable de entorno 'GIT_WORK_TREE' o la opción de Git' -work-tree' y la ubicación del repositorio usando la variable de entorno 'GIT_DIR' o la opción' - -git-dir'. –

Respuesta

1

de la máquina 2, para cargar árbitros de repositorio local al repositorio remoto puede utilizar referencias explícitas en el comando push:

git push origin Fix:refs/heads/Fix 

Después de eso, en la máquina 1, se debe utilizar el comando FETCH para obtener las referencias remotas

git fetch 

En la lista de ramas (git rama -a), se encontró origen/Fix (o mandos a distancia/origen/Fix), puede navegador el contenido de la rama remoto directamente mediante el uso de el comando de pago:

git checkout origin/Fix 

Haga sus cambios, confirmar, etc ... y luego empujarlo utilizando el mismo comando que se utiliza en la máquina 2:

git push origin Fix:refs/heads/Fix 

Para rastrear la rama (esto es, crear una rama local "puntos" que la rama remoto, utilice el comando de checkout con --track opción):

git checkout --track -b Fix origin/Fix 

a continuación, se puede trabajar en local de la rama Fix y no empujar y tirar sin otros argumentos

git pull 
git commit 
git push 
Cuestiones relacionadas