Estoy en una instalación nueva de Linux Mint.
Recibo el siguiente error cuando intento enviar desde cualquier repositorio:
error: Malformed value for push.default: simple error: Must be one of nothing, matching, tracking or current. fatal: bad config file line 8 in /home/leng/.gitconfig fatal: Could not read from remote repository.
Esto es muy extraño, porque definitivamente tengo una versión que admite el comportamiento de empuje simple.
La salida de git --version
es git version 1.8.3.2
.
El contenido de ~/.gitconfig
:
[user] name = My Name email = MyEmail@website.com [color] ui = true [push] default = simple
Aquí es donde se pone espeluznante.
Si cambio el comportamiento a matching
(o a nothing
, tracking
o current
, para el caso), luego intento empujar, obtengo exactamente el mismo mensaje de error. ¿Cómo es eso posible? ¿Está almacenando en caché la configuración de alguna manera? Incluso he probado a reiniciar. Incluso intenté purgar GIT completamente del sistema (y eliminar ~/.gitconfig
) y luego reinstalarlo.
Si elimino la sección [push]
por completo del archivo .gitconfig (o si elimino el archivo por completo), luego trato de presionar, obtengo esto:
Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git) error: Malformed value for push.default: simple error: Must be one of nothing, matching, tracking or current. fatal: bad config file line 8 in /home/leng/.gitconfig fatal: Could not read from remote repository.
... por lo que parece reconocer que no he elegido un comportamiento de empuje, pero también decir que he elegido un comportamiento sin apoyo. ¿Qué demonios está pasando aquí?
Incluso recibo el error si ~/.gitconfig
completo.
¿Alguien me puede ayudar con esta brujería?
¡Gracias!
EDITAR:
Aquí hay un archivo .git/config
solicitado:
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = ssh://{my remote repo} fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master
Bien, lo arreglé, pero el método es brujería absoluta .
Traté de aislar el problema purgando GIT, eliminando el archivo de configuración, reinstalando GIT, luego creando un repositorio local desnudo, luego clonándolo y luego intentando empujar desde allí. Más o menos así:
sudo apt-get purge git-core rm -f ~/.gitconfig sudo apt-get install git-core cd /git mkdir foo cd foo git init --bare cd /var/www git clone /git/foo cd foo touch blah.txt git add -A git config --global user.name "Name" git config --global user.email "user@email.com" git commit -m "Blah" git push
... mismo mensaje de error exacto, sin cambios allí. (Todavía algo de brujería seria.)
Luego, eliminé uno de mis repositorios que no tiene un origen local (se conecta a su origen a través de SSH) y cloné el repositorio nuevamente después de eliminarlo (con un nuevo comando git clone ssh://...
).
Recibí un error del comando de clonación:
remote: Malformed value for push.default: simple remote: Must be one of nothing, matching, tracking or current.
¡Ajá! Ahora dice remote
en lugar de error
. Entonces el control remoto no admite este comportamiento. (Sin embargo, eso no explica por qué el error persiste en los repositorios solo locales con orígenes locales).
Entonces, entré por SSH en el servidor remoto y actualicé el git-core allí a la última versión, volví a intentar clonar el repositorio desde mi máquina local y funcionó.
Ahora, finalmente puedo git push
. Increíblemente, esto también lo arregló para que pueda pasar de /var/www/foo
completamente local a /git/foo
git push
completamente local (el repositorio básico de origen local). SSH en este servidor remoto y actualizándolo de alguna manera - WITCHCRAFT - corrigió el error de mi máquina local.
Por qué diablos los repositorios completamente locales se preocupan por la versión GIT de una máquina completamente diferente está ... más allá de mí. Qué completamente, completamente loco.
Recibí el mismo mensaje de error en git push
.
Para mí, resultó que el git del usuario remoto era una versión anterior (1.7.2.5), y recientemente actualicé el ~/.gitconfig
remoto para incluir:
[push] default = simple
La solución fue eliminar esta configuración de la configuración del control remoto.
Como parece que otras personas tienen este problema y encontré una solución AQUÍ , pensé en publicar la solución que funcionó para mí.
EN BREVE: La solución que encontré fue en esta página . Evidentemente, la mejor solución es actualizar a una versión más nueva de Git (si es posible). Sin embargo, esa no era una opción para mí. Desde una máquina local, escribí el siguiente comando:
git config -–global push.default upstream
Esto eliminó el Malformed value for push.default: simple
que había estado recibiendo. Sin embargo, no estoy del todo seguro de lo que hace upstream
.
MI CONTEXTO (a modo de comparación): tenía un repositorio vacío ( bare
) en una computadora remota, y tenía algunos repositorios en un par de estaciones de trabajo "locales". pull
del repositorio remoto, hago algo de trabajo y luego push
mi trabajo al repositorio remoto. Empujar/tirar se logró a través de SSH. La mayoría de las veces, mientras se trabaja en una máquina local, empujar/tirar daría como resultado el error descrito anteriormente.
En resumen, antes de la solución, tenía el siguiente archivo ~/.gitconfig
en la máquina remota:
[user] name = Foo Bar email = FooBarPerson@email.com [diff] external = /Users/foobar/bin/git-diff-cmd.sh [color] diff = auto status = auto branch = auto [push] default = simple
Después de ingresar el comando anterior, mi archivo ~/.gitconfig
en la máquina remota cambió a:
[user] name = Foo Bar email = FooBarPerson@email.com [diff] external = /Users/foobar/bin/git-diff-cmd.sh [color] diff = auto status = auto branch = auto [push] default = upstream
Información de versión:
Aquí hay otro sitio que puede ser útil para algunas personas: http://www.lorrin.org/blog/2011/10/03/argumentless-git-pull-and-git-push/comment-page-1/