Desea que su repositorio central esté vacío. Digamos que la máquina en la que vive se llama static
:
$ ssh static git init --bare /git/myproject.git
Este repositorio básico es un punto de encuentro central: es para empujar hacia y desde, no para el desarrollo.
Realice su desarrollo en clones del repositorio central:
$ cd ~/src
$ git clone static:/git/myproject.git
Incluso si estás static
trabajando, trabaja en un clon:
$ git clone /git/myproject.git
Aunque eres el único que trabaja en este repositorio, adquiere el hábito de hacer tu trabajo en lo que la documentación de git llama ramas temáticas . Un beneficio inmediato de esto es que mantiene un maestro limpio , es decir, siempre puede extraerlo de su rama maestra central en el maestro de su repositorio local actual sin fusión.
Por ejemplo:
$ git checkout -b fix-bug-in-foo
$ hack
$ git add file.c file.h
$ git commit -m "Fix ..."
Puede que no parezca un gran problema, pero le da la libertad de dejar el proyecto como se representa en esa rama en un estado parcialmente cocido, o si su idea genial resulta ser un fracaso, puede tirar fácilmente esa rama sin rompiendo cualquier otra cosa en su proyecto que ya esté trabajando en otras ramas. ¡Infinitos mulligans gratis!
Tal vez te vayas a casa esa noche y agregues una nueva característica. A la mañana siguiente, tú
$ git checkout master
$ git pull
para actualizar su maestro local para reflejar lo que hay en el repositorio central.
Pero ahora digamos que ha solucionado el error foo y está listo para incluirlo en su rama maestra. Primero quieres integrarlo con los cambios de anoche:
$ git checkout fix-bug-in-foo
$ git rebase master
El rebase
comando hace que su repositorio parezca que solucionó el error foo además de la nueva característica de la noche anterior. (Esto es algo así como svn update
, pero más flexible y poderoso).
Ahora para llevarlo a su maestro central:
$ git checkout master
$ git merge fix-bug-in-foo
$ git push origin master
Hemos tratado al maestro como especial, pero eso es solo convencional. Puede compartir el trabajo en diferentes ramas de diferentes repositorios a través del repositorio git con la static
misma facilidad.