2009-12-02 13 views
18

che sto ricevendo l'avvertimentoCome posso verificare se un repository è nudo?

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 

che è (credo) un avvertimento che non è remota nudo. Tuttavia, intendevo che il remoto fosse nuda e che la directory (che ha il formato foo.git) non contenga una directory .git. Come posso verificare che sia nuda?

Ulteriori informazioni: il repository remoto si trova su un computer con git 1.5.4.3 e il repository locale ha git 1.6.3.3. Entrambe le macchine sono Ubuntu - quella locale è Karmic Koala, quella remota è una versione precedente.

+0

Inseriti i criteri che indica un repository è un nude uno – VonC

+3

'$ git rev-parse --is-bare-repository' - credito ** ** jberryman [si prega di upvote la sua risposta ] (http://stackoverflow.com/a/14734826/495132) –

risposta

23

Come si verifica che sia nudo?

Come menzionato nel answer below (upvoted) da jberryman, se si ha accesso al repository remoto, è possibile eseguire in esso:

git rev-parse --is-bare-repository 

E 'stato introdotto già nel commit 493c774, Git 1.5.3 (settembre 2007) e commit 7ae3df8 di Matthias Lederhofer (matled).

Quando il repository è a "stampa" nuda, altrimenti "falso".


Si potrebbe usare (da git config):

git config --add push.default current 

per specificare cosa si vuole spingere per impostazione predefinita.

o:

git config --global push.default matching 

se si dispone di molti repository.

corrente: spingere il ramo corrente in un ramo con lo stesso nome.

Controllare anche se l'avviso non è stato seguito da un messaggio di errore come in questo SO question.


Così il vostro repo destinazione può essere una nuda, ma, come ha detto in Sensible Git Refspecs:

Quando si esegue un git pull, fetch,push e alcuni altri è necessario specificare un refspec per la corrente repository.
A refspec descrive la mappatura tra il riferimento locale e quello remoto, in modo da poter premere (o tirare ecc.) La diramazione del ramo master e memorizzarla come diramazione del ramo di origine. Fondamentalmente è un modo di mappare i rami tra i repository.

Vedere anche "concept of bared shared repository in git".


Nota: se è vero che da Git1.6.3,:

"git push" in un ramo che è attualmente estratto saranno rifiutati per impostazione predefinita.
È possibile scegliere cosa dovrebbe accadere su tale spinta impostando la variabile di configurazione receive.denyCurrentBranch nel repository di ricezione.

Ma non penso che questo sia ciò che state vedendo in questo momento.


Come accennato in "all about "bare" repos -- what, why, and how to fix a non-bare push" (in basso)

per farne un "vero" nuda pronti contro termine, basta eliminare tutti i file ad eccezione .git, quindi mv .git/* .; rmdir .git.
Infine, modificare il file config e modificare bare = false in bare = true.

Così, se il repo destinazione è un file config con bare = true, è un pronti contro termine nudo.

+0

+1. Le parole magiche sono 'git config core.bare' –

3

Il messaggio che si ottiene indica che il repository remoto è vuoto (che non ha nulla a che fare con l'essere nudi). Quando si spinge in un repository remoto per la prima volta è necessario specificare che cosa spingere:

git push origin master 

Questo spingerà il tuo ramo master corrente al repository remoto. Le successive chiamate di git push spingono i rami "corrispondenti", cioè se c'è un ramo "master" nel repository remoto, il ramo "master" locale verrà inviato ad esso.

+0

Puoi anche dire" git push --all "per inviare tutto nella copia locale al telecomando. (Dopo la conversione da Subversion in 300+ repository git, sono dolorosamente familiare con questo comando!) – ebneter

+0

Ti stai riferendo al repository remoto nudo, o al ramo remoto del mio repository locale? –

+0

Neanche, questo è il punto. Il messaggio che stai ricevendo non ha nulla a che fare con uno qualsiasi dei tuoi repository essendo * bare *. Riguarda il tuo repository remoto che è * vuoto *, cioè non ci sono commit in esso, niente rami, niente niente. – Bombe

34

Non suona come quello era il problema, ma per rispondere in realtà la domanda che hai posto nel titolo: è possibile eseguire ...

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

... per query se un repo è nuda o no. Restituisce 'true' o 'false'.

+0

Grazie. Questo è quello di cui avevo bisogno. –

0

Aprire il file config nella directory .get e cercare bare = true.

0

provare

$ git config --get core.bare 
Problemi correlati