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