Réponse courte
Un référentiel nu est un référentiel git sans copie de travail, donc le contenu de .git est de niveau supérieur pour ce répertoire.
Utilisez un référentiel non nu pour travailler localement et un référentiel nu comme serveur / concentrateur central pour partager vos modifications avec d'autres personnes. Par exemple, lorsque vous créez un référentiel sur github.com, il est créé en tant que référentiel nu.
Donc, dans votre ordinateur:
git init
touch README
git add README
git commit -m "initial commit"
sur le serveur:
cd /srv/git/project
git init --bare
Puis sur le client, vous poussez:
git push username@server:/srv/git/project master
Vous pouvez ensuite vous enregistrer la saisie en l'ajoutant en tant que télécommande.
Le référentiel côté serveur va recevoir des validations via pull and push, et non en éditant des fichiers puis en les validant dans la machine serveur, c'est donc un référentiel nu.
Détails
Vous pouvez pousser vers un référentiel qui n'est pas un référentiel nu, et git découvrira qu'il y a un référentiel .git là-bas, mais comme la plupart des référentiels "hub" n'ont pas besoin d'une copie de travail, il est normal d'utiliser un référentiel nu pour et recommandé car il ne sert à rien d'avoir une copie de travail dans ce type de référentiels.
Cependant, si vous poussez vers un référentiel non nu, vous rendez la copie de travail incohérente, et git vous avertira:
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
Vous pouvez ignorer cet avertissement. Mais la configuration recommandée est la suivante: utilisez un référentiel non nu pour travailler localement et un référentiel nu comme concentrateur ou serveur central à partir duquel pousser et extraire.
Si vous souhaitez partager le travail directement avec la copie de travail d'un autre développeur, vous pouvez extraire les uns des autres référentiels au lieu de pousser.