Repository klonen und als Subrepository verwenden

Hi,

ich möchte in einem Projekt bootstrap verwenden. Dazu muss ich in (mindestens) einer Datei Änderungen vornehmen, um es zu konfigurieren (Farben, Linienstärken, …).

Mein Projekt ist ein multiproject-gradle-Projekt. Für bootstrap habe ich jetzt ein Subprojekt angelegt, in welchem ich es in ein Unterverzeichnis geklont habe. Ich möchte die Änderungen, die ich an den Konfigurationsdateien vorgenommen habe, auch in meiner Versionsverwaltung haben.
Macht es nun Sinn, dem bootstrap repository eine weitere remote location zum pushen hinzuzufügen und bei Versionssprüngen von bootstrap ein rebase auf das neue Tag vom origin zu machen? Oder gibt es dafür etabliertere Wege?

*** Edit ***

Bekomme ich die Änderungen vielleicht sogar irgendwie in das selbe Repository wie den Rest des Projektes? Das “Hauptrepository” umfasst zumindest in der Ordnerhierarchie das bootstrap repo.

Welche Änderungen? Das meiste ist in Bootstrap via Variablen konfigurierbar ohne je Bootstrap anzugassen müssen. und dann kann man noch via CSS inheritance alles andere überschreiben

Ich möchte aber die variables.less anpassen und dann bootstrap kompilieren.

Ich habe gerade noch etwas gefunden, was so aussieht, als wenn es genau mein Szenario beschreibt: Git - Submodules
Da ich noch am lesen bin, kenne ich die vorgeschlagene Lösung noch nicht.

Dann erstell eine eigene variables.less, diese überschreibt dann die bootstrap eigene.

und wenn schon subtree statt submodules.

*** Edit ***

So, nachdem ich jetzt am PC bin, etwas ausführlicher. Du musst gar nichts im Bootstrap Source rumfrimmeln. Das ist ja das schöne an LESS. Bzw. ähnlich dem Verhalten von CSS. Wenn eine Variable später erneut definiert wird, überschreibt sie die vorherige Definition in allen Verwendungen.

Im folgenden Beispiel importiert du die bootstrap.less, deine eigene variables.less, wo du die gewünschten Variablen überschreibst und dann deine eigenen weiteren less files.


@import "bootstrap/bootstrap.less";
@import "font-awesome/font-awesome.less";
 
@import "variables.less";
@import "mixins.less";
@import "nav.less";
@import "header.less";
@import "footer.less";

Das ist ein guter Hinweis und entspricht auch besser dem, was ich erreichen möchte (zumindest nach kurzem googlen). In diesem Artikel steht ganz gut zusammengefasst, wie man damit umgeht.

Zum grundsätzlichen Vorgehen: nicht nur die less-Dateien sollen neu übersetzt werden, es soll auch eine an die verwendeten Module angepasste bootstrap.js herauskommen, so wie über den Onlineassistenten. Das sollte mit den grunt tasks, die ich aus gradle heraus aufrufe, problemlos möglich sein.

Ich habe jetzt einen subtree erstellt und das Bauen der angepassten bootstrap-Distribution in einem gradle-Buildfile wie folgt automatisiert:

plugins {
  id "com.moowork.node" version "0.8"
  id "com.moowork.grunt" version "0.6"
}

description = 'Customized bootstrap'

node {
  version = '0.12.0'
  npmVersion = '2.5.0'
  download = true
  workDir = file(".nodejs")
}

grunt_dist.dependsOn 'installGrunt'
grunt_dist.dependsOn 'npmInstall'

grunt_dist {
  inputs.file 'Gruntfile.js'
  inputs.dir 'grunt'
  inputs.dir 'fonts'
  inputs.dir 'js'
  inputs.dir 'less'
  outputs.dir 'dist'
  outputs.dir 'docs'
}

Dabei erfolgt gradle-typisch eine Evaluation, ob überhaupt etwas getan werden muss, sodass der Build nicht unnötig verzögert wird, wenn ich keine Änderungen an bootstrap vorgenommen habe.