Aplique o arquivo gradle de um repository diferente

Temos vários repositorys git para diferentes projetos. Existe também um repository git para fins de infraestrutura. Temos plugins gradle personalizados escritos neste repository de infra-estrutura que usamos em outros repositorys

Exemplo:

buildscript { apply from: 'foo/bar/devinfra-buildscript.gradle', to: buildscript } apply plugin: 'devinfra' 

Aqui estamos tendo o arquivo {} de compilation, foo / bar / buildscript.gradle em cada repository Git. Eu quero saber se existe uma maneira de aplicar o arquivo diretamente de um repository de infraestrutura. Assim, qualquer alteração é visível em outros repositorys diretamente.

Nesse caso, você pode adicionar uma subtree git Merging (diferente de git subtree) a cada um de seus repo, referindo-se ao repo infra.

 git read-tree --prefix=/ –u  

Você pode ver um estudo fazendo isso em ” Gerenciando bibliotecas aninhadas usando o stream de trabalho de mesclagem da subtree do GIT “.

http://www.typecastexception.com/image.axd?picture=Subtree%20Illustration_thumb_1.png

No seu caso:

 cd /path/to/project git remote add infrarepo /url/to/infra/repo git fetch infrarepo git checkout -b infra infrarepo/master git checkout master git read-tree --prefix=infra/ –u infra git commit -m "Add Infra subtree" 

Para atualizar o repository do projeto com alterações na subtree:

 git checkout infra git pull git checkout master git merge --squash –s subtree –-no-commit infra git commit -m "update infra" 

Para atualizar o repository da subtree com a mudança da pasta da subtree do repository do projeto:

 git checkout infra git merge --squash –s subtree --no-commit master git commit -m "(infra subtree) nature of changes" git push infrarepo infra 

A resposta depende do que exatamente você vai conseguir.

  1. Se você quer simplesmente atualizar seu arquivo de compilation em um lugar e “automagicamente” receber as mudanças em todos os repos do projeto, provavelmente você deve tirar o arquivo do controle do GIT e, por exemplo, simplesmente usar um link ou algo assim para um localização externa.
  2. A segunda opção é mover todo o material de compilation para um diretório comum, tornar esse diretório um repository GIT compartilhável separado e, em seguida, conectar esse repository em todos os repos de seus projetos, por exemplo, como um submódulo Mas, nesse caso, você não receberá ” automagical “atualiza porque o git vincula estritamente o conteúdo do submódulo a um commit particular no submódulo e precisa executar o git submodule update e subsequente git commit para receber o conteúdo atualizado em seus repositorys do projeto. A variante deste método é git subtree merge proposta por @VonC
  3. Se o seu maquinário de construção é complexo o suficiente, você pode querer considerar criar um “artefato gradle” e esconder a complexidade lá. Em seguida, você pode conectar esse artefato a seus projetos e não depender de uma versão específica do artefato, mas de uma série de versões

Assumindo que o repository Git é acessível através de HTTP (S), uma opção é usar apply from: "http://..." . Observe que os plug-ins de script acessados ​​por HTTP não são armazenados em cache no momento, portanto, a compilation falhará se o script não puder ser buscado.