Dependências do projeto Git no GitHub

14

Eu escrevi uma estrutura PHP e um CMS no topo da estrutura. O CMS depende da estrutura, mas a estrutura existe como uma pasta independente nos arquivos do CMS. Gostaria de mantê-los como projetos separados no GitHub, mas não quero ter a bagunça de atualizar o projeto CMS toda vez que atualizar o framework. Idealmente, eu gostaria que o CMS, de alguma forma, puxasse os arquivos da estrutura para inclusão em um subdiretório predefinido, em vez de confirmar fisicamente esses arquivos.

Isso é possível com o Git / GitHub? Nesse caso, o que preciso saber para que ele funcione? Lembre-se de que eu tenho um nível de experiência muito, muito básico com o Git - eu posso criar repositórios e confirmar usando o plug-in Git para Eclipse, conectar-me ao GitHub, e é isso. Atualmente, estou trabalhando sozinho nos projetos, então não tive que aprender muito mais sobre o Git até agora, mas gostaria de abri-lo para outras pessoas no futuro e quero ter certeza de que está certo.

Além disso, qual deve ser o meu fluxo de trabalho ideal para projetos com dependências? Qualquer dica sobre esse assunto também seria muito apreciada. Se você precisar de mais informações sobre minha configuração, basta perguntar nos comentários.

VirtuosiMedia
fonte
Confira sub git como falou aqui: blogs.atlassian.com/2013/05/...
Nick

Respostas:

11

Primeiro, se você realmente deseja usar o git para isso, considere usar a funcionalidade Submodule :

O suporte ao sub-módulo do Git permite que um repositório contenha, como subdiretório, uma verificação de um projeto externo. Os submódulos mantêm sua própria identidade; o suporte ao sub-módulo apenas armazena o local do repositório do sub-módulo e confirma o ID, para que outros desenvolvedores que clonam o projeto que o contém ("superprojeto") possam facilmente clonar todos os sub-módulos na mesma revisão. É possível fazer checkouts parciais do superprojeto: você pode dizer ao Git para clonar nenhum, alguns ou todos os submódulos.

A página vinculada contém uma discussão detalhada, incluindo exemplos de como usá-lo exatamente.

Dito isso, eu recomendaria não usar seu sistema de controle de versão para gerenciamento de dependências e, em vez disso, começar a usar uma ferramenta de compilação que possa lidar com essas coisas, como Maven ou Ant . Existe até uma ferramenta de construção específica para PHP em desenvolvimento chamada Phing , mas ainda não a usei. É mencionado em um artigo que discute sua pergunta: Controle de versão! = Gerenciamento de dependência .

A razão pela qual as ferramentas de construção podem se encaixar melhor no longo prazo é porque elas também oferecem suporte a diferentes tipos de repositórios, bibliotecas externas (e locais diferentes) e verificação extensiva. Se você, no entanto, apenas deseja integrar essas duas bibliotecas e não deseja nenhum aborrecimento adicional, a abordagem do submódulo provavelmente é suficiente.

Deckard
fonte
+1 - Obrigado Deckard. Eu imaginei que o Git tinha algo como Submodules, eu simplesmente não sabia como era chamado. Definitivamente vou dar uma longa olhada em Phing. Eu estava querendo uma ferramenta de compilação PHP que gerencia dependências, executa testes de unidade e depois implanta no meu site. Parece que Phing provavelmente pode fazer tudo isso. Também parece que vai demorar um pouco para aprender. Você conhece algum bom screencasts para Phing (o Google não está sendo gentil nesse sentido)?
VirtuosiMedia
O link para "funcionalidade Submódulo" está quebrado, eo link para também está quebrado "Control Version = Gestão de dependência!"
Ferrybig
6

Submodules Git é uma ótima maneira de gerenciar dependências de projetos git.

Se você estiver procurando outra abordagem:

O compositor pode fazer isso tudo por você. O Composer é um gerenciador de dependências para php. Sua sintaxe é do json. É bastante fácil e barato de usar.

Mais sobre compositor:

O Composer é uma ferramenta para gerenciamento de dependências em PHP. Ele permite que você declare as bibliotecas dependentes de que seu projeto precisa e as instalará no seu projeto para você.

Na página de documentação , você pode encontrar um exemplo de como seu arquivo composer.json seria construído:

// Composer.json    
{

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

Depois de criar o arquivo composer.json e composer.lock para o seu projeto, você poderá instalar facilmente suas dependências:

composer.phar install ou atualize-os: composer.phar update ou crie um projeto específico a partir do packagist : composer.phar create-project acmeproject

chrisjlee
fonte
1

Recentemente, comecei a usar uma ferramenta chamada Pundle para gerenciar as dependências do meu projeto. Ele suporta uma versão PHP, pacotes PEAR, repositórios Git e repositórios SVN como dependências e permite especificá-los facilmente por meio de um "arquivo Pundlefile".

Você também deve configurar suas Dependências para que os check-outs do Git / SVN sejam colocados em um diretório que não esteja sob o Controle de Versão (por exemplo, "fornecedor") para ter um novo começo em cada check-out e manter o repositório do seu projeto enxuto.

chh
fonte