2010-10-11 21 views
5

No estoy seguro de si esto debería ir aquí, o en superusuario (ya que parece pertenecer a ambos temas), así que lo he puesto aquí, si no es apropiado, Iré a preguntar sobre superusuario.Dar acceso de solo lectura a un repositorio git

De todos modos, tengo un repositorio git que no puede ser completamente de código abierto (de lo contrario lo pondría en github y listo), y tengo un servidor que tengo acceso ssh (pero no acceso de superusuario)) a, este servidor tiene todos los binarios git que ya están en él. Necesito darle a alguien acceso de solo lectura a este git-repo (o al menos acceso de solo lectura a algunas de las sucursales, aunque me imagino que eso es mucho más difícil).

Actualmente estoy usando ssh para enviar y sondear mi repositorio de git local a este servidor. ¿Hay alguna manera de darle a otra persona acceso de solo lectura al servidor? (Supongo que estoy de acuerdo con que ambos tengamos acceso de escritura al repositorio, aunque no estoy seguro de cómo hacerlo con permisos de Unix, ya que no tengo la capacidad de crear nuevos grupos de Unix ya que no tengo superusuario permisos).

Gracias por su ayuda.

+0

echa un vistazo a http://stackoverflow.com/questions/1662205/how-to-make-a-git-repository-read-only - parece que la mejor opción es usar el git daemon, pero ymmv. – cbeer

+2

Tal vez exagerado para su caso, pero ¿ha mirado a [gitolite] (http://github.com/sitaramc/gitolite)? – bstpierre

+0

Ya ...Lo hice, parecía que había tantas maneras diferentes en que podría haber arruinado mi cuenta en el servidor (porque tendría que usar el método de acceso no root), así que preferiría no hacerlo. –

Respuesta

3

Desea utilizar el protocolo git. http://www.kernel.org/pub/software/scm/git/docs/git-daemon.html

Será público para todos, lo que puede no ser lo que quieres, pero nadie podrá hacer un empujón sobre git: //.

Puede controlar a qué ramas pueden acceder presionando solo las ramas a las que desea acceder.
Haría esto al tener un clon por separado de su repositorio privado habilitado para ssh, y luego agregar eso como un control remoto. Luego puede hacer git push pub public-branch, entonces private-branch no será accesible desde esa ubicación.

+0

Ya, estoy pensando que esta es la mejor (o al menos la más fácil) forma de hacerlo. Acabo de ofuscar la ruta del directorio con esto: projectname-small-set-of-random-symbols, que creo que estará bien, ya que no soy un gran objetivo, y el directorio principal no es legible en todo el mundo. Aunque tengo un problema. Aunque necesito un poco de ayuda. Ya había hecho la rama, y ​​la empujé al servidor (la versión desnuda) (la renombré como se menciona arriba). Luego puse el archivo git-daemon-export-ok y ejecuté el daemon git. El problema es que tengo que mantener a git daemon en ejecución para mantener la ... –

+0

... rama públicamente disponible, y se detiene cada vez que cierro las conexiones, etc. Entonces, ¿hay alguna manera (sin acceso de superusuario) que yo puede configurarlo para que funcione todo el tiempo? Gracias –

+2

Intenta ejecutar 'nohup git daemon &'. Esto hará que se ejecute en segundo plano y no se cerrará cuando desconectes tu sesión ssh (sin hangup). – jonescb

0

Puede tener repositorios privados en Github ... solo cuestan unos pocos dólares al mes, según la cantidad de desarrolladores. Puede controlar el acceso MUY fácil desde allí.

+0

MUY fácil ... gran solución :) –

1

En .shsh/authorized_keys puede especificar un comando que siempre se ejecuta cuando se utiliza una clave pública determinada para iniciar sesión. Probablemente podría establecer esto en git-upload-pack /path/to/repo.git y git pull simplemente podría funcionar. Es muy posible que haya trampas de seguridad no obvias con este enfoque.

Consulte the sshd manual page para conocer el formato del archivo authorized_keys.

+0

Hmm ... parece que mi carpeta .ssh en realidad no tiene un archivo authorized_keys, solo un known_hosts. –

+0

Puede crear uno con múltiples claves públicas. –

1

Puede configurar ACL para administrar los derechos en sus repositorios ... Hay muchos detalles sobre este tema en el Pro Git book. Y de acuerdo con lo que he leído hasta ahora, sí, puedes aplicar esto en sucursales selectas si quieres.

1

Puede utilizar uno de herramientas para la gestión de repositorios Git como gitosis (en Python) o gitolite (en Perl), que permiten el control de acceso a los repositorios (o puede utilizar su propia solución, de forma similar al ejemplo update-paranoid actualización gancho).

La otra solución sería usar uno de git hosting sites que ofrezca repositorios privados (por ejemplo, Codaset proporciona 1 (semi) repositorio privado en plan libre, con 200 MB de espacio de disco).

Cuestiones relacionadas