Respuesta corta
Un repositorio simple es un repositorio git sin una copia de trabajo, por lo tanto, el contenido de .git es de nivel superior para ese directorio.
Use un repositorio no desnudo para trabajar localmente y un repositorio desnudo como servidor / concentrador central para compartir sus cambios con otras personas. Por ejemplo, cuando crea un repositorio en github.com, se crea como un repositorio simple.
Entonces, en tu computadora:
git init
touch README
git add README
git commit -m "initial commit"
en el servidor:
cd /srv/git/project
git init --bare
Luego, en el cliente, empuja:
git push username@server:/srv/git/project master
Luego puede ahorrarse la escritura agregándola como control remoto.
El repositorio en el lado del servidor obtendrá confirmaciones mediante extracción y empuje, y no editando archivos y luego confirmándolos en la máquina del servidor, por lo tanto, es un repositorio desnudo.
Detalles
Puede pasar a un repositorio que no sea un repositorio simple, y git descubrirá que hay un repositorio .git allí, pero como la mayoría de los repositorios "hub" no necesitan una copia de trabajo, es normal usar un repositorio simple para y recomendado ya que no tiene sentido tener una copia de trabajo en este tipo de repositorios.
Sin embargo, si empuja a un repositorio no desnudo, está haciendo que la copia de trabajo sea inconsistente, y git le advertirá:
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'.
Puedes saltarte esta advertencia. Pero la configuración recomendada es: use un repositorio no desnudo para trabajar localmente y un repositorio desnudo como un concentrador o servidor central para empujar y extraer.
Si desea compartir el trabajo directamente con la copia de trabajo de otro desarrollador, puede extraer los depósitos de cada uno en lugar de presionar.