2009-08-27 10 views
25

Mi git repo contiene contraseñas confidenciales que, por motivos fuera de mi control, no se pueden eliminar en este momento. En este momento, todo está bien porque este repositorio es solo interno, pero se me ha pedido que cree una rama que sea segura para compartir con los socios.git branch sin historial

¿Hay alguna forma de crear una rama en git y luego eliminar los archivos de la misma de forma que no se puedan recuperar utilizando el registro?

Parece una posibilidad remota, pero pensé en preguntar. La única solución en la que puedo pensar es copiar el árbol de archivos a un nuevo repositorio git sin el archivo confidencial, pero luego perdería la posibilidad de fusionar los cambios del socio de nuevo con mi repositorio.

Respuesta

29

Una cosa que podría hacer es crear una rama de su repositorio, editar las contraseñas, y luego crear un clon superficial (con profundidad 1) de ese repositorio que le daría a los socios. Pueden hacer parches y todo lo demás contra ese clon, pero no pueden ver toda la historia y no pueden empujar el repositorio a ningún otro lado. Si solo están haciendo cambios, entonces esta debería ser una solución viable. Aún puede aceptar parches de ellos y aplicarlos a su repositorio principal.

Consulte la opción --depth de git clone para obtener más información.

+0

creo que esta solución va a funcionar mejor para la situación de Ben. Es más fácil administrar el acceso en forma de repositorio, que en una base de sucursales. – Apreche

+4

'git clone --depth 1 [email protected]: Proyecto/projectname.git' - copiar y pegar – YumYumYum

5

Uso filter-branch:

Supongamos que desea eliminar un archivo (que contiene información confidencial o violación de derechos de autor) de todas las compromete:

git filter-branch --tree-filtro 'rm nombre de archivo 'HEAD

+0

1.)' --index-filter debe ser más rápido que 'archivos eliminación --tree-filter'for. 2.) si no desea cambiar el repositorio, primero cree una nueva rama y vuelva a escribirla. –

+0

Sí, hay una muy buena discusión de las diversas técnicas en la documentación a la que he vinculado –

0

Haré una puñalada en un par de respuestas. Supongamos que puede crear una rama que no contenga datos confidenciales. Te nublas y luego haces un clon superficial de la rama que no contiene el historial y, por lo tanto, no puedes sacarlo, pero podría salir de ti.

La otra cosa sería clonar un nuevo repositorio y usar las herramientas de eliminación de git para borrar datos confidenciales. Esto crearía un repositorio distinto que no podría interactuar excepto a través de parches con el primero, pero tendría todo el historial.

5

git clone --depth 1 url_of_your_remote_repository

Limitación de depósito superficial

  • no se puede clonar o ir a buscar desde el repositorio de poca profundidad (Esto significa que no puede hacer un nuevo repositorio usando este copia superficial)

  • no pudo ver todo el historial usando el comando git log.

  • Su solución viable, su socio puede hacer algunos cambios y hacerla como "parches" y enviársela a su socio si quiere que su pareja cambie. A continuación, aplique los parches en su árbol de trabajo actual/las ramas que desee aplicar.

    More