Come dovrebbe funzionare "git add / **"?

3

Come indicato in questa domanda , mi sono imbattuto in un problema con git add /**... . Non riesco a trovare alcuna documentazione sul formato "/ **" delle specifiche del percorso, probabilmente perché è difficile da google.

Come è fatto per funzionare, esattamente? Sono particolarmente curioso che git add /\*\*.py possa funzionare ma git add /path/foo.py non lo farà - perché la barra è consentita all'inizio della stringa con la notazione **?

MODIFICA altre informazioni:

$ echo /**.py
/**.py

(Questa versione di Bash non supporta shopt -s globstar )

Ancora:

$ git add /**.py

aggiunge (in silenzio) un file tre directory sotto la directory corrente. A quanto pare, Git non fa affatto del male, quindi sono davvero curioso di sapere cosa sta succedendo qui.

Funzionano anche:

'git add '/**.py''
'git add /*******.py' 

Questo non:

'git add **.py'

Questo sembra aggiungere tutti i file ovunque nella directory di lavoro corrente.

(Bash 3.2.48 su OSX)

    
posta Steve Bennett 30.04.2012 - 07:57
fonte

1 risposta

6

I globi vengono risolti dalla shell quando si esegue tale comando, non da git . Prova echo /** per vedere a cosa si risolve. C'è un pattern glob ricursivo in Bash che usa questa sintassi, ma devi shopt -s globstar per abilitarlo (sembra essere disabilitato di default).

git add /\*\*.py prova ad aggiungere un file chiamato letteralmente **.py . Anche se è possibile creare un file di questo tipo, probabilmente non è destinato.

git /path/foo.py non ha senso - presumo tu intendessi git add /path/foo.py .

In tutti questi comandi, dovresti rimuovere la barra iniziale. Generalmente vuoi fare riferimento ai file in un repository dal loro percorso relativo a $PWD .

echo /**.py stamperà /**.py a meno che shopt nullglob sia off o tu abbia effettivamente un file .py nella directory root.

    
risposta data 30.04.2012 - 09:32
fonte

Leggi altre domande sui tag