Ricerca nel sito web

Scopri sempre in quale ramo Git ti trovi con questo trucco di Linux


Punti chiave

  • Lavorare con i rami in Git è semplice e veloce e siamo incoraggiati a farlo frequentemente come buona pratica lavorativa.
  • Dato che si tratta di un processo così banale, il cambio di ramo non sempre ti viene in mente.
  • Modifica il tuo prompt dei comandi per mostrare automaticamente il tuo ramo Git corrente e saprai sempre in quale ramo ti trovi.

Usare i rami in Git è così indolore, lo facciamo spesso. Tanto che tenere traccia della tua filiale attuale non è facile. Con questo trucco non dimenticherai mai il tuo ramo attuale.

Tenere traccia dei rami Git

I rami sono importantissimi nel controllo della versione. Ti consentono di lavorare su nuove funzionalità o modifiche al codice esistente, senza influenzare il ramo del codice sorgente principale.

Lavorare con i rami in Git è un gioco da ragazzi rispetto ad altri software di controllo della versione. La creazione di nuovi rami e la modifica dei rami sono processi molto leggeri, quindi avvengono in un batter d'occhio. E poiché è così semplice e veloce, gli sviluppatori tendono a farlo spesso.

È quasi troppo facile. Dato che Git rende il cambio di ramo una cosa banale, puoi farlo quasi inconsciamente come potresti cambiare directory. Ma essere consapevoli del settore in cui ci si trova è molto importante.

Questo trucco aiuta mostrando il tuo ramo Git corrente nel prompt dei comandi di Bash. E la parte bella è che, se la tua directory corrente non contiene un repository Git, vedrai il tuo normale prompt dei comandi.

Ottenere il ramo Git come stringa

Perché funzioni, dobbiamo essere in grado di ottenere il ramo Git corrente come una stringa di testo che inseriamo nel prompt dei comandi. Emettiamo il comando Git standard per elencare i rami nel repository.

git branch

Questo elenca tutti i rami nel repository. Il ramo corrente, partita salvata, è contrassegnato da un asterisco. Convenientemente, è l'unica riga con un asterisco al suo interno. Ciò significa che possiamo convogliare l'output del comando git in sed e utilizzare le funzionalità di manipolazione del flusso del comando sed per rimuovere le righe senza asterisco. Per l'unica riga rimanente, possiamo usare sed per rimuovere l'asterisco e lo spazio.

git branch | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'

Questo ci dà il nome del ramo attuale. Esistono modi più semplici per farlo, ma per ragioni di completezza, ecco come funziona questo comando.

Emettiamo il comando git branch standard.

git branch

L'output viene convogliato in sed. Esistono due espressioni sed. La prima espressione cancella le righe che non contengono un asterisco.

-e '/^[^*]/d'

La seconda espressione rimuove l'asterisco e lo spazio iniziali dall'unica riga rimanente.

-e 's/* \(.*\)/\1/'

Funziona, ma non tutti hanno familiarità o si sentono a proprio agio con sed. Quando lo considereremo tra sei mesi, avrà probabilmente senso? Possiamo sfruttare git e Bash per progettare un metodo più semplice.

L'operatore Bash && ci consente di concatenare i comandi in modo che vengano eseguiti uno dopo l'altro. Affinché un comando nella catena venga eseguito, il comando precedente deve essere completato correttamente. Come vedremo, possiamo sfruttare questo vantaggio.

Un'altra cosa che gioca a nostro favore è che, a partire dalla versione 2.2, il comando git branch ha un'opzione chiamata --show-current. Questo visualizza da solo il nome del ramo corrente.

git branch --show-current

Questo è un modo più semplice per ottenere il nome semplice dell’attuale ramo Git. L'unico problema è che genera un messaggio di errore se la directory corrente non contiene un repository Git. Quindi dobbiamo assicurarci che il comando non venga eseguito se non siamo in un repository Git.

C'è un comando git chiamato git status. Questo riporta sullo stato del repository Git. Se il comando fallisce, come accadrà se non ci sono repository su cui riferire, il suo valore di uscita è 128.

git status
echo $?

In una directory con un repository, il suo valore di uscita è zero.

git status
echo $?

Possiamo concatenare questo comando e il nostro comando git branch, quindi il comando git branch viene eseguito solo se il comando git status restituisce zero. L'altra cosa che faremo è reindirizzare tutto l'output dello schermo dal comando git status a /dev/null, uno pseudo file che consuma silenziosamente tutto ciò che gli viene inviato.

git status &> /dev/null && echo " $(git branch --show-current)"
cd taf
git status &> /dev/null && echo " $(git branch --show-current)"

Abbiamo soppresso tutto l'output del comando git status, che è esattamente ciò di cui abbiamo bisogno. All'interno di una directory che non contiene un repository, non è presente alcun output sullo schermo. All'interno di una directory contenente un repository, vediamo il nome del ramo corrente.

Potremmo semplicemente lasciare che il comando git branch scriva il nome del ramo corrente nella finestra del terminale così com'è, ma racchiudendolo in un comando echo, possiamo includere uno spazio iniziale. Lo spazio separerà il nome del ramo dal nome della directory nel prompt dei comandi, rendendolo più facile da vedere a colpo d'occhio.

Aggiunta della stringa al prompt di Bash

Abbiamo acquisito il nome dell'attuale ramo Git e abbiamo un modo per visualizzarlo sullo schermo, formattato con uno spazio iniziale. Ora lo incorporeremo nel prompt dei comandi.

Creeremo una funzione per contenere i comandi che abbiamo creato finora e chiameremo quella funzione dall'interno della definizione del prompt dei comandi. Ogni volta che viene visualizzato il prompt dei comandi, verrà chiamata la nostra funzione.

In Bash, la definizione del prompt dei comandi è solitamente (ma non sempre) nel file .bashrc. Questo è un file di sistema nascosto, situato nella tua directory home.

Usa il tuo editor preferito per modificare il file .bashrc.

Cerca la riga che definisce il tuo prompt dei comandi. Di solito inizia con:

PS1=

Su questo computer Ubuntu, la riga che vogliamo è:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

C'è un'altra riga "PS1=" sotto questa, ma è molto più breve. Se leggi cosa sta succedendo nel blocco if-then, vedrai che un prompt è per i display a colori e uno per quelli monocromatici. Se usi Git, sei un programmatore. Presto sarai in grado di capire quale prompt è quello con cui devi lavorare.

Aggiungeremo la nostra funzione sopra il blocco if-then. Lo chiamo get_git_branch.

Contiene gli stessi comandi che abbiamo utilizzato sulla riga di comando. Ora dobbiamo determinare da dove chiamare la funzione, nella definizione del prompt dei comandi.

Questa è la fine della definizione del prompt.

\w\[\033[00m\]\$ '

Ecco come è composto.

\w

Si tratta di un token che viene sostituito con la directory di lavoro quando viene visualizzato il prompt dei comandi.

\[\033[00m\]

Questo è un codice colore ASCII. Ripristina il colore del testo su bianco, in modo che il simbolo del dollaro "$" nel prompt venga visualizzato in testo bianco.

\$ '

Verrà visualizzato il simbolo del dollaro, uno spazio, quindi la definizione del prompt dei comandi verrà chiusa con una virgoletta singola.

Chiameremo la nostra funzione immediatamente dopo il token "\w". Inseriremo anche un codice colore per visualizzare il ramo corrente di Git in giallo, per farlo risaltare. Questo è il testo che inseriremo.

\[\033[01;33m\]$(get_git_branch)

Nota che non ci sono spazi nel testo inserito. Ecco come appare il prompt dei comandi completo con le nostre aggiunte.

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;33m\]$(get_git_branch)\[\033[00m\]\$ '

Salva le modifiche e chiudi l'editor. Chiudi le finestre del terminale e apri una nuova finestra del terminale. Vedrai un normale prompt dei comandi. Passare a una directory contenente un repository Git.

pwd
cd taf

Il nome del ramo Git corrente viene visualizzato in giallo. Se estrai un ramo diverso, il prompt dei comandi cambia immediatamente.

git checkout timed-events

Non è solo per Git

Puoi utilizzare questo metodo per visualizzare qualsiasi tipo di informazione che puoi raccogliere con gli strumenti da riga di comando.

Ad esempio, se crei questa funzione e la chiami dal tuo prompt invece di chiamare get_git_branch, vedrai l'ora nel tuo prompt.

get_time() {
  echo " $(date +%r)"
}

Articoli correlati: