Trabajando con repos

Cuando trabajo con repos (tengo Github en mente), ¿deberíamos también comprometer bibliotecas de terceros? Por ejemplo, boost y poco comstackr a 5G con muestras. ¿Deberíamos upload todo eso a github? Si no, ¿cómo mantenemos las bibliotecas sincronizadas con otras personas?

Lo siento por la falta de capitalización y gramática. Estoy en mi teléfono y es difícil escribir.

Me gusta cuando esas bibliotecas de terceros están disponibles a través de git, y puedo includelas en mi proyecto como submodules. Me gusta mucho eso. Hace que extraer las actualizaciones sea un pedazo de pastel.

Cuando eso no es posible, entonces sí, incluí su código directamente en mi repository. En última instancia, voy a pasar mi twig de producción a mi gente de operaciones para enviarla al server de producción, por lo que necesita tener todos los productos necesarios para ejecutar. Ese puede ser un flujo de trabajo diferente al tuyo, pero así es como funciona el mío.

Primera regla de control de versiones: nunca comprometer activos generados a su repository. Por lo tanto, definitivamente no deberías comprometer los productos de compilation de Boost y Poco a tu repository. Si depende de usted include dependencies en su repository como fuente; depende de su proyecto, cuántas dependencies necesita, cuánto del público para su software es probable que tenga acceso fácil a esas dependencies, etc. Los empaquetadores y las distribuciones generalmente prefieren que no agrupe sus dependencies, sino que mencionelos cuidadosamente en un file README o INSTALL.

Si desea facilitar la obtención de las dependencies para las personas que verifican su código desde un VCS, intente utilizar svn external, git submodules o hg subrepos, lo que facilita la exclusión de las dependencies y establecer un enlace claro al repository en sentido ascendente de la dependencia. .

Primero, no importa si estás usando Maven o no. No importa.

Ahora que lo tengo todo fuera del path, sugiero que uses un administrador de repositorys Maven como Nexus o Artifactory .

Lo que Artifactory y Nexus hacen es crear una estructura de repository de networking para bibliotecas de terceros.

Puede download fácilmente cualquier artefacto en su repository de versiones con los commands estándar wget o curl . Si usa Ant, puede usar Ivy para administrar sus artefactos. Si usas Maven, bueno, ya estás listo. Eso significa que puede guiar la descarga de las bibliotecas de terceros requeridas directamente en sus scripts de compilation.

Un repository de versiones también se puede usar para las bibliotecas de terceros. ¿Produces una biblioteca base que otros proyectos tuyos usan? Puede utilizar el mismo mecanismo de descarga y descarga para que sus objects comstackdos estén disponibles para su sistema.

Verificar las bibliotecas de terceros provoca los siguientes problemas:

  • Los compromisos generalmente se realizan proyecto por proyecto. Eso significa que si tiene más de un proyecto que depende de la biblioteca foo , es probable que tenga foo ubicado en dos lugares diferentes en su repository.
  • Perderá información sobre foo . No recordarás qué versión de foo era. He sido ingeniero de construcción para proyectos de Java durante la última década, y en cada proyecto tenemos algunos foo.jar del proyecto Foo, y ninguno de los desarrolladores sabe si se trata de la versión 1.3, 2.5 o 4.5. No tenemos idea si el proyecto Foo incluso admite esta versión anterior o si obtuvimos el buggy 1.3 y deberíamos haber actualizado a la versión 1.4 en la administración de Hoover.
  • Los binarys ocupan mucho espacio en su repository de origen. Cada vez que compromete una nueva versión, tiene aún más espacio. Y, ¿qué te consigue a cambio? No mucho. No puede modificarlo para ver qué se cambió en la versión anterior. Los pagos pueden llevar una eternidad sin ningún beneficio a cambio.
  • Muchos repositorys de origen no le permitirán eliminar versiones obsoletas de sus progtwigs de terceros. No mencionaré ningún nombre (¡tos, Subversión, tos!), Pero he visto repositorys que tienen un tamaño de 100 a 200 gigabytes, y casi no son más que versiones obsoletas de bibliotecas de terceros.

Por cierto, nunca mencionaste tu plataforma de progtwigción. Si está usando Ruby, Php o Perl, puede usar su sistema de repository integrado (Gem, Pear y CPAN respectivamente) y no tendrá que preocuparse por configurar repositorys de versiones.