Aqui está a definição de um repositório vazio do gitglossary :
Um repositório vazio normalmente é um diretório nomeado adequadamente com um sufixo .git que não possui uma cópia com check-out local de nenhum dos arquivos sob controle de revisão. Ou seja, todos os arquivos administrativos e de controle do Git que normalmente estariam presentes no subdiretório .git oculto estão diretamente presentes no diretório repository.git, e nenhum outro arquivo está presente e com check-out. Normalmente, os editores de repositórios públicos disponibilizam repositórios simples.
Cheguei aqui porque estava brincando com um "repositório local" e queria poder fazer o que quisesse como se fosse um repositório remoto. Eu estava apenas brincando, tentando aprender sobre o git. Assumirei que esta é a situação para quem quiser ler esta resposta.
Eu adoraria para peritagem ou alguns contra-exemplos específicos, no entanto, parece que (depois de vasculhar algum código fonte git que eu encontrei) simplesmente indo para o arquivo .git/config
e definindo o núcleo atributo desnudar a verdade , git vai deixar você fazer o que você deseja fazer no repositório remotamente. Ou seja, as seguintes linhas devem existir em .git/config
:
[core]
...
bare = true
...
(Isso é aproximadamente o que o comando git config --bool core.bare true
fará, o que provavelmente é recomendado para lidar com situações mais complicadas)
Minha justificativa para essa afirmação é que, no código-fonte git, parece haver duas maneiras diferentes de testar se um repositório está vazio ou não. Uma é verificar uma variável global is_bare_repository_cfg
. Isso é definido durante alguma fase de instalação da execução e reflete o valor encontrado no .git/config
arquivo. O outro é uma função is_bare_repository()
. Aqui está a definição desta função:
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();
}
Eu não tenho o tempo nem experiência para dizer isso com absoluta confiança, mas, tanto quanto eu poderia dizer se você tem o bare
conjunto de atributos para true
nos .git/config
, este deve sempre retornar 1
. O restante da função provavelmente é para a seguinte situação:
- core.bare é indefinido (isto é, nem verdadeiro nem falso)
- Não há árvore de trabalho (ou seja, o subdiretório .git é o diretório principal)
Vou experimentar com isso quando puder mais tarde, mas isso parece indicar que a configuração core.bare = true é equivalente a remover core.bare do arquivo de configuração e configurar os diretórios corretamente.
De qualquer forma, definir core.bare = true certamente permitirá que você faça isso, mas não tenho certeza se a presença de arquivos de projeto fará com que algumas outras operações dêem errado. É interessante e suponho instrutivo ir ao repositório e ver o que aconteceu localmente (ou seja, executar git status
e entender os resultados).
mv repo/.git repo.git; rm -rf repo