lunes, 3 de octubre de 2016

Diferencia entre Git init y Git init --bare

Hace años ya que la guerra entre Git y Mercurial terminó y con el éxito de Github, este software de control de versiones se ha convertido en el más usado. Descentralizado y sin la necesidad de ejecutar ningún software en el servidor es muy cómodo para compartir código.

Si por el motivo que sea necesitar compartir código por el sistema de ficheros, nunca crees el repositorio central con Git init a secas, porque podrás hacer un clone del repositorio, pero cuando en intentes hacer un push aparecerá un mensaje como este:

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'.

Aunque como indica el mensaje, puedes saltare la advertencia configurando receive.denyCurrentBranch, lo recomendado es utilizar un repositorio bare.

El respositorio desnudo

Cuando hacemos Git init en un directorio se crea un directorio oculto .git que es donde se registran los cambios (commits, ramas, etiquetas, ...). Mientras que cuando hacemos Git init --bare, no se crea un directorio de trabajo, es decir, el directorio donde se ejecuta el comando contiene lo mismo que en un repositorio normal estaría en el directorio .git. Así que el repositorio que se vaya a utilizar como repositorio central siempre se debería crear con Git init –bare.

Lo cierto es que esta es una forma muy cómoda y rápida para compartir código con compañeros, tan solo hay que elegir un directorio que esté accesible por ellos, ya sea una carpeta compartida, una ruta de red o un una carpeta de dropbox (o similar). Todo simple, incluso la seguridad, ya que es a nivel de ficheros. Así que si pueden leer el directorio, pueden hacer clone, y si pueden escribir podrán hacer push.

No hay comentarios:

Publicar un comentario