Ecco la definizione di un repository nudo da gitglossary :
Un repository nudo è normalmente una directory denominata in modo appropriato con un suffisso .git che non ha una copia estratta localmente di nessuno dei file sotto controllo di revisione. Cioè, tutti i file amministrativi e di controllo di Git che normalmente sarebbero presenti nella sottodirectory nascosta .git sono invece direttamente presenti nella directory repository.git e nessun altro file è presente e estratto. Di solito gli editori di repository pubblici rendono disponibili repository nudi.
Sono arrivato qui perché stavo giocando con un "repository locale" e volevo essere in grado di fare tutto quello che volevo come se fosse un repository remoto. Stavo solo giocando, provando a conoscere git. Presumo che questa sia la situazione per chiunque voglia leggere questa risposta.
Mi piacerebbe per una perizia o alcuni specifici esempi contrari, tuttavia sembra che (dopo rovistando tra qualche codice sorgente git che ho trovato) semplicemente andando al file .git/config
e l'impostazione del nucleo attributo nudo al vero , git vi permetterà di fare tutto ciò che vuoi fare da remoto sul repository. Vale a dire le seguenti righe dovrebbero esistere in .git/config
:
[core]
...
bare = true
...
(Questo è approssimativamente ciò che git config --bool core.bare true
farà il comando , che è probabilmente raccomandato per affrontare situazioni più complicate)
La mia giustificazione per questa affermazione è che, nel codice sorgente di git, sembrano esserci due modi diversi di testare se un repository è nudo o no. Uno è controllando una variabile globale is_bare_repository_cfg
. Questo viene impostato durante alcune fasi di configurazione dell'esecuzione e riflette il valore trovato nel .git/config
file. L'altra è una funzione is_bare_repository()
. Ecco la definizione di questa funzione:
int is_bare_repository(void)
{
/* if core.bare is not 'false', let's see if there is a work tree */
return is_bare_repository_cfg && !get_git_work_tree();
}
Non ho il tempo né le competenze per dirlo con assoluta sicurezza, ma per quanto ho potuto dire se avete la bare
set di attributi a true
in .git/config
, questo deve sempre tornare 1
. Il resto della funzione è probabilmente per la seguente situazione:
- core.bare non è definito (ovvero né vero né falso)
- Non esiste worktree (ovvero la sottodirectory .git è la directory principale)
Ci proverò quando potrò più tardi, ma questo sembrerebbe indicare che l'impostazione core.bare = true equivale a rimuovere core.bare dal file di configurazione e impostare correttamente le directory.
Ad ogni modo, l'impostazione di core.bare = true certamente ti consentirà di spingerlo verso di esso, ma non sono sicuro che la presenza di file di progetto causerà alcune altre operazioni. È interessante e suppongo che sia istruttivo spingere nel repository e vedere cosa è successo a livello locale (ovvero eseguire git status
e dare un senso ai risultati).
mv repo/.git repo.git; rm -rf repo