2011-10-09 14 views
7

cómo proteger un repositorio GIT de una aplicación completa (java) de tener un desarrollador que obtiene acceso a todo el código fuente en el repositorio. Sé que GIT es un control de versiones distribuido donde un desarrollador normalmente "descarga/recupera" el repositorio completo (!).Git: ¿Control de acceso? Cómo hacer en la práctica

Mis preguntas:

  1. Cómo sperate "módulos/piezas autónomas" en git? Por ejemplo, tener un módulo "capa de pago" y "capa de base de datos" y "capa de procesamiento", etc. abstraídos a través de API/Interfaces. ¿Tengo que configurar un repositorio git separado para todos esos módulos?

  2. ¿Hay alguna manera de tener un repositorio grande en GIT pero de alguna manera restringir el acceso por ruta? (Un cliente solo debe recibir los archivos a los que se le otorgó acceso)

  3. ¿Hay alguna manera de tener un repositorio grande en GIT pero de alguna manera restringir el acceso por Branch/Tags? (Un cliente solo debe recibir los archivos a los que se le otorgó acceso)

  4. Solo en caso de que alguien sepa esto también: ¿Hay alguna forma de eclipsar para chequear contenido de múltiples repositorios GIT en un proyecto y también (al revés)) ¿Comprometer el código dentro de un proyecto eclipse a múltiples repositorios GIT (basados ​​en nombres/rutas de paquetes o en el menú contextual)?

Muchas gracias Markus!

Respuesta

4
  1. Deberá dividir el código en múltiples repositorios git si desea control diferencial. No puedes controlar por ramas o lo que sea. Git descarga todo el repositorio. Período.

  2. Puede ver en los módulos de git un mecanismo para facilitar el trabajo con una cosa construida de múltiples repositorios de git.

+1

Esto no es * completamente * cierto: cosas como gitolite en realidad pueden hacer permisos por ref. Pero definitivamente no lo recomendaría como una forma de proteger la información confidencial. Apoyo la sugerencia de dividir el repositorio. – Cascabel

+0

@Jefromi: Sí, pero incluso gitolite solo puede controlar _write access_ en el nivel de rama/etiqueta/archivo/directorio; el acceso de lectura es siempre por repo (http://sitaramc.github.com/gitolite/index.html#gl_what). – sleske

2

1) y 4) depende en gran medida de su entorno de construcción. En git intentas tener repositorios separados por módulos, pero si la configuración del árbol de fuentes resulta dolorosa puedes usar submódulos de git (aunque no mucha gente les gusta) o la herramienta de repositorio que usa el proyecto de Android. Esto le permite tener un proyecto "paraguas" compuesto por más subproyectos. No estoy seguro si vale la pena por solo unos pocos componentes. Solo un git repo puede tener más sentido.

Para preguntas 2) y 3):

Para el acceso, recomendaría que cada sub-equipo mantiene su propio tenedor (repositorio) y revisa a alguien lo empujan al repositorio de integración. Si no le gusta este enfoque, puede usar los ganchos de git server para hacer cumplir las políticas de escritura de scripts.

En este caso, el gancho podría verificar quién está presionando, y la ruta o refspec (rama) contra algún archivo de configuración que describa la política. Esto está documentado aquí:

https://git-scm.com/book/en/v2/Customizing-Git-An-Example-Git-Enforced-Policy

Cuestiones relacionadas