Dépendances du projet Git sur GitHub

14

J'ai écrit un framework PHP et un CMS au dessus du framework. Le CMS dépend du framework, mais le framework existe en tant que dossier autonome dans les fichiers CMS. Je voudrais les maintenir en tant que projets séparés sur GitHub, mais je ne veux pas avoir le désordre de mettre à jour le projet CMS chaque fois que je mets à jour le framework. Idéalement, j'aimerais que le CMS tire en quelque sorte les fichiers de framework pour les inclure dans un sous-répertoire prédéfini plutôt que de valider physiquement ces fichiers.

Est-ce possible avec Git / GitHub? Si oui, que dois-je savoir pour que cela fonctionne? Gardez à l'esprit que je suis à un niveau très, très basique d'expérience avec Git - je peux créer des référentiels et valider en utilisant le plugin Git pour Eclipse, me connecter à GitHub, et c'est tout. Je travaille actuellement en solo sur les projets, donc je n'ai pas eu à en apprendre beaucoup plus sur Git jusqu'à présent, mais j'aimerais l'ouvrir à d'autres à l'avenir et je veux m'assurer que j'ai bien compris.

De plus, quel devrait être mon flux de travail idéal pour les projets avec des dépendances? Tout conseil à ce sujet serait également grandement apprécié. Si vous avez besoin de plus d'informations sur ma configuration, demandez simplement dans les commentaires.

VirtuosiMedia
la source
Découvrez le sous-arbre git comme indiqué
Nick

Réponses:

11

Tout d'abord, si vous voulez vraiment utiliser git pour cela, envisagez d'utiliser sa fonctionnalité de sous-module :

La prise en charge des sous-modules de Git permet à un référentiel de contenir, en tant que sous-répertoire, une extraction d'un projet externe. Les sous-modules conservent leur propre identité; la prise en charge du sous-module stocke simplement l'emplacement du référentiel du sous-module et l'ID de validation, de sorte que les autres développeurs qui clonent le projet contenant ("superprojet") peuvent facilement cloner tous les sous-modules à la même révision. Des extractions partielles du superprojet sont possibles: vous pouvez dire à Git de ne cloner aucun, certains ou tous les sous-modules.

La page liée contient une discussion détaillée comprenant des exemples de la façon de l'utiliser exactement.

Cela dit, je recommanderais de ne pas utiliser votre système de contrôle de version pour la gestion des dépendances et plutôt de commencer à utiliser un outil de construction qui peut gérer ces choses pour vous, comme Maven ou Ant . Il y a même un outil de construction spécifique à PHP en développement appelé Phing , mais je ne l'ai pas encore utilisé moi-même. Il est mentionné dans un article qui traite de votre question: Contrôle de version! = Gestion des dépendances .

La raison pour laquelle les outils de construction peuvent être mieux adaptés à long terme est qu'ils prennent souvent en charge différents types de référentiels, des bibliothèques externes (et des emplacements différents) et une vérification approfondie. Si toutefois vous souhaitez simplement intégrer ces deux bibliothèques et que vous ne voulez pas de soucis supplémentaires, l'approche du sous-module est probablement suffisante.

Deckard
la source
+1 - Merci Deckard. Je pensais que Git avait quelque chose comme des sous-modules, je ne savais pas comment ça s'appelait. Je vais certainement jeter un coup d'œil à Phing. Je voulais un outil de construction PHP qui gère les dépendances, exécute des tests unitaires, puis se déploie sur mon site. Il semble que Phing puisse probablement faire tout cela. Il semble également qu'il faudra un peu de temps pour apprendre. Connaissez-vous de bons screencasts pour Phing (Google n'est pas gentil à cet égard)?
VirtuosiMedia
Le lien vers "Fonctionnalité de sous-module" est rompu, et le lien vers "Contrôle de version! = Gestion des dépendances" est également rompu
Ferrybig
6

Les sous - modules Git sont un excellent moyen de gérer les dépendances de projet git.

Si vous cherchez une autre approche:

Le compositeur peut tout faire pour vous. Composer est un gestionnaire de dépendances pour php. Sa syntaxe est de json. C'est plutôt facile et bon marché à utiliser.

En savoir plus sur le compositeur:

Composer est un outil de gestion des dépendances en PHP. Il vous permet de déclarer les bibliothèques dépendantes dont votre projet a besoin et il les installera dans votre projet pour vous.

Sur la page de documentation , vous pouvez trouver un exemple de la façon dont votre fichier composer.json serait construit:

// Composer.json    
{

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

Une fois que vous avez créé votre fichier composer.json et composer.lock pour votre projet, vous pouvez simplement installer vos dépendances facilement:

composer.phar install ou les mettre à jour: composer.phar update ou créer un projet particulier à partir de packagist : composer.phar create-project acmeproject

chrisjlee
la source
1

Récemment, j'ai commencé à utiliser un outil appelé Pundle pour gérer les dépendances de mon projet. Il prend en charge une version PHP, des packages PEAR, des référentiels Git et des référentiels SVN en tant que dépendances et permet de les spécifier facilement via un "Pundlefile".

Vous devez également configurer vos dépendances afin que les extractions Git / SVN soient placées dans un répertoire qui n'est pas sous contrôle de version (par exemple "fournisseur") afin que vous ayez un nouveau départ à chaque extraction et pour garder le référentiel de votre projet allégé.

chh
la source