2009-12-02 22 views
18

me estoy haciendo la advertencia¿Cómo verifico si un repositorio está vacío?

warning: You did not specify any refspecs to push, and the current remote 
warning: has not configured any push refspecs. The default action in this 
warning: case is to push all matching refspecs, that is, all branches 
warning: that exist both locally and remotely will be updated. This may 
warning: not necessarily be what you want to happen. 
warning: 
warning: You can specify what action you want to take in this case, and 
warning: avoid seeing this message again, by configuring 'push.default' to: 
warning: 'nothing' : Do not push anything 
warning: 'matching' : Push all matching branches (default) 
warning: 'tracking' : Push the current branch to whatever it is tracking 
warning: 'current' : Push the current branch 

que es (creo) una advertencia de que a distancia no está desnudo. Sin embargo, intenté que el control remoto estuviera desnudo, y el directorio (que está en el formulario foo.git) no tiene un directorio .git en él. ¿Cómo puedo verificar que esté vacío?

Información adicional: El repositorio remoto está en una computadora con git 1.5.4.3, y el repositorio local tiene git 1.6.3.3. Ambas máquinas son Ubuntu, la local es Karmic Koala, la remota es una versión anterior.

+0

acaba de añadir los criterios que indica un repositorio es un desnudo uno – VonC

+3

'$ git rev-parse --is-desnudo-repository' - de crédito ** ** jberryman [favor upvote su respuesta ] (http://stackoverflow.com/a/14734826/495132) –

Respuesta

23

¿Cómo verifico que está vacío?

Como se mencionó en la answer below (upvoted) por jberryman, si tiene acceso al repositorio remoto, puede ejecutar en él:

git rev-parse --is-bare-repository 

Fue introducido ya en commit 493c774, Git 1.5.3 (septiembre de 2007) y commit 7ae3df8 por Matthias Lederhofer (matled).

Cuando el repositorio está desnudo imprime "verdadero", de lo contrario "falso".


Usted podría utilizar (de git config):

git config --add push.default current 

para especificar lo que quiere empujar de forma predeterminada.

o:

git config --global push.default matching 

si tiene muchos repositorios.

actual: empuje la rama actual a una rama del mismo nombre.

Compruebe también si la advertencia no fue seguida de un mensaje de error como en este SO question.


Así que tu repositorio de destino puede haber una breve un, pero, como se dice en Sensible Git Refspecs:

Cuando haces un git pull, fetch,push y algunos otros es necesario que especifique una refspec para el actual repositorio.
A refspec describe la asignación entre la referencia local y la remota, por lo que puede empujar (o extraer, etc.) la cabeza de bifurcación maestra y almacenarla como su bifurcación de origen. Básicamente es una forma de mapear ramas entre repositorios.

Véase también "concept of bared shared repository in git".


Nota: es cierto que de Git1.6.3,:

"git push" en una rama que se comprueba Actualmente no serán rechazados por defecto.
Puede elegir lo que sucederá con un impulso de este tipo configurando la variable de configuración receive.denyCurrentBranch en el depósito de recepción.

Pero no creo que esto sea lo que estás viendo en este momento.


Como se mencionó en "all about "bare" repos -- what, why, and how to fix a non-bare push" (en la parte inferior)

para que sea una cesión temporal desnuda "real", acaba de borrar todos los archivos excepto .git, entonces mv .git/* .; rmdir .git.
Finalmente, edite el archivo llamado config y cambie bare = false por bare = true.

Así que si tu repositorio de destino tiene un archivo con configbare = true, es un acuerdo de recompra desnudo.

+0

+1. Las palabras mágicas son 'git config core.bare' –

3

El mensaje que está recibiendo significa que su repositorio remoto está vacío (lo cual no tiene nada que ver con ser descubierto). Al empujar en un repositorio remoto por primera vez, es necesario especificar qué empuje:

git push origin master 

Esto hará que su rama principal actual al repositorio remoto. Las invocaciones posteriores de git push presionarán ramas "coincidentes", es decir, si hay una rama "principal" en el repositorio remoto, se le insertará la rama "principal" local.

+0

También puede decir" git push --all "para insertar todo en la copia local en el control remoto. (Después de convertirme de Subversion en más de 300 repositorios de git, estoy familiarizado con este comando). – ebneter

+0

¿Se refiere al depósito remoto que está vacío o a la rama remota de mi repositorio local? –

+0

Ninguno, ese es el punto. El mensaje que está recibiendo no tiene nada que ver con que ninguno de sus repositorios esté * descubierto *. Se trata de que su repositorio remoto esté * vacío *, es decir, no haya compromisos en él, ni ramas, ni nada. – Bombe

34

No suena como que era su problema, pero en realidad para responder a la pregunta que hizo en el título: puede ejecutar ...

$ git rev-parse --is-bare-repository 

... para consultar si un acuerdo de recompra está desnudo o no. Devuelve 'verdadero' o 'falso'.

+0

Gracias. Esto es lo que necesitaba. –

0

Abra el archivo config en el directorio .get y busque bare = true.

0

tratar

$ git config --get core.bare 
Cuestiones relacionadas