¿Puedo agregar un archivo a mi repositorio Git local pero no enviarlo al control remoto?

3 minutos de lectura

avatar de usuario
Toby

Tengo varios archivos de video grandes que no quiero enviar a mi control remoto; sin embargo, quiero agregarlos a mi repositorio local. Algo así como una versión remota del .gitignore expediente.

¿Es eso posible?

Para ser más específicos, estoy trabajando en un proyecto multimedia y una carpeta tiene archivos de metadatos del proyecto (es un proyecto de Screenflow), así como medios. Entonces tiene un project.screenflow carpeta con ambos .dat archivos y Media\XXXX.aif, Media\XXXX.mov etc.

Quiero compartir al menos los archivos del proyecto (.dat) con mi equipo y no tiene sentido abrir el proyecto en Screenflow si no tiene los medios que usa. Sin embargo, hay un límite de tamaño de archivo de 100 MB en nuestro repositorio de Git que me impide impulsarlos.

Actualmente, he excluido Media en el .gitignore y puede que tenga que compartir los medios por algún otro medio 🙁

  • git addpero nunca git commit ¿eso? ¿O quieres hacerle revisiones? Si es así, crea una nueva rama, y ​​cuando fusiones tu rama probablemente necesitarás cherry-pick.

    – 2rs2ts

    7 febrero 2014 a las 13:48


  • @2rs2ts, ¿de qué sirve un repositorio si nunca git commit?

    – Shahbaz

    7 febrero 2014 a las 13:49

  • Almacenar grandes objetos binarios en git no es la mejor idea. ¿Está seguro de que va a realizar un seguimiento de las revisiones de los archivos de vídeo?

    – Greg

    7 febrero 2014 a las 13:49

  • @Shahbaz Sí, obviamente. Pero así es como lo haces, ¿no?

    – 2rs2ts

    07/02/2014 a las 13:50

avatar de usuario
Shahbaz

.gitignore no te impide tener un archivo en tu repositorio (siempre puedes forzarlo). Así que esto no es realmente como un .gitignore en el control remoto.

La respuesta inmediata a su pregunta es que no es posible. Git mantiene un historial de tus confirmaciones. Cada compromiso se realiza (y se codifica) por su contenido. Si tiene un archivo en una confirmación y envía esa confirmación, no puede pedirle a git que envíe solo una parte de esa confirmación, porque entonces ya no sería la misma confirmación.

Sin embargo, hay formas de lograr lo que quieres, ninguna de las cuales es muy limpia. Un ejemplo es con los submódulos de git donde crea un submódulo que apunta a otro repositorio local que tiene (con los archivos de video). Cualquiera que clone su repositorio remoto no recibirá los archivos de video, pero aún verá el submódulo que se refiere a algún lugar de su computadora.

Otra forma sería usar git subtree para crear otro conjunto de confirmaciones a partir de las que tiene, excluyendo los videos, y luego enviar esas confirmaciones creadas artificialmente a su repositorio. Sin embargo, impone cierta estructura de directorios.

La respuesta habitual a esta pregunta suele ser repensar su repositorio. ¿Son los videos vitales para su repositorio? Si no, entonces no los pongas en el repositorio, ni local ni remoto. Los recursos adicionales como ese no pertenecen a un repositorio de git (especialmente porque tampoco están versionados).

Si solo los quiere en su computadora local, guárdelos en algún otro directorio. Si realmente desea tener acceso a versiones anteriores, mantenga ese otro directorio en git por sí solo. Si desea que otros también vean los archivos, colóquelos en un sitio web para compartir archivos.

No usar métodos git convencionales. Tener el archivo en el repositorio cambiaría cada hash de confirmación que lo sigue. Esto entonces no coincidiría en el lado del servidor. Consideraría trabajar en torno a por qué necesita que vivan en el mismo repositorio que tiene que empujar.

¿Podría tenerlos en un repositorio separado que luego se extrajo a través de un git hook local si es para su procesamiento? Si elabora su situación en su pregunta, probablemente podamos ayudarlo.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad