2010-09-07 19 views
5

Estoy usando una caja como un depósito compartido, y mi equipo se conecta a través de ssh.Forma correcta de compartir un git repo sobre ssh

Lo que hago es:

  1. Crear un repositorio git vacío en la máquina central git init

  2. Luego de cada estación de trabajo de hacer algo como git clone ssh://[email protected]/Users/user/Projects/my-project/.git/

Esto funciona muy bien, pero git sigue gritándome cada vez que hago un push algo como este:

alt text

¿Hay una mejor manera de compartir un acuerdo de recompra sobre ssh.

IMPORTANTE: Soy consciente de la existencia de gitosis y herramientas así, no quiero nada de lujo. Solo compartiendo un .git repo sobre ssh.

Gracias

Respuesta

8

en el ordenador central que debe hacer

git init --bare 

Debido a que no es necesario los archivos reales, sólo la cesión temporal.

Si el mensaje de advertencia se encuentra en un primer empujón a un acuerdo de recompra, y nadie lo ha tocado, lo hacen un

git push -f 

De lo contrario, este error significa que su esquema de rama no es correcto. NO deberías estar editando el nombre de rama/branchname. Usted quiere que su propia rama local llamado BRANCHNAME, a continuación, cuando esté listo para comprobar en el código que hace

git commit 
git pull 
git push 

Y va a empujar desde su BRANCHNAME local de origen/BRANCHNAME.

Editar

me gustaría ver el resultado de este comando en tu repositorio local:

git branch 

no debería ver el origen de la palabra o el nombre del servidor en cualquier lugar de la salida

+0

No, 'git branch' en mi máquina (no el repositorio "al descubierto") produce * maestro –

+0

¿Hay alguna manera de "arreglar" el cuadro central ahora que ya he creado el repositorio sin pasar --bare as ¿un argumento? : S –

+0

Su repositorio local debe tener todo lo que hace el repositorio remoto. Tíralo hacia abajo para asegurarte, luego solo quita el repositorio, crea uno vacío y vuelve a subir todo. – bwawok

3

Además de la solución de bwawok, deberá tener cuidado con los problemas de permisos. De forma predeterminada, cuando git crea archivos en nombre de un usuario, sus permisos provienen de umask del usuario y su grupo está configurado para el grupo predeterminado del usuario. Para las umasks comunes y los grupos predeterminados, esto romperá un repositorio compartido, ya que otros usuarios no podrán modificar dichos archivos.

Afortunadamente, Git se puede configurar para hacer lo correcto en esta situación: Tome un vistazo a la opción --shared a git init (o el ajuste de core.sharedRepository).La opción más simple es probablemente --shared=group, que otorga acceso de escritura a todos los usuarios en el grupo "git".