2010-07-29 29 views
9

Tengo un repositorio central con un subconjunto de archivos que deseo proteger para que no se modifique (presionando) de otros usuarios. Si agrego estos archivos al .gitignore, no se clonarán.Protegiendo archivos en el repositorio de git

¿Es posible dar la capacidad de clonar todos los archivos, pero después de la clonación, agregue algunos de ellos al .gitignore en el lado del cliente?

+0

¿Está .gitignore comprometido con el repositorio? ¿Por qué quieres proteger esos archivos? ¿.gitignore agrega algún tipo de acceso por usuario o su cambio significa que * nobody * podría cambiar esos archivos? ¿Qué está tratando de lograr? –

+0

¿Sería una opción simplemente rechazar los empujes que modifican esos archivos? También podría ofrecer un gancho del lado del cliente para rechazar compromisos erróneos. – Cascabel

Respuesta

0

inicialmente pensé en un filter driver (ver Pro Book), lo que haría:

  • en el escalón mancha guardar su contenido de archivos
  • en la etapa de limpieza restauraría el contenido de su archivos.

alt text

Pero eso no es una buena solución, ya que los guiones están a punto sin estado archivo de contenido transformación (ver this SO answer).

Puede intentar aplicar un mecanismo de guardar/restaurar en ganchos (vea la misma respuesta SO), pero tenga en cuenta que será local para su repositorio (protegerá sus archivos en su repositorio solamente, los ganchos no se presionan)

también puede utilizar:

git update-index --assume-unchanged file 

Ver "With git, temporary exclude a changed tracked file from commit in command line", de nuevo sólo una protección local. Eso los protegerá contra el empuje externo a su repositorio ("importación"), pero si los publica ("exportar"), puede modificarlos en el lado del cliente.

+0

Gracias. Sé sobre git update-index --assume-unchanged, pero solo se aplica en el lado del cliente. Sé también sobre ganchos, pero no están clonados desde el repositorio central. – andrexus

+0

@andrexus: Lo sé: el controlador de filtro es la única solución que se puede presionar, pero requerirá doblar el script de manchas para obligarlo a conocer la ruta de los archivos relevantes (para guardar/restaurar), mientras que solo debería saber sobre el contenido de los archivos ... – VonC

1

¿Hay alguna razón específica por la que Git deba ser la respuesta a esto?

¿Qué le parece hacer que los archivos sean de solo lectura y dictando como política que estos archivos no se deben insertar?

A veces, una solución tecnológica no es la forma más sencilla.

Si alguien hace empuja los cambios a estos archivos, estos cambios siempre se pueden revertir.

1

Puede tener los archivos en el repositorio, enviarlos, luego agregarlos al .gitignore y luego eliminarlos de la próxima confirmación.

Todavía puede buscar los archivos directamente antes de la confirmación (tal vez etiquetarlo con algo para que pueda ser buscado por el nombre un poco más fácil) y esto conservará el estado del archivo, sin editarlo fácilmente en el repositorio accidente.

Para acceder a esos archivos después de sacar el clon, simplemente escriba una tarea de rake que los obtenga para el usuario de su repositorio.

1

Me parece que el problema está en otra parte si necesita este nivel de restricción de acceso.

No obstante, si realmente desea implementar esto, considere Gitolite. Le permite definir reglas de acceso bastante detalladas y probablemente debería ser suficiente para sus necesidades.

documentación Gitolite: http://gitolite.com/gitolite/master-toc.html

Puede definir 'árbitros virtuales' para controlar el acceso a nivel de archivo. Más sobre eso: http://gitolite.com/gitolite/vref.html

Cuestiones relacionadas