git se niega a buscar en la rama actual


Configuro un repositorio remoto y puedo enviar nuevos cambios a él, pero no puedo obtener de él, siempre recibo el mensaje de error (bastante críptico):

fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository
fatal: The remote end hung up unexpectedly

¿Qué significa? ¿Qué debo hacer para habilitar la recuperación?

(Tenga en cuenta que este repositorio remoto solo se utiliza como un repositorio de copia de seguridad, por lo que debería ser más o menos una copia exacta de mi repositorio local. Realmente no puedo entender por qué puedo empujar a ella pero no buscar de ella...)

Mi configuración se ve como:

[remote "origin"]
    url = ssh://blablablah
    fetch = +refs/*:refs/*
    mirror = true
 47
Author: torek, 2010-02-10

6 answers

Lo que estás tratando de hacer es buscar la rama en la que estás trabajando. Es decir, usted está en la rama master e intenta actualizarla. Eso no es posible. Es más común actualizar las ramas remotes/* y luego introducirlas en las locales. Lo que quieres es, tal vez,

git remote add otherrepo thehost:/the/path.git

Que configurará el repositorio para ser obtenido en remotes/otherrepo/*. git fetch otherrepo debería hacer el truco. Alternativamente, puede editar manualmente su .git/config y establecer fetch para el control remoto en algo como refs/heads/*:refs/remotes/otherrepo/*.

 26
Author: Michael Krelin - hacker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-10 12:45:16

En caso de que alguien encuentre esto porque específicamente quiere buscar en la rama actual, puede usar la bandera --update-head-ok. De los documentos :

- u
--update-head-ok
Por defecto, git fetch rechaza actualizar el head que corresponde a la rama actual. Esta bandera desactiva la comprobación. Esto es puramente para el uso interno de git pull para comunicarse con git fetch, y a menos que esté implementando su propia Porcelana, se supone que no debe usar se.

En algunos casos queremos implementar nuestros propios comandos de porcelana, por ejemplo, automatización y herramientas.

 40
Author: RobW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-06 05:17:03

También esto esto debería funcionar si está en master branch y quiere obtener la última prueba esto

Git pull origin master

 4
Author: Sai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 18:45:29

He tenido este problema cuando cloné un repositorio sin pensar en lugar de buscarlo, de modo que ambos repositorios eran maestros. Si no ha trabajado en el repositorio remoto, puede arreglar las cosas con los comandos básicos de git de la siguiente manera: (1) eliminar el repositorio remoto, (2) copiar el repositorio local donde estaba el remoto, (3) eliminar el local, y luego (4) configurar el repositorio local usando

git init; git fetch $REMOTE_GIT_REPOSITORY_URL  

Entonces git pull y git push harán las cosas correctas. La ventaja de evitar git remote, según la respuesta más eficiente y basada en principios de Michael, es que no necesitas pensar en la semántica de rastrear ramas.

 1
Author: Charles Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-14 12:14:04

¿Estás realmente escribiendo comandos de Git en la línea de comandos, o estás ejecutando el ejecutable de Git desde tu propio código?
Si lo estás ejecutando desde código, ¿estás seguro de que Git está tratando de buscar en el directorio local correcto?

Hay dos maneras posibles de hacer esto:

  1. Utilice las opciones proporcionadas por su lenguaje de programación para establecer el directorio de trabajo correcto antes de ejecutar Git
    (C # ejemplo , porque eso es lo que soy usando)

  2. Siempre pasa el parámetro -C a Git para especificar el directorio con el repositorio local.


Tengo un proyecto en el que estoy llamando al ejecutable Git desde código C#, y recibí el mismo mensaje de error como en la pregunta cuando accidentalmente olvidé configurar el -C parameter.

 0
Author: Christian Specht,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-08 19:12:51

Tengo el mismo problema. Primero trato de buscar usando este

git fetch [remote_name] [branch_name] 

Tuve el mismo problema que usted menciona. Después de eso probé este simple comando.

git pull [remote_name] [branch_name]

Note obtendrá y fusionará los cambios. Si está usando terminal, entonces abra el archivo, requiriendo confirmar el mensaje. Con este mensaje empujará la última confirmación. Pruebe este comando y finalmente podrá empujar la solicitud.

git push [remote_name] [branch_name_local] 
 -1
Author: Hafiz Shehbaz Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-11 06:10:19