You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
4.6 KiB
Markdown
130 lines
4.6 KiB
Markdown
---
|
|
title: Gemeinsame Merkmale der Modi
|
|
---
|
|
|
|
## Was du wissen musst
|
|
|
|
Malachite ist im Repository-Modus ziemlich umfangreich, im Workspace-Modus dagegen nicht so sehr.
|
|
|
|
Das liegt natürlich nicht daran, dass ich faul bin und den Arbeitsbereich-Modus hasse oder so, es gibt einfach nicht
|
|
nicht viel _hinzufügen_.
|
|
|
|
Werfen wir nun einen Blick auf diese Beispiel-Konfigurationsdatei.
|
|
|
|
```toml
|
|
# mlc.toml
|
|
|
|
[base]
|
|
mode = "workspace"
|
|
smart_pull = true
|
|
|
|
[mode.workspace]
|
|
git_info = true
|
|
colorblind = true
|
|
|
|
[repositories]
|
|
repos = [
|
|
"foo:repo1:2",
|
|
"foo:repo2/testing",
|
|
"bar:baz!",
|
|
"bar:qux/testing!:1",
|
|
]
|
|
|
|
[repositories.urls]
|
|
foo = "https://example.org/{}.git"
|
|
bar = "https://example.org/other/{}.git"
|
|
```
|
|
|
|
Das wird auf den ersten Blick sehr verwirrend aussehen, aber haben Sie Vertrauen in mich.
|
|
|
|
In diesem Dokument wird nur das behandelt, was man für **beide** Modi wissen muss.
|
|
Speziellere Anleitungen werden für jeden Modus am Ende dieser Seite verlinkt.
|
|
|
|
Beginnen wir mit den Grundlagen
|
|
|
|
## Basis-Konfiguration
|
|
|
|
Die Basiskonfiguration definiert einige gemeinsame Parameter für alle Malachite-Modi.
|
|
|
|
```toml
|
|
[base]
|
|
mode = "workspace"
|
|
smart_pull = true
|
|
```
|
|
|
|
In diesem Ausschnitt definieren wir "mode" als "workspace".
|
|
|
|
base.mode" kann in Malachite immer nur eine der Optionen "workspace" oder "repository" sein, und definiert, Trommelwirbel...
|
|
Der Modus, in dem er arbeitet. Wenn er auf etwas anderes als diese 2 Modi eingestellt ist, stürzt er ab.
|
|
|
|
Ebenfalls in diesem Ausschnitt definiert ist `smart_pull`, das steuert, ob intelligent gezogen werden soll.
|
|
|
|
Das bedeutet, dass Malachite anstelle eines einfachen `git pull` in jedem Repository, Malachite
|
|
wird:
|
|
|
|
- Führt zuerst `git remote update` aus, um neue Remotes vom Source zu holen.
|
|
- Dann wird ausgeführt `git status` und analysiert die Ausgabe, um festzustellen, ob der aktuelle Zweig im Rückstand ist
|
|
- Wenn der aktuelle Zweig im Rückstand ist, wird ein reguläres `git pull` ausgeführt, das die bereits aktualisierten Remote ausnutzt.
|
|
|
|
Theoretisch beschleunigt dies die Dinge nur um einen winzigen Betrag (man denke an Millisekunden, wirklich). Wo diese Funktion jedoch glänzt,
|
|
ist im Repository-Modus, wo es hilfreiche Automatisierungsfunktionen wie `build_on_update` ermöglicht.
|
|
|
|
Trotzdem ist es empfehlenswert, diese Funktion zu aktivieren, um die Geschwindigkeit zu erhöhen, und sie nur zu deaktivieren, wenn sie Probleme verursacht.
|
|
Ich persönlich hatte in der Vergangenheit noch nie Probleme damit, aber wer weiß, was alles passieren kann. Wir reden hier über Git.
|
|
|
|
### Repositories-Konfiguration
|
|
|
|
Die Konfiguration der Repositories ist realistisch gesehen das, was Malachite intern zu Butter werden lässt.
|
|
Sie ist der ganze und deshalb haben wir versucht, ein kleines, aber feines System zu entwickeln, mit dem man viele Pakete zu erleichtern,
|
|
ohne jede URL eine Million Mal eingeben zu müssen.
|
|
|
|
```toml
|
|
[repositories]
|
|
repos = [
|
|
"foo:repo1:2",
|
|
"foo:repo2/testing",
|
|
"bar:baz!",
|
|
"bar:qux/testing!:1",
|
|
]
|
|
|
|
[repositories.urls]
|
|
foo = "https://example.org/{}.git"
|
|
bar = "https://example.org/other/{}.git"
|
|
```
|
|
|
|
Der Weg wie das funktioniert ist einfach:
|
|
|
|
- Wir haben 2 URLs im Schlüssel `repositories.urls`.
|
|
- Jedem `repo` im Schlüssel `repositories.repos` ist ein Bezeichner vorangestellt.
|
|
- Wenn die Nummer `foo` ist, wird die URL mit der ID `foo` eingefügt.
|
|
- Insbesondere wird in der URL der Name des definierten `repo` anstelle der Teilzeichenkette `%repo%` eingefügt.
|
|
|
|
### Moment mal, was sind die besonderen Symbole????
|
|
|
|
Ich bin froh, dass Sie gefragt haben!
|
|
|
|
- Wenn Sie einen bestimmten Zweig klonen wollen, verwenden Sie einfach den Begrenzer `/`. Um das Repository `foo` auf den Zweig `bar` zu klonen, verwenden Sie `id:foo/bar`.
|
|
- Wenn Sie wollen, dass ein bestimmtes Paket zuerst gebaut wird, verwenden Sie Instanzen von `!`, um die Priorität festzulegen. Dies wird später auf der Seite [Repository Mode](REPOSITORY_MODE.md) erklärt.
|
|
|
|
Das letzte `:` Trennzeichen ist völlig optional und verhält sich je nach Modus unterschiedlich:
|
|
|
|
- Im Repository-Modus definiert es den gewünschten Commit-Hash/Rev/Tag zum Auschecken beim Klonen des Repositorys
|
|
- Im Arbeitsbereich-Modus definiert es die gewünschte Tiefe, um das Repository zu klonen, was bei großen Git-Repositories wie `nixpkgs` nützlich ist.
|
|
|
|
Das war's buchstäblich!
|
|
|
|
## Modus-spezifische Konfig.
|
|
|
|
Für modusspezifische Konfigurationen, schauen Sie sich die folgenden Links an!
|
|
|
|
- [Workspace Mode](WORKSPACE_MODE.md)
|
|
- [Repository Mode](REPOSITORY_MODE.md)
|
|
|
|
## Beispiel
|
|
|
|
Funktionierende Konfigurationsbeispiele für beide Modi sind im Verzeichnis [examples](../examples) verfügbar!
|
|
|
|
## Verwendung
|
|
|
|
Alternativ können Sie sich auch den [Usage](usage) Guide ansehen!
|