Applica il file gradle da un altro repository

Abbiamo diversi repository git per diversi progetti. C’è anche un repository git a scopo di infrastruttura. Abbiamo plug-in gradle personalizzati scritti in questo repository di infrastruttura che utilizziamo in altri repository

Esempio:

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

Qui abbiamo il file buildscript {}, foo / bar / buildscript.gradle in ogni repository Git. Voglio sapere se c’è un modo in cui possiamo applicare il file direttamente da un repository di infrastruttura. In modo che qualsiasi cambiamento sia visibile attraverso altri repository direttamente.

In tal caso, è ansible aggiungere una sottostruttura git Merging (diversa da git subtree) a ciascun repository, facendo riferimento all’infrra repo.

 git read-tree --prefix=/ –u  

È ansible vedere uno studio che lo fa in ” Gestione di librerie annidate mediante il stream di lavoro di unione di sottogruppi GIT “.

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

Nel tuo 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" 

Per aggiornare il repository del progetto con modifiche ai sottostrati:

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

Per aggiornare il repository del sottogruppo con la modifica dalla cartella della sottostruttura del repository del progetto:

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

La risposta dipende da cosa esattamente riuscirai a raggiungere.

  1. Se vuoi semplicemente aggiornare il tuo file di build in un posto e “automagicamente” ricevere le modifiche in tutti i repository di progetto, allora probabilmente dovresti togliere il file dal controllo GIT e, per esempio, semplicemente usare un link o qualcosa di simile ad un posizione esterna.
  2. La seconda opzione è quella di spostare tutte le cose di compilazione in una directory comune, rendere tale directory un repository GIT condivisibile e poi plug-in quel repository in tutti i repository dei progetti, ad esempio come sottomodulo Ma in questo caso non si riceverà ” aggiornamenti automatici perché git lega strettamente il contenuto del submodule a un particolare commit nel sottomodulo e ha bisogno di eseguire l’ git submodule update e il successivo git commit per ricevere i contenuti aggiornati nei git commit del progetto. La variante di questo metodo è git subtree merge subtree git subtree merge proposto da @VonC
  3. Se il tuo macchinario di costruzione è abbastanza complesso, potresti voler prendere in considerazione la creazione di un “artefatto graduale” e hide la complessità lì. Quindi puoi colbind quell’artefatto ai tuoi progetti e non fare affidamento su una particolare versione del manufatto, ma piuttosto su una gamma di versioni

Supponendo che il repository Git sia accessibile tramite HTTP (S), è ansible utilizzare un’opzione apply from: "http://..." . Nota che i plugin di script accessibili su HTTP non sono attualmente memorizzati nella cache, quindi la compilazione fallirà se lo script non può essere recuperato.