Git: evitar que los usuarios externos accedan a twigs específicas

Tengo que lidiar con la siguiente situación: digamos que tenemos un proyecto y usamos git para este propósito. Los usuarios externos deberían estar disponibles para trabajar en partes del código (complementos, …) que no se ven directamente afectadas por los cambios internos. Por lo tanto, dado que git no puede eliminar los privilegios de lectura, ¿qué piensas de este procedimiento?

  1. Crea dos repositorys repo_int, repo_ext. Repo_ext con solo una twig llamada "compartida".
  2. Deje que el desarrollador externo empuje a esa twig
  3. Utilice el clon local para arrastrar y enviar a la segunda twig interna del desarrollador

Esto podría hacerse de la siguiente manera:

crear repositorys desnudos

$ mkdir ~/remotes/repo_int.git $ cd ~/remotes/repo_int.git && git init --bare $ mkdir ~/remotes/repo_ext.git $ cd ~/remotes/repo_ext.git && git init --bare 

crear nuevo repository de locale

 $ cd /path/to/my/project && git init 

crea una twig compartida y echa un vistazo

 $ git checkout -b shanetworking 

agregar controles remotos repo_ext y repo_int

 $ git remote add -t shanetworking repo_ext ~/remotes/repo_ext.git $ git remote add repo_int ~/remotes/repo_int.git 

hacer un empuje inicial

 $ git remote push repo_ext shanetworking && git remote push repo_int * 

establecer HEAD desde repo_ext hasta la twig compartida

 $ git symbolic-ref HEAD refs/heads/shanetworking 

para get acceso externo a repo_ext:

 $ git clone ~/remotes/repo_ext.git 

hacer algunos cambios y empujar las cosas

 $ git push origin shanetworking 

en el repository interno realice un checkout de sucursal y use los cambios, p. ej. para combinar o seleccionar

 $ git clone ~/remotes/remote_int $ git checkout -b shanetworking repo_ext/shanetworking ... 

¿Qué dirías? ¿Es esta una forma recomendable y segura de manejar esto? Escuché sobre "gerrit", que es una herramienta de revisión de código con una administración de derechos de usuario de gran scope. ¿Sería posible lidiar con el problema usando esta herramienta?

¡Muchas gracias!

Git está construido como un sistema de control de versiones descentralizado. Eso significa que puede fácilmente empujar y tirar commits entre diferentes repositorys.

Simplemente cree un repository público y un repository privado, y haga que el repository público solo saque twigs específicas del privado. Cuando se envía un compromiso a una de las twigs públicas en cualquiera de los repositorys, debe usar un gancho posterior a la recepción para pasarlo también al otro.

De hecho, esto no es más que la creación de sucursales locales en su repository local. Usted es el único que puede trabajar con sus sucursales locales, a less que permita que alguien se las quite.