Voici la définition d'un dépôt nu de gitglossary :
Un référentiel nu est normalement un répertoire correctement nommé avec un suffixe .git qui n'a pas de copie extraite localement des fichiers sous contrôle de révision. Autrement dit, tous les fichiers d'administration et de contrôle de Git qui seraient normalement présents dans le sous-répertoire caché .git sont directement présents dans le répertoire repository.git à la place, et aucun autre fichier n'est présent et extrait. Habituellement, les éditeurs de référentiels publics mettent à disposition des référentiels nus.
Je suis arrivé ici parce que je jouais avec un "dépôt local" et je voulais pouvoir faire ce que je voulais comme s'il s'agissait d'un dépôt distant. Je jouais juste, essayant d'en apprendre plus sur Git. Je suppose que c'est la situation pour quiconque veut lire cette réponse.
J'aimerais d'avis d'experts ou des contre-exemples, mais il semble que (après en fouillant dans un code source git que j'ai trouvé) tout simplement aller au fichier spécifique .git/config
et le réglage du noyau attribut nu à vrai , git vous permettra de faire tout que vous souhaitez effectuer à distance sur le référentiel. C'est-à-dire que les lignes suivantes doivent exister dans .git/config
:
[core]
...
bare = true
...
(C'est à peu près ce que git config --bool core.bare true
fera la commande , ce qui est probablement recommandé pour faire face à des situations plus compliquées)
Ma justification de cette affirmation est que, dans le code source de git, il semble y avoir deux façons différentes de tester si un dépôt est nu ou non. L'une consiste à vérifier une variable globale is_bare_repository_cfg
. Ce paramètre est défini lors d'une phase de configuration de l'exécution et reflète la valeur trouvée dans le .git/config
fichier. L'autre est une fonction is_bare_repository()
. Voici la définition de cette fonction:
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();
}
Je n'ai pas le temps ni l'expertise pour le dire avec une confiance absolue, mais pour autant que je sache si vous avez bare
défini l' attribut true
dans .git/config
, cela devrait toujours revenir 1
. Le reste de la fonction concerne probablement la situation suivante:
- core.bare n'est pas défini (c'est-à-dire ni vrai ni faux)
- Il n'y a pas d'arbre de travail (c'est-à-dire que le sous-répertoire .git est le répertoire principal)
Je l'expérimenterai quand je le pourrai plus tard, mais cela semblerait indiquer que la définition de core.bare = true équivaut à supprimer core.bare du fichier de configuration et à configurer correctement les répertoires.
Quoi qu'il en soit, la définition de core.bare = true vous permettra certainement de pousser, mais je ne suis pas sûr si la présence de fichiers de projet entraînera le dysfonctionnement d'autres opérations. C'est intéressant et je suppose instructif de pousser vers le référentiel et de voir ce qui s'est passé localement (c'est-à-dire exécuter git status
et donner un sens aux résultats).
mv repo/.git repo.git; rm -rf repo