¿Puedes explicar qué está mal con este flujo de trabajo?
$ git init --bare bare
Initialized empty Git repository in /work/fun/git_experiments/bare/
$ git clone bare alice
Cloning into alice...
done.
warning: You appear to have cloned an empty repository.
$ cd alice/
$ touch a
$ git add a
$ git commit -m "Added a"
[master (root-commit) 70d52d4] Added a
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
$ git push
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '/work/fun/git_experiments/bare'
¿No git push
siempre empuja al repositorio desde el que cloné?
Respuestas:
Sí, el problema es que no hay confirmaciones en "desnudo". Este es un problema con la primera confirmación solamente, si crea los repositorios en el orden (desnudo, alice). Trata de hacerlo:
Esto solo se requeriría la primera vez. Luego debería funcionar normalmente.
Como señaló Chris Johnsen, no tendría este problema si su push.default estuviera personalizado. Me gusta upstream / tracking.
fuente
sudo apt-get upgrade git-core
ysudo apt-get upgrade git
creo que no es necesaria una actualización.git --version
devuelve 1.7.3.1. ¿Alguna idea de lo que falta? Admito que actualmenteapt-get update
no funciona para mí, pero no hace mucho tiempo.matching
; tal vez haspush.default
establecido enupstream
/tracking
(ocurrent
) en tu~/.gitconfig
?git push origin master:master
hacerlo explícito. Si eso no funciona, verifique en qué rama se encuentra:git branch
tal vez no haya realizado el primer compromiso o haya realizado ese compromiso en una rama que no sea master.Si tu:
empujará al repositorio desnudo.
Parece que tu repositorio de Alice no está rastreando correctamente.
Esto mostrará el control remoto y la rama predeterminados.
Si tu
Debería comenzar a rastrear ese control remoto y rama. No estoy seguro de si esa opción siempre ha estado en git.
fuente
La respuesta de esta pregunta relacionada me proporcionó la solución ... fue un simple error:
¡Recuerde comprometerse primero!
https://stackoverflow.com/a/7572252
Si aún no se ha comprometido con su repositorio local, no hay nada que presionar, pero el mensaje de error de Git que recibe no lo ayuda demasiado.
fuente
es la forma canónica de llevar todo a un nuevo repositorio desnudo.
Otra forma de hacer lo mismo es crear su nuevo repositorio no desnudo y luego hacer un clon desnudo con
luego usa
en el repositorio original (no desnudo).
fuente
git push --all ../test_repo
la URL del repositorio al final del comando;)Pruebe esto en su
alice
repositorio (antes de presionar):O configúrelo como predeterminado para su usuario con
git config --global …
.git push
el valor predeterminado es elorigin
repositorio (que normalmente es el repositorio desde el que clonó el repositorio actual), pero no lo hace de forma predeterminada para empujar la rama actual; de manera predeterminada, empuja solo las ramas que existen tanto en el repositorio de origen como en el repositorio de destino.La
push.default
variable de configuración (ver git-config (1) ) controla logit push
que empujará cuando no se le dé ningún argumento "refspec" (es decir, algo después de un nombre de repositorio). El valor predeterminado proporciona el comportamiento descrito anteriormente.Aquí hay posibles valores para
push.default
:nothing
Esto te obliga a proporcionar una "refspec".
matching
(el valor predeterminado)Esto empuja todas las ramas que existen tanto en el repositorio de origen como en el de destino.
Esto es completamente independiente de la rama que está actualmente desprotegida.
upstream
otracking
(Ambos valores significan lo mismo. El último se desaprobó para evitar confusiones con las ramas de "seguimiento remoto". El primero se introdujo en 1.7.4.2, por lo que tendrá que usar el último si está usando Git 1.7.3.1. )
Estos empujan la rama actual a la rama especificada por su configuración "ascendente".
current
Esto empuja la rama actual a la rama del mismo nombre en el repositorio de destino.
Estos dos últimos terminan siendo los mismos para casos comunes (por ejemplo, trabajando en un maestro local que usa origen / maestro como su flujo ascendente), pero son diferentes cuando la rama local tiene un nombre diferente de su rama "flujo ascendente":
Con
push.default
igual aupstream
(otracking
), el empuje iría aorigin
la rama maestra de ' . Cuando es igual acurrent
, el empuje iría aorigin
la rama de arreglo rápido .La
matching
configuración actualizarábare
el maestro en su escenario una vez que se haya establecido. Para establecerlo, puedes usargit push origin master
una vez.Sin embargo, la
upstream
configuración (o tal vezcurrent
) parece ser una mejor coincidencia para lo que espera que suceda, por lo que es posible que desee probarlo:(Nuevamente, si todavía está usando un Git antes de 1.7.4.2, deberá usarlo en
tracking
lugar deupstream
).fuente
Uso el cliente SourceTree git, y veo que su comando inicial commit / push es:
fuente