Puis-je demander à git de ne montrer que les lignes qui ont été modifiées et d'ignorer tout le reste du code qui n'a pas été modifié ?
Et de le commentaire de suivi du PO sous la réponse principale :
Merci pour cette réponse rapide. Cela résout la moitié de mon problème, mais j'obtiens toujours des lignes telles que @@ -1 +1 @@
dans mon diff et en haut de mon git diff ont diff --git a/db/xxxxxxx b/db/xxxx index xxxxx..aaaaaaa bbbbbbbb
. -r3b00t
Pour résoudre les deux demandes ci-dessus, voici la solution en 1 ligne qui utilise la méthode git-diffc.sh
awk
-que j'ai écrit autour de git diff
:
git diffc
C'est fait !
Voici les caractéristiques de git diffc
.
Toutes ces caractéristiques, prises ensemble, résoudre les défauts de toutes les autres réponses ici :
-
Il gère les sorties en couleur ET sans couleur. C'est ce que fait cette expression régulière : ^(\033\[(([0-9]{1,2};?){1,10})m)?
-
Il prend en charge TOUTES LES COULEURS et TOUTES LES OPTIONS DE MISE EN FORME DU TEXTE, y compris le gras, l'italique, le barré, etc. dans votre git config
paramètres . C'est pourquoi la regex ci-dessus a ;?
y {1,10}
en lui : s'il détecte le début d'un code de couleur ou de formatage de texte, il fera correspondre jusqu'à 10 séquences de ces codes ANSI combinés.
-
Il ne comprend PAS également les lignes qui commencent par @@
et le mot diff
comme le réponse acceptée fait. Si vous voulez vraiment ces lignes (qui, très franchement, sont utiles :) ), faites ceci à la place :
git diff --unified=0
ou
git diff -U0
-
Il montre la sortie de la même façon que git diff
serait : dans le less
pager avec sortie couleur optionnelle ( -R
), et seulement si le texte est > 1 page ( -F
), et tout en conservant la page de texte en cours à l'écran lorsque vous utilisez la fonction q
uit ( -X
).
Il a également l'avantage d'être puissant et facilement configurable puisqu'il utilise le langage de programmation awk.
Exemple de sortie de git diff 8d4d4fd3b60f200cbbb87f2b352fb097792180b2~2..8d4d4fd3b60f200cbbb87f2b352fb097792180b2~3
:
diff --git a/useful_scripts/rg_replace.sh b/useful_scripts/rg_replace.sh
index 74bc5bb..0add69d 100755
--- a/useful_scripts/rg_replace.sh
+++ b/useful_scripts/rg_replace.sh
@@ -2,12 +2,11 @@
# This file is part of eRCaGuy_dotfiles: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
-# STATUS: functional and ready-to-use
-
+# WORK IN PROGRESS! <===========
# This is a simple wrapper around RipGrep (`rg`) to allow in-place find-and-replace, since the
# `rg --replace` option replaces only the stdout, NOT the contents of the file.
# `man rg` under the `--replace` section states: "Neither this flag nor any other ripgrep
-# flag will modify your files." This wrapper overcomes that limitation.
+# flag will modify your files."
# INSTALLATION INSTRUCTIONS:
# 1. Install RipGrep: https://github.com/BurntSushi/ripgrep#installation
par rapport à l'échantillon de sortie de git diffc 8d4d4fd3b60f200cbbb87f2b352fb097792180b2~2..8d4d4fd3b60f200cbbb87f2b352fb097792180b2~3
. Remarquez que seuls -
y +
sont affichées, tandis que les lignes de contexte environnantes sont supprimées, et toutes les autres lignes telles que diff
, index
, ---
, +++
et @@
sont partis aussi !
-# STATUS: functional and ready-to-use
-
+# WORK IN PROGRESS! <===========
-# flag will modify your files." This wrapper overcomes that limitation.
+# flag will modify your files."
git diffc
signifie "git diff c hanges", c'est-à-dire : montrer uniquement les modifié lignes de code, rien d'autre. C'est moi qui l'ai écrit. Il ne fait pas partie du git normal.
Il supporte TOUTES les options et paramètres supportés par git diff
puisqu'il ne s'agit que d'une enveloppe légère autour de l'application git diff
.
Téléchargez-le ici : git-diffc.sh . Il fait partie de mon eRCaGuy_dotfiles repo.
Pour l'installer :
git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
cd eRCaGuy_dotfiles/useful_scripts
mkdir -p ~/bin
ln -si "${PWD}/git-diffc.sh" ~/bin/git-diffc
Maintenant, déconnectez-vous manuellement et reconnectez-vous, si c'est la première fois que vous créez ou utilisez l'outil de gestion de l'identité de l'utilisateur. ~/bin
afin de faire en sorte que le programme par défaut d'Ubuntu ~/.profile
pour ajouter ~/bin
à votre PATH
variable. Si le fait de se déconnecter et de se reconnecter ne fonctionne pas, ajoutez les quelques lignes de code suivantes à votre fichier ~/.profile
puis déconnectez-vous d'Ubuntu et reconnectez-vous :
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
C'est ça !
Utilisation : même que git diff
. Ex :
git diffc
git diffc -h
git diffc commit1 commit2
git diffc --no-color
# etc.
Remarques supplémentaires sur l'installation :
Voir aussi la section sur l'installation de mon autre réponse concernant git diffn
que j'ai également écrit, ici . Sauf que, partout où vous voyez git-diffn
dans ces instructions, utilisez git-diffc
à la place. Cela inclut l'intérieur de la wget
commande aussi. Téléchargement et installation git diffc
est facile : il suffit de quelques commandes.
Mode d'emploi awk
pour ne montrer que le +
y -
lignes, en tenant compte de toute couleur ou mise en forme du texte. git diff
peut sortir :
Le code ci-dessous est ce qui compose le git diffc
l'emballage.
Pas une seule des autres réponses ici (y compris mon autre réponse ) fera exactement ce que vous voulez, de manière 100% correcte. Cette réponse, cependant, le fera. Voici une réponse en une ligne que vous pouvez copier et coller dans votre terminal. J'ai juste fait plusieurs lignes pour plus de lisibilité - vous pouvez le copier-coller de la même façon, alors autant le rendre lisible ! Il s'appuie sur le awk
le langage 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
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 diffn
et les commentaires qui y figurent : https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/git-diffn.sh
- Si vous voulez
git diffn
aussi, ce qui est git diff
avec les numéros de ligne, voir ici : Git diff avec numéros de ligne (Git log avec numéros de ligne)
- Quelques exemples d'awk "hello world" et de tests syntaxiques : https://github.com/ElectricRCAircraftGuy/eRCaGuy_hello_world/tree/master/awk
En bonus, j'ai aussi emballé ce qui précède pour l'utiliser comme git diffc
ce qui signifie "git diff pour ne montrer QUE les 'c'hanges'". L'utilisation est identique a git diff
; utilisez simplement git diffc
à la place ! Il prend en charge TOUTES les options. La couleur est activée par défaut. Pour la désactiver, utilisez simplement git diffc --no-color
o git diffc --color=never
. Voir man git diff
pour les détails.
Puisque je viens de terminer git diffn
(un outil pour montrer git diff
avec des lignes et des nombres) la nuit dernière, en écrivant git diffc
était insignifiante. Je me suis dit que je ferais mieux de le faire maintenant, pendant que les connaissances sont fraîches dans ma tête.