Ricerca…
Alias semplici
Ci sono due modi per creare alias in Git:
- con il file
~/.gitconfig
:
[alias]
ci = commit
st = status
co = checkout
- con la riga di comando:
git config --global alias.ci "commit"
git config --global alias.st "status"
git config --global alias.co "checkout"
Dopo aver creato l'alias, digita:
-
git ci
invece digit commit
, -
git st
invece digit status
, -
git co
invece digit checkout
.
Come con i normali comandi git, gli alias possono essere usati accanto agli argomenti. Per esempio:
git ci -m "Commit message..."
git co -b feature-42
Elenca / cerca gli alias esistenti
Puoi elencare gli alias git esistenti usando --get-regexp
:
$ git config --get-regexp '^alias\.'
Ricerca di alias
Per cercare alias , aggiungi quanto segue al tuo .gitconfig
in [alias]
:
aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"
Allora puoi:
-
git aliases
: mostra TUTTI gli alias -
git aliases commit
- solo alias contenenti "commit"
Alias avanzati
Git ti permette di usare comandi non git e la sintassi completa di sh
shell nei tuoi alias se li prefissi !
.
Nel tuo file ~/.gitconfig
:
[alias]
temp = !git add -A && git commit -m "Temp"
Il fatto che la sintassi completa della shell sia disponibile in questi alias prefissi significa anche che è possibile utilizzare le funzioni della shell per costruire alias più complessi, come quelli che utilizzano gli argomenti della riga di comando:
[alias]
ignore = "!f() { echo $1 >> .gitignore; }; f"
L'alias precedente definisce la funzione f
, quindi la esegue con qualsiasi argomento passato all'alias. Quindi git ignore .tmp/
aggiungerebbe .tmp/
al file .gitignore
.
In effetti, questo modello è così utile che Git definisce per te variabili di $1
, $2
, ecc., Quindi non devi neanche definire una funzione speciale per questo. (Ma tieni presente che Git aggiungerà comunque gli argomenti, anche se l'accesso avviene tramite queste variabili, quindi potresti voler aggiungere un comando fittizio alla fine.)
Si noti che gli alias hanno il prefisso !
in questo modo vengono eseguiti dalla directory principale del tuo git checkout, anche se la tua directory corrente è più profonda nella struttura. Questo può essere un modo utile per eseguire un comando dalla radice senza doverli cd
esplicitamente.
[alias]
ignore = "! echo $1 >> .gitignore"
Ignora temporaneamente i file tracciati
Per contrassegnare temporaneamente un file come ignorato (passa il file come parametro per l'alias) - digitare:
unwatch = update-index --assume-unchanged
Per avviare nuovamente il file di tracciamento, digita:
watch = update-index --no-assume-unchanged
Per elencare tutti i file che sono stati temporaneamente ignorati - digitare:
unwatched = "!git ls-files -v | grep '^[[:lower:]]'"
Per cancellare l'elenco non selezionato, digitare:
watchall = "!git unwatched | xargs -L 1 -I % sh -c 'git watch `echo % | cut -c 2-`'"
Esempio di utilizzo degli alias:
git unwatch my_file.txt
git watch my_file.txt
git unwatched
git watchall
Mostra un bel registro con un grafico di ramo
[alias]
logp=log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
lg = log --graph --date-order --first-parent \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
lgb = log --graph --date-order --branches --first-parent \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
lga = log --graph --date-order --all \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
Ecco una spiegazione delle opzioni e dei segnaposto usati nel formato - --pretty
(la lista esauriente è disponibile con il git help log
)
--graph - disegna l'albero di commit
--date-order - usa l'ordine di timestamp del commit quando possibile
--first-parent - segui solo il primo genitore sul nodo unione.
--branches - mostra tutti i rami locali (per impostazione predefinita, viene mostrato solo il ramo corrente)
--tutto - mostra tutti i rami locali e remoti
% h - valore hash per commit (abbreviato)
% annuncio - Data timbro (autore)
% a - Nome utente dell'autore
% a - Impegna il nome utente
% C (auto): per utilizzare i colori definiti nella sezione [colore]
% Creset: per ripristinare il colore
% d - --decorate (nomi di branch e tag)
% s - messaggio di commit
% annuncio - data dell'autore (seguirà la direttiva --data) (e non la data del committente)
% un - nome dell'autore (può essere% cn per il nome del committente)
Aggiornamento del codice mantenendo una cronologia lineare
A volte è necessario mantenere una cronologia lineare (non ramificata) del proprio codice. Se lavori su un ramo per un po 'di tempo, questo può essere complicato se devi fare una git pull
regolare dato che registrerà un'unione con upstream.
[alias]
up = pull --rebase
Questo si aggiornerà con il tuo sorgente upstream, quindi riapplicherà qualsiasi lavoro che non hai spinto in cima a quello che hai tirato giù.
Usare:
git up
Guarda quali file vengono ignorati dalla tua configurazione .gitignore
[ alias ]
ignored = ! git ls-files --others --ignored --exclude-standard --directory \
&& git ls-files --others -i --exclude-standard
Mostra una riga per file, quindi puoi grep (solo directory):
$ git ignored | grep '/$'
.yardoc/
doc/
O contare:
~$ git ignored | wc -l
199811 # oops, my home directory is getting crowded
Scansa i file in scena
Normalmente, per rimuovere i file che vengono messi in scena per essere impegnati usando il commit di re git reset
, reset
ha molte funzioni a seconda degli argomenti forniti. Per rimuovere completamente lo staging di tutti i file, possiamo fare uso di alias git per creare un nuovo alias che usa reset
ma ora non abbiamo bisogno di ricordarci di fornire gli argomenti corretti da reset
.
git config --global alias.unstage "reset --"
Ora, ogni volta che vuoi scaricare i file degli stadi, digita git unstage
e sei a posto.