Solución:
Hay más de una forma posible de hacer esto.
-
Si cada uno de sus usuarios tiene una cuenta shell (quizás limitada) y cada uno de ellos accede a los repositorios de git a través de su propia cuenta, puede usar permisos del sistema de archivos para controlar el acceso SSH a los repositorios de git. En Unix esos serían permisos de escritura en directorios, quizás con la ayuda de la creación de un grupo y permisos específicos para un grupo (con el “ID de grupo fijo” configurado).
-
Empujar requiere
git-receive-pack
estar en $ PATH del usuario y ser ejecutable para ellos … aunque no estoy seguro de cuán factible sería este enfoque. -
Puedes usar
update
opre-receive
gancho para hacer control de acceso al repositorio, por ejemplo, usando el gancho de ejemplo update-paranoid decontrib/hooks
en fuentes git. -
Con una mayor cantidad de usuarios, podría mejorar con el uso de un herramienta para administrar el acceso a los repositorios de git, como Gitosis (en Python, requiere herramientas de configuración) o Gitolite (en Perl).
-
Para acceso de solo lectura, puede configurar demonio git para proporcionar acceso anónimo (y no autenticado) de solo lectura a través de
git://
protocolo, en lugar de acceder a través del protocolo SSH.Ver documentación para
url.<base>.insteadOf
config variable para facilitar la transición del protocolo SSH al protocolo GIT.
Consulte también el Capítulo 4. “Git en el servidor” del libro Pro Git de Scott Chacon (con licencia CC-BY-NC-SA).
A pre-receive
gancho que simplemente imprime un mensaje informativo y sale con un estado distinto de cero hace el trabajo.
Suponiendo que pones información significativa en tu mensaje, también reduce las consultas de los usuarios frustrados que preguntan por qué no pueden presionar:
#!/bin/bash
echo "=================================================="
echo "This repository is no longer available for pushes."
echo "Please visit blah blah yadda yadda ...."
echo "=================================================="
exit 1
Recuerde establecer el permiso ejecutable para el script y asegurarse de que sea propiedad del usuario y / o grupo correcto, o de lo contrario no se ejecutará y no dará ninguna advertencia.
chmod -R a-w /path/to/repo.git