2009-08-28 15 views
6

Esto puede ser una pregunta sobre convenciones, mejores prácticas y/o preferencias personales:Usando git right (para el código del sitio web del repositorio privado)?

Así que soy un git noob, y no vale la pena compartir el código de mi sitio web, así que no estoy usando github o similares.

Sabiendo que git no necesita un repositorio central, pensé: genial, mi estación de trabajo y el servidor son los dos nodos, y solo enviaré los cambios de mi estación de trabajo al servidor.

Cuando empecé, el código era sólo en el servidor, por lo que:

  1. en el servidor: git init
  2. En la estación de trabajo: git clone [email protected]:path/to/repo
  3. Alegremente hizo cambios y se comprometió a nivel local
  4. En la estación de trabajo : git push [email protected]:path/to/repo

Obtuve resultados extraños. Los archivos que tenía agregaron localmente aparecieron en el servidor, pero los cambios en los archivos existentes no se reflejaron.

Luego leo una advertencia que me impide empujar a una sucursal remota que está desprotegida. Por lo que la nueva configuración es:

  1. Ran git clone --bare para hacer un repositorio desnudo
  2. Ponga el repositorio desnudo en mi servidor (~/repos/mysite.git - no una carpeta pública)
  3. Código local y: git push [email protected]:repos/mysite.git
  4. En el servidor : git pull ~/repos/mysite.git para obtener la última

¿Es esta correcta? ¿Es lógico? ¿Es lo que harías?

Respuesta

4

Su nueva configuración es la forma correcta de configurar un repositorio de servidor.

Consulte el capítulo Getting Git on a Server en el libro Pro Git para obtener más información.

+1

guh un capítulo específicamente para lo que estaba haciendo. Leeré Pro Git antes de hacer más preguntas git ... – EMiller

+0

Es una buena lectura. Que te diviertas :) – spatz

5

Independientemente de lo que elija hacer, es posible que desee automatizarlo un poco usando git hooks. Los ganchos son un conjunto de scripts que git ejecutará en ciertos eventos. El más relevante aquí es el enlace posterior a la actualización (en el repositorio del servidor). En un repositorio normal, los ganchos están en .git/hooks, por lo que en un repositorio simple están en hooks. Ese directorio probablemente contenga muchos ejemplos de scripts de gancho (llamados *.sample en versiones recientes). Tendrá que hacer una llamada post-update, que contenga las acciones que desee realizar una vez que se haya enviado el servidor (por ejemplo, cd al otro repositorio y ejecute la extracción).

En cuanto a los detalles de su solución ... está haciendo lo correcto al no ingresar en una sucursal desprotegida. El único problema posible con lo que estás haciendo es que el servidor termina con una copia extra del repositorio que solo se utiliza para verificar los archivos.Si decide que no le gusta este desperdicio de espacio en disco, estoy bastante seguro de que esto sería hacer lo que quiera:

git --work-tree=/path/to/checkout-dir --bare reset --hard 

Esto le dice a Git para restablecer el estado adecuado, utilizando la ruta dada como el trabajo directorio, pero teniendo en cuenta que el repositorio es realmente simple. No he hecho este tipo de cosas antes, pero parece funcionar en mi pequeña prueba.

Una nota: si decide que desea insertar en una rama extraída de todos modos (solo si el repositorio en el servidor nunca se utilizará para nada más que empujar y retirar una copia de los archivos) .. . Si está completamente seguro de esto, puede configurar receive.denyCurrentBranch en false en gitconfig del servidor, ejecute git reset --hard en el servidor, forzando su directorio de trabajo al estado en el que debería estar.

2

Lea "Why not not" ¿Veo cambios en el repositorio remoto después de "git push"? " en GitFaq (en Wiki Git).

Cuestiones relacionadas