Dependencias del proyecto Git en GitHub

14

He escrito un marco PHP y un CMS encima del marco. El CMS depende del marco, pero el marco existe como una carpeta independiente dentro de los archivos CMS. Me gustaría mantenerlos como proyectos separados en GitHub, pero no quiero tener el lío de actualizar el proyecto CMS cada vez que actualizo el marco. Idealmente, me gustaría que el CMS de alguna manera extraiga los archivos del marco para su inclusión en un subdirectorio predefinido en lugar de comprometer físicamente esos archivos.

¿Es esto posible con Git / GitHub? Si es así, ¿qué necesito saber para que funcione? Tenga en cuenta que estoy en un nivel muy, muy básico de experiencia con Git: puedo hacer repositorios y comprometerme usando el complemento de Git para Eclipse, conectarme a GitHub, y eso es todo. Actualmente estoy trabajando solo en los proyectos, por lo que no he tenido que aprender mucho más sobre Git hasta ahora, pero me gustaría abrirlo a otros en el futuro y quiero asegurarme de tenerlo bien.

Además, ¿cuál debería ser mi flujo de trabajo ideal para proyectos con dependencias? Cualquier consejo sobre ese tema también sería muy apreciado. Si necesita más información sobre mi configuración, solo pregunte en los comentarios.

VirtuosiMedia
fuente
Echa un vistazo a git subtree como se menciona aquí: blogs.atlassian.com/2013/05/…
Nick

Respuestas:

11

Primero, si realmente quieres usar git para esto, entonces considera usar su funcionalidad de Submódulo :

El soporte de submódulos de Git permite que un repositorio contenga, como subdirectorio, un pago de un proyecto externo. Los submódulos mantienen su propia identidad; el soporte de submódulos solo almacena la ubicación del repositorio de submódulos y la ID de confirmación, de modo que otros desarrolladores que clonan el proyecto que contiene ("superproyecto") pueden clonar fácilmente todos los submódulos en la misma revisión. Los pagos parciales del superproyecto son posibles: puede decirle a Git que clone ninguno, algunos o todos los submódulos.

La página vinculada contiene una discusión detallada que incluye ejemplos de cómo usarla exactamente.

Dicho esto, recomendaría no usar su sistema de control de versiones para la gestión de dependencias y más bien comenzar a usar una herramienta de compilación que pueda manejar estas cosas por usted, como Maven o Ant . Incluso hay una herramienta de compilación específica de PHP en desarrollo llamada Phing , pero aún no la he usado. Se menciona en un artículo que analiza su pregunta: ¡Control de versiones! = Gestión de dependencias .

La razón por la cual las herramientas de compilación pueden encajar mejor a largo plazo es porque a menudo también admiten diferentes tipos de repositorios, bibliotecas externas (y diferentes ubicaciones) y comprobaciones exhaustivas. Sin embargo, si solo desea integrar estas dos bibliotecas y no desea problemas adicionales, el enfoque de submódulo probablemente sea suficiente.

Deckard
fuente
+1 - Gracias Deckard. Supuse que Git tenía algo así como Submódulos, simplemente no sabía cómo se llamaba. Definitivamente voy a echar un vistazo a Phing. He estado buscando una herramienta de compilación PHP que administre dependencias, ejecute pruebas unitarias y luego las implemente en mi sitio. Parece que Phing probablemente pueda hacer todo eso. También parece que tomará un poco de tiempo aprender. ¿Conoces algún buen screencast para Phing (Google no está siendo amable en ese sentido)?
VirtuosiMedia
El enlace a "Funcionalidad de submódulo" está roto, y el enlace a "¡Control de versiones! = Gestión de dependencias" también está roto
Ferrybig
6

Git Submodules es una excelente manera de administrar las dependencias de proyectos git.

Si está buscando otro enfoque:

Composer puede hacer todo esto por ti. Composer es un administrador de dependencia para php. Su sintaxis es de json. Es bastante fácil y barato de usar.

Más sobre compositor:

Composer es una herramienta para la gestión de dependencias en PHP. Le permite declarar las bibliotecas dependientes que su proyecto necesita y las instalará en su proyecto por usted.

En la página de documentación , puede encontrar un ejemplo de cómo se construiría su archivo composer.json:

// Composer.json    
{

    "name": "acme/blog",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/composer/hello-world"
        }
    ],
    "require": {
        "acme/hello-world": "dev-master"
    }
}

Una vez que haya creado su archivo composer.json y composer.lock para su proyecto, puede instalar sus dependencias fácilmente:

composer.phar install o actualizarlos: composer.phar update o crear un proyecto particular de packagist : composer.phar create-project acmeproject

chrisjlee
fuente
1

Recientemente comencé a usar una herramienta llamada Pundle para administrar las dependencias de mi proyecto. Es compatible con una versión PHP, paquetes PEAR, repositorios Git y repositorios SVN como dependencias y permite especificarlos fácilmente a través de un "archivo Pundlefile".

También debe configurar sus dependencias para que los pagos de Git / SVN se coloquen en un directorio que no esté bajo Control de versiones (por ejemplo, "proveedor") para que tenga un nuevo comienzo en cada pago y para mantener la inclinación del repositorio de su proyecto.

chh
fuente