Clonare un repository
Situazione
Volete clonare un repository con un normale client Git e lavorarci in locale, e non sapete quale indirizzo e quali credenziali valgano.
Via di soluzione
Il wiki mette a disposizione i repository attraverso un endpoint Git proprio. Un client Git gli parla come a qualsiasi server HTTP: clone, fetch, pull e push funzionano immutati. L'autenticazione avviene via HTTP Basic con un token di accesso personale, non con la password del wiki.
L'indirizzo completo è sulla schermata del repository sotto Dieses Repository beziehen. Lì viene stampato e non composto a mano — dipende dall'indirizzo di questo wiki e dal namespace su cui il repository è montato. Un indirizzo finito ha questo aspetto:
https://www.wvds.it/wiki/lib/plugins/wkdoadogit/git.php/code/dokuwiki-plugins/wkdoadogit
Questo è l'indirizzo di questo repository su questa installazione. Per ogni altro repository leggetelo dalla sua schermata.
Esecuzione
- Create un token di accesso, se non ne avete ancora uno: Token di accesso. La guida completa è sotto Creare un token di accesso.
- Aprire Repository e scegliere il repository.
- Espandere Dieses Repository beziehen e prendere l'indirizzo con Kopieren. Senza JavaScript attivo il pulsante non compare; basta allora un clic nel campo dell'indirizzo, che lo seleziona per intero.
- Clonare con il client Git che preferite. Da riga di comando:
git clone https://www.wvds.it/wiki/lib/plugins/wkdoadogit/git.php/code/dokuwiki-plugins/wkdoadogit
- Git chiede nome utente e password. Inserire:
| Campo | Valore |
|---|---|
| Nome utente | qualsiasi — l'endpoint non lo verifica |
| Password | il vostro token di accesso personale |
- Perché Git non chieda di nuovo a ogni chiamata, depositate il token una volta nell'archivio delle credenziali. Git per Windows ne porta uno:
git config --global credential.helper manager
In alternativa i pulsanti In VS Code öffnen e In JetBrains öffnen consegnano lo stesso indirizzo a un ambiente di sviluppo installato. VS Code apre la sua finestra di clonazione con l'indirizzo precompilato; con JetBrains la Toolbox prende in carico la chiamata e crea il progetto nell'IDE usato per ultimo. Se il programma non è installato non succede nulla — il browser non ha allora a chi consegnare il protocollo.
Osservazioni
Il nome utente è davvero indifferente. L'endpoint legge la password Basic e ricorre al nome utente solo in sostituzione; il token da solo determina l'identità. Chi cerca il nome utente «giusto» cerca qualcosa che non ha parte. L'unica eccezione: non lasciate vuoto il campo della password, altrimenti il nome utente viene letto come token e l'autenticazione fallisce.
Quattro livelli, e il livello per clonare non basta per restituire. Ciò che l'endpoint accetta dipende dal permesso sul namespace su cui il repository è montato:
| Il vostro livello | clone / fetch / pull | push |
|---|---|---|
| vedere | rifiutato | rifiutato |
| ottenere | funziona | rifiutato |
| proporre | funziona | solo sotto il proprio prefisso di branch |
| scrivere | funziona | senza restrizioni |
Quale livello abbiate lo assegna il mount del repository. I quattro modelli per questo assegnano vedere, ottenere e scrivere; il livello proporre nasce solo da una regola scritta apposta ed è perciò il caso raro. Se nella sezione Dieses Repository beziehen c'è l'avviso di accesso in sola lettura, avete ottenere: un push viene rifiutato e la via passa per Richiedere l'accesso.
Solo al livello proporre decide inoltre il nome del branch. Vengono allora accettati soltanto i branch sotto il vostro prefisso — refs/heads/users/<vostro nome utente wiki>/<tema> — e un push su main viene respinto con push refused: outside_own_prefix prima che un byte raggiunga il sistema sorgente. Al livello scrivere questa barriera non vale. Dove vale, lavorate subito su un branch dal nome adatto; per il nome utente mmuster:
git switch -c users/mmuster/interruzione-tabelle git commit -am "Le tabelle vanno a capo su schermi stretti" git push -u origin users/mmuster/interruzione-tabelle
Se avete già fatto commit su un branch dal nome diverso, indicate esplicitamente la destinazione nel push invece di rinominare il branch:
git push origin HEAD:refs/heads/users/mmuster/interruzione-tabelle
Che cosa accada poi al branch è sotto Inviare una modifica.
Un repository pubblico si può clonare senza token. L'endpoint consente un clone anonimo dove il mount lo permette esplicitamente. Un token vi serve solo quando il repository non è pubblico o volete restituire qualcosa; in forma anonima un push non viene accettato in nessun caso.
Più indirizzi con un mount multilingue. Se un repository è montato in più namespace linguistici, la sezione elenca un indirizzo per namespace. Per un clone ne basta uno; portano allo stesso repository ma sottostanno ciascuno alle regole del proprio namespace. I due pulsanti per l'IDE consegnano sempre il primo — quale lingua abbia una copia di lavoro, per un clone non ha importanza.
Quando l'autenticazione viene richiesta ripetutamente. L'endpoint risponde 401 finché non arriva un token valido, e Git chiede di nuovo. Un token revocato o incollato male ha lo stesso aspetto di nessun token. Verificate il token sotto Token di accesso e nel dubbio createne uno nuovo.
Argomenti correlati
- Clonare un repository montato — lo stesso compito dal lato del plugin, con la tabella dei livelli di permesso necessari