2 votes

Est-ce que tout VCS a implémenté une fonctionnalité pour voir l'historique des changements de section ?

Existe-t-il des logiciels de contrôle de version (VCS) qui ont implémenté la possibilité de voir l'historique des modifications d'une section ?

Par exemple, je suppose qu'il existe un dépôt VCS nommé foo. Et il contient un historique des créations de fichiers et des modifications effectuées.

Liste des fichiers du dépôt foo:

main.c

Historique:

998ecf8 Actuel
d41d8cd Changer le message
98f00b2 Passage au style K&R
04e9800 Commit initial

998ecf8 Actuel: main.c (omis ci-dessous):

#include 
int main() {
    puts("Bonjour, monde !");
}

d41d8cd Changer le message:

#include 
int main()
{
    puts("Salut, monde !");
}

98f00b2 Passage au style K&R:

#include 
int main()
{
    puts("Bonjour, monde !");
}

04e9800 Commit initial:

#include 
int main() {
    puts("Bonjour, monde !");
}

Maintenant, je vais obtenir tout l'historique des modifications d'une section Salut, monde, dans main.c.

$ vcs find 'Salut, monde'
"Salut, monde" a d'abord été ajouté à 98f00b2->d41d8cd:4.

 #include 
 int main()
 {
-    puts("Bonjour, monde !");
+    puts("Salut, monde !");
 }

"Salut, monde" a été supprimé à d41d8cd:4->998ecf8.

 #include 
-int main()
-{
+int main() {
-    puts("Salut, monde !");
+    puts("Bonjour, monde!");
 }

Est-il possible de le faire en cache ? Si oui, quel VCS prend en charge cette fonctionnalité ? Sinon, quels algorithmes doivent être implémentés pour cela ?

0voto

Rogério Peixoto Points 1310

Je pense que c'est réalisable en utilisant git et un peu de shell-fu. Construisez un script, d'abord vous pourriez obtenir la liste des hachages de commit des occurrences de votre terme de recherche pendant l'historique de votre dépôt en utilisant :

git rev-list --all | xargs git grep "Salut, le monde"

N'oubliez pas que vous devriez placer votre terme de recherche dans un motif regex, puis construire une fonction pour itérer sur ces hachages et utiliser ceci pour afficher les changements pour l'ancêtre immédiat :

git diff COMMIT^ COMMIT

Ajoutez ces résultats à la sortie et apportez les ajustements nécessaires pour le format désiré.

0voto

jthill Points 10384

git log propose des options pour couvrir à peu près tout ce que vous pourriez entendre par cela. Il y a -L, qui suit une plage de lignes par motif ou par plage de lignes (de début), -G qui recherche les changements qui affectent un motif particulier, et -S qui recherche les commits qui modifient le nombre de fois qu'une chaîne apparaît.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X