tipos - ¿Cómo hacer un repositorio git de solo lectura?
tipos de etiquetas en git (8)
Dado que git se basa principalmente en el sistema de archivos para el control de acceso, eso funcionará. Tenga en cuenta que en sus permisos, el mundo no tiene acceso al archivo, pero el usuario y el grupo tienen acceso de lectura / escritura. Si desea que todo el mundo pueda leer, sus permisos deben ser 0444
.
Podría hacer un control más preciso si establece los permisos de repo en 0664
donde el usuario nobody
es nobody
y el grupo es algo así como gitdevs
. Entonces, solo las personas en el grupo gitdevs
tendrán la capacidad de escribir en el repositorio, pero el mundo puede leer de él.
Seguimiento Aquí hay un enlace que cubre varias formas de compartir su repositorio y cubre las ventajas y desventajas de los profesionales y las funciones de control de acceso.
Tengo algunos repositorios de git a los que se accede de forma remota a través de SSH y quiero hacer que algunos de ellos sean de solo lectura para evitar más empujones. Algunas personas tienen mandos a distancia que apuntan a estos repositorios.
Estos repositorios --shared=group
se inicializaron --shared=group
, por lo tanto, ¿es bueno configurar los permisos de archivos en 660 para que todos los archivos sigan permitiendo el acceso a SSH, pero no permiten las escrituras? ¿O hay una forma más fácil?
Aclamaciones.
Hay más de una manera posible de hacer esto.
Si cada uno de sus usuarios tiene una cuenta de shell (quizás limitada), y cada uno de ellos accede a los repositorios de git a través de su propia cuenta, puede usar los permisos del sistema de archivos para controlar el acceso de SSH a los repositorios de git. En Unix, esos serían permisos de escritura en directorios , tal vez con la ayuda de crear un grupo y permisos específicos para un grupo (con el conjunto de "ID de grupo fijo").
Presionar requiere que
git-receive-pack
esté en $ PATH del usuario, y que sea ejecutable para ellos ... aunque no estoy seguro de cuán factible sería este enfoque.Puede usar el
update
opre-receive
para hacer el control de acceso al repositorio, por ejemplo, utilizando update-paranoid ejemplo update-paranoid decontrib/hooks
en las fuentes de git.Con un número mayor de usuarios, puede ser mejor con una herramienta para administrar el acceso a los repositorios de git , como Gitosis (en Python, requiere herramientas de instalación) o Gitolite (en Perl).
Para el acceso de solo lectura, puede configurar el demonio de git para proporcionar acceso anónimo (y no autenticado) de solo lectura a través del protocolo
git://
, en lugar del acceso a través del protocolo SSH.Consulte la documentación para la
url.<base>.insteadOf
variable de configuración para una manera de facilitar la transición de 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).
Inspirado en este comentario :
Actualice su archivo de
hooks/pre-receive
con el siguiente contenido:#!/bin/sh echo "Closed for all pushes" ; exit 1
De esta manera, todos los usuarios que intenten enviar cambios a este repositorio recibirán el mensaje anterior y el envío será rechazado.
Otra posibilidad es el protocolo git, pero requiere que el demonio git esté en ejecución.
Recientemente utilicé el acceso limitante a la ruta "/repo.git/git-receive-pack" para obtener el resultado de que el repositorio es de lectura y escritura para algunos usuarios y de solo lectura para otros. En httpd config se ve así:
<Location /repo.git/>
Require group developers developers-ro
</Location>
<Location /repo.git/git-receive-pack>
Require group developers
</Location>
Si también necesita control de acceso, revise la Gitosis . Bastante fácil de configurar y puede usar un script simple para controlar quién puede hacer qué.
Un gancho de pre-receive
que simplemente imprime un mensaje informativo y sale con un estado distinto de cero hace el trabajo.
Suponiendo que coloque información significativa en su mensaje, también se reducen las consultas de usuarios frustrados que preguntan por qué no pueden insistir:
#!/bin/bash
echo "=================================================="
echo "This repository is no longer available for pushes."
echo "Please visit blah blah yadda yadda ...."
echo "=================================================="
exit 1
chmod -R a-w /path/to/repo.git