Comment utiliser awkpour afficher uniquement les lignes +et -, en tenant compte de toute couleur ou de la mise en forme du texte git diff:
Pas une seule des autres réponses ici (y compris mon autre réponse ) ne fera exactement ce que vous voulez à 100% correctement. Cette réponse, cependant, le sera. Voici un 1-liner que vous pouvez copier et coller dans votre terminal.Je viens de le faire en plusieurs lignes pour plus de lisibilité - vous pouvez le copier-coller de la même manière, donc je ferais aussi bien de le rendre lisible! Il repose sur le awklangage de programmation:
git diff --color=always "$@" | awk '
# 1. Match and then skip "--- a/" and "+++ b/" lines
/^(\033\[(([0-9]{1,2};?){1,10})m)?(--- a\/|\+\+\+ b\/)/ {
next
}
# 2. Now print the remaining "+" and "-" lines ONLY! Note: doing step 1 above first was required or
# else those lines would have been matched by this matcher below too since they also begin with
# the "+" and "-" symbols.
/^(\033\[(([0-9]{1,2};?){1,10})m)?[-+]/ {
print $0
}
' | less -RFX
Voici ses caractéristiques. Toutes ces fonctionnalités, prises ensemble, résolvent les lacunes de toutes les autres réponses ici:
- Il gère la sortie couleur ET sans couleur. C'est ce que fait cette expression régulière:
^(\033\[(([0-9]{1,2};?){1,10})m)?
- Il gère TOUTES LES COULEURS et TOUTES LES OPTIONS DE FORMATAGE DE TEXTE, y compris le gras, l'italique, le barré, etc., que vous pouvez définir dans vos
git configparamètres . C'est pourquoi le regex ci-dessus a;? et{1,10} : s'il détecte le début d'un code de formatage de couleur ou de texte, il correspondra à jusqu'à 10 séquences de ces codes ANSI combinés.
Il n'inclut PAS également les lignes commençant par @@et le mot diff, comme le fait la réponse acceptée . Si vous voulez ces lignes (qui, franchement, je pense qu'elles sont utiles :)), faites ceci à la place:
git diff --unified=0
ou
git diff -U0
Il affiche la sortie de la même manière exacte que le git diffferait: dans le lesspager avec sortie couleur optionnelle ( -R), et seulement si le texte est> 1 page ( -F), et tout en conservant la page de texte actuelle à l'écran lorsque vous quit ( -X) .
Il a également l'avantage d'être puissant et facilement configurable car il utilise le langage de programmation awk.
Si vous souhaitez apprendre awk , voici quelques ressources:
gawk(GNU awk) manuel: https://www.gnu.org/software/gawk/manual/html_node/index.html#SEC_Contents
- Étude
git diffnet commentaires y afférents : https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/git-diffn.sh
- Si vous voulez
git diffnaussi, qui est git diffavec les numéros de ligne, voir ici: Git diff avec les numéros de ligne (Git log avec les numéros de ligne)
- Quelques exemples de tests de syntaxe et de «bonjour le monde» awk: https://github.com/ElectricRCAircraftGuy/eRCaGuy_hello_world/tree/master/awk
En prime, j'ai également résumé ce qui précède pour être utilisé comme git diffc, ce qui signifie "git diff pour afficher UNIQUEMENT les 'c'hanges". L'utilisation est identique à git diff; utilisez simplement à la git diffcplace! Il prend en charge TOUTES les options. La couleur est activée par défaut. Pour le désactiver, utilisez simplement git diffc --no-colorou git diffc --color=never. Voir man git diffpour plus de détails.
Depuis que je viens de terminer git diffn(un outil à afficher git diffavec des numéros de lignes) hier soir, l'écriture git diffcétait triviale. J'ai pensé que je ferais mieux de le faire maintenant pendant que les connaissances sont fraîches dans ma tête.
Installer git diffc:
Suivez les instructions à la fin de cette réponse ici , sauf partout où vous voyez git-diffndans les instructions, utilisez git-diffcplutôt. Cela inclut aussi dans la wgetcommande. Le téléchargement et l'installation git diffcsont faciles: il ne s'agit que de quelques commandes.