Repositorio del tipo bare en GIT

GIT

Actualmente desarrollo aplicativos en linux y windows gracias al uso del Framework QT. Para gestionar el código fuente de mis aplicativos utilizo una máquina exclusiva como servidor. El software que utilizo para crear un repositorio basado en GIT es Gitorious, de ésta manera puedo tener dos clones del código del repositorio, uno para linux y otro para windows.

Las copias clones las tengo en mi laptop personal, en máquinas virtuales, conforme voy modificando el código lo actualizo en el servidor:

Después de que me he mudado de ciudad no he podido levantar mi servidor Gitorious. Así que lo que hice fue borrar la copia clon de windows y clonar la copia de GNU/Linux en windows, de ésta manera puedo modificar el código fuente en ambos sistemas operativos, y cuando tenga mi servidor Gitorius activo nuevamente podré actualizarlo desde la copia clon de GNU/Linux:

Estuve trabajando trabajando tranquilamente hasta que actualicé la versión de GIT. Al intentar hacer un git push desde la copia clon de windows hacia la copia clon de GNU/Linux salió el error "By default, updating the current branch in a non-bare repository is denied":

"C:\Archivos de programa\Git\bin\git.exe" push --recurse-submodules=check --progress "origin" master:master
Counting objects: 16, done.
Total 12 (delta 7), reused 0 (delta 0)
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'.
To Z:/Proyectos/katakuntur
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'Z:/Proyectos/katakuntur'
Done
Los repositorios GIT del tipo bare se utilizan en servidores GIT, no contienen ningún archivo del código fuente para ser editado. Para poder utilizar éstos repositorios deben ser clonados y funcionan como repositorios centrales.

Ésto ocurre debido a que en la versión 1.7 de GIT no se puede hacer PUSH a un origen remoto que no es un repositorio del tipo bare. Así que no me quedó otra de crear un repositorio bare a partir del clon de GNU/Linux :

git clone --bare repositorio_a_clonar repositorio_bare_a_crear

Finalmente la copia clon de windows debe apuntar al repositorio bare creado:

 

Así que por ahora mi servidor central será el repositorio bare(copia clon bare). Definitivamente ésta es una gran ventaja de GIT, en subversión no habría sido posible sin tener acceso al repositorio central primero.

Sistemas Operativos: