2009-07-28 20 views
15

¿Cómo se configura un repositorio de git donde algunos usuarios pueden ver ciertas partes del código fuente y otros usuarios pueden verlo todo? He visto muchas guías solo para darles a ciertos usuarios el acceso de confirmación, pero estas suponen que todos deberían tener acceso de lectura. También he oído hablar de gitosis, pero no estoy seguro de que sea compatible con esto y no ha tenido ningún compromiso en más de un año, así que creo que está muerto.¿Cómo configurar un repositorio de git donde diferentes usuarios solo pueden ver ciertas partes?

Respuesta

1

El protocolo git nativo no es compatible con esto; git asume en muchos lugares que todo el mundo tiene completa copia de todos del historial.

Dicho esto, una opción puede ser usar git-subtree para dividir parte del repositorio en su propio repositorio de subconjuntos, y volver a fusionar periódicamente.

2

Git no es compatible con el control de acceso en el repositorio. Usted puede sin embargo, implemente el control de acceso en el repositorio usted mismo, usando hooks, más específicamente el gancho update.

11

En resumen: no puede. Git es un sistema de control de versiones basado en instantáneas (al menos a nivel conceptual), no basado en conjuntos de cambios. Trata el proyecto (repositorio) como un todo. La historia es una historia de un proyecto, no una unión de historiales de un solo archivo (es más que unir historiales por archivo).

Uso de ganchos como update-paranoid gancho en contrib o VREFs mecanismo de gitolite, puede permitir o prohibir el acceso al repositorio, puede permitir o prohibir acceso a las ramas individuales. Incluso puede prohibir cualquier commit que cambie las cosas en el subdirectorio especificado. Pero el proyecto siempre se trata como un todo.

Bueno, hay una cosa que puede hacer: hacer un directorio que desea restringir el acceso a en submódulo, y restringir el acceso a este repositorio submódulo.

+0

Git no está basado en changeset ?? – orbfish

+3

No, no lo es. Commit object points a tree object que representa una instantánea del estado del repositorio. El conjunto de cambios es la diferencia entre dos árboles, de compromiso actual y principal. –

2

Jörg ya ha señalado que puede usar ganchos para hacer esto. Exactamente qué gancho (s) necesita depende de su configuración. Si desea los permisos en un repositorio que se envía, necesitará el gancho update como dijo. Sin embargo, si está en un repositorio en el que está trabajando (cometiendo y fusionándose), también necesitará los ganchos pre-commit y post-merge. El githooks manpage (Jörg vinculado a esto también) señala que de hecho hay un script en la sección contrib que demuestra una forma de hacerlo. Puedes obtener esto tomando un tarball git o sacándolo del repositorio gitweb de git: setgitperms.perl. Incluso si solo está utilizando el gancho de actualización, podría ser un modelo útil.

Cuestiones relacionadas