URL-Slug aus einem Git-Branch-Namen erstellen
Wandeln Sie einen Git-Branch-Namen wie feature/add-user-login in einen kurzen, URL-tauglichen Slug um, ohne das Workflow-Präfix zu übernehmen.
Im Browser ausführen – kostenlos
Die Funktion erkennt das erste Pfadsegment als Branch-Typ, verwendet alles danach als Beschreibung und normalisiert diesen Teil zu kleingeschriebenen, durch Bindestriche getrennten Wörtern. Sie arbeitet deterministisch und ohne Netzwerkzugriff. Enthält der Branch zwar ein Präfix, aber keine brauchbare Beschreibung, erhalten Sie eine eindeutige Fehlermeldung.
Trennen Sie Workflow-Metadaten von der nützlichen Beschreibung
Git-Teams beginnen Branch-Namen häufig mit einem Workflow-Typ wie feature, fix, chore, release oder docs. Dieses erste Segment hilft Menschen und Automatisierungen, den Zweck eines Branches zu erkennen, ist in einer öffentlichen URL jedoch meist überflüssig. Diese Funktion behandelt den Text vor dem ersten Schrägstrich als Typpräfix und leitet den Slug ausschließlich aus dem nachfolgenden Inhalt ab. So wird feature/add-user-login zu add-user-login und fix/checkout/payment-timeout zu checkout-payment-timeout. Verschachtelte Beschreibungspfade bleiben als Wörter erhalten, damit Ihr Team aussagekräftige Bereiche bewahren kann, ohne Schrägstriche in der endgültigen URL zu verwenden. Ein optionales Präfix refs/heads/, das Git-Werkzeuge und Systeme für kontinuierliche Integration häufig liefern, wird vor der Auswertung entfernt. Der Vorgang arbeitet nicht mit einer festen Liste zulässiger Branch-Typen. Jedes nicht leere erste Segment kann als Präfix dienen. Dadurch gilt dieselbe Regel auch für eigene Konventionen wie spike, experiment, maintenance oder einen von Ihrer Organisation festgelegten Ticketablauf.
Verstehen Sie die genaue Normalisierung des Slugs
Nach der Auswahl des beschreibenden Teils führt der Algorithmus eine feste Folge von Umwandlungen aus. Er entfernt äußere Leerzeichen, normalisiert lateinische Buchstaben mit Akzenten, wandelt Buchstaben in Kleinschreibung um, ersetzt jede Folge außerhalb von ASCII-Buchstaben und Ziffern durch einen Bindestrich und entfernt Bindestriche am Anfang und Ende. Schrägstriche, Leerzeichen, Unterstriche, Satzzeichen und wiederholte Trennzeichen ergeben deshalb dieselbe URL-sichere Form. Ein Branch wie feature/Account Settings_v2 wird zu account-settings-v2. Das Ergebnis ist bewusst vorhersehbar: Sprachmodelle, Wörterbücher, Netzwerkabfragen, Zufallswerte, Zeitangaben und Repository-Zustände spielen keine Rolle. Die Funktion erfindet keine Wörter und deutet keine Ticketkennungen. Bereits vorhandene Zahlen bleiben erhalten, was bei Namen wie fix/PROJ-482-login-loop hilfreich ist. Da die Normalisierung Symbole und nicht unterstützte Schriften entfernen kann, prüft die Funktion außerdem, ob mindestens ein verwendbarer Buchstabe oder eine Ziffer übrig bleibt. Besteht die Beschreibung nur aus Satzzeichen oder ungeeigneten Zeichen, wird ein Eingabefehler ausgegeben und nicht unbemerkt ein leerer Wert erzeugt.
Setzen Sie das Ergebnis sicher beim Publizieren ein
Das zurückgegebene Objekt enthält nur das Feld slug und kann daher unmittelbar eine Dokumentationsvorschau, die URL einer kurzlebigen Umgebung, einen Pfad für Versionshinweise, eine Änderungsseite oder einen Veröffentlichungsablauf für Pull Requests versorgen. Prüfen Sie das Ergebnis vor dem Reservieren einer Route, wenn Ihr Ziel zusätzliche Regeln besitzt, etwa eine Höchstlänge, geschützte Pfade oder die Forderung nach Eindeutigkeit. Diese Funktion fragt weder Ihren Router noch den Hosting-Anbieter, Git-Dienst oder die Inhaltsdatenbank ab und kann deshalb nicht erkennen, ob der Slug bereits vergeben ist. Sie prüft auch nicht, ob die Eingabe tatsächlich als Branch im Repository vorhanden ist, sondern wendet nur die dokumentierte Namenskonvention an. Namen ohne Schrägstrich, Namen direkt nach dem Typpräfix und Beschreibungen, die einen leeren Slug ergeben, werden abgewiesen. Dieses strenge Fehlerverhalten verhindert in Automatisierungen, dass fehlerhafte Quellen versehentlich unter einer leeren oder allgemeinen Route veröffentlicht werden. Bei Nutzung der API gilt pro Anfrage der veröffentlichte Grundpreis von $0.002. Für einzelne Umwandlungen läuft dieselbe deterministische Verarbeitung im Browser.
Anwendungsfälle
Vorschau-Bereitstellung benennen
Machen Sie aus einem Feature-Branch einen lesbaren Pfad für eine isolierte Prüfumgebung, ohne das Workflow-Präfix zu übernehmen.
Pfad für Versionshinweise erzeugen
Leiten Sie für generierte Hinweise ein einheitliches URL-Segment aus der Beschreibung eines release- oder fix-Branches ab.
Pull-Request-Links vereinheitlichen
Normalisieren Sie verschachtelte Branch-Beschreibungen zu stabilen kleingeschriebenen Links für Dokumentation und Automatisierung.
Häufige Fragen
Was gilt als Typpräfix?
Das erste nicht leere Segment vor dem ersten Schrägstrich. Es kann feature, fix, chore oder ein beliebiger Typ Ihres Teams sein.
Was geschieht mit verschachtelten Branch-Pfaden?
Alle Segmente nach dem ersten Schrägstrich gehören zur Beschreibung; ihre Trennzeichen werden im Slug zu Bindestrichen.
Kann ich einen vollständigen refs/heads-Namen eingeben?
Ja. Der Anfang refs/heads/ wird entfernt, bevor Typpräfix und beschreibender Teil bestimmt werden.
Warum scheitert ein Branch ohne Schrägstrich?
Die Funktion verlangt ein getrenntes Typpräfix und einen beschreibenden Teil; ein einzelner ungetrennter Name ist mehrdeutig.
Wird geprüft, ob der Branch existiert?
Nein. Es findet nur eine deterministische Textverarbeitung statt, ohne Verbindung zu einem Repository oder Git-Hosting-Dienst.
Was kostet eine API-Anfrage?
Jede API-Anfrage nutzt den veröffentlichten Grundpreis von $0.002; die Browser-Version führt dieselbe Umwandlung lokal aus.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/dev/slug-from-git-branch \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"branch":"feature/add-user-login"}'const res = await fetch("https://api.kit.forhosting.com/dev/slug-from-git-branch", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"branch": "feature/add-user-login"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/slug-from-git-branch",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"branch": "feature/add-user-login"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/slug-from-git-branch", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"branch":"feature/add-user-login"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"branch":"feature/add-user-login"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/slug-from-git-branch", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"branch": "feature/add-user-login"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.slug_from_git_branch",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |