.git-blame-ignore-revs est une fonctionnalité Git introduite dans la version 2.23 qui vous permet d'ignorer des commits spécifiques dans les résultats de git blâme. Ceci est particulièrement utile pour les validations groupées qui modifient un grand nombre de lignes sans altérer la fonctionnalité réelle du code, comme les modifications de formatage, le renommage ou l'application de normes de codage dans une base de code. En ignorant ces changements non fonctionnels, git blâme peut se concentrer sur des modifications significatives qui expliquent le contexte et le raisonnement derrière le code.
Lorsque vous utilisez git blâme sur un fichier, il vous montre quel commit a modifié en dernier lieu chaque ligne du fichier, ainsi que l'auteur et l'horodatage. Ceci est utile pour déterminer pourquoi une ligne particulière a été modifiée. Cependant, si un commit important qui apporte des modifications purement de formatage, comme l'application d'une version plus jolie, fait partie de l'historique, git blâme peut pointer vers ce commit sur de nombreuses lignes. Cela rend difficile la recherche de l'historique réel des modifications fonctionnelles.
Par exemple, si votre équipe utilise un outil comme Prettier ou ESLint pour reformater l'intégralité de la base de code, la validation résultante peut toucher des milliers de lignes de code. Sans .git-blame-ignore-revs, git blâme montrerait ce commit comme responsable de chaque ligne affectée, ce qui pourrait obscurcir l'historique le plus significatif derrière chaque ligne.
En utilisant .git-blame-ignore-revs, vous pouvez dire à git blâme d'ignorer ces commits et de se concentrer sur les changements qui comptent.
Pour comprendre comment utiliser cette fonctionnalité, passons en revue un exemple du référentiel React.
Le code source de React inclut des validations groupées dans lesquelles des outils comme Prettier ont été exécutés sur l'ensemble du projet. Voici deux de ces commits :
2. Valider : fd2b3e1
Message : Compilateur : Unfork une configuration plus jolie
Ce commit contient d'autres mises à jour de la configuration Prettier, affectant tous les fichiers .ts et .tsx du référentiel.
Ces commits ne traitent que du formatage et ne fournissent pas de contexte significatif lorsqu'il s'agit de rechercher pourquoi une ligne de code a été écrite telle quelle.
Pour que git blâme ignore ces commits de formatage groupés, nous pouvons créer un fichier .git-blame-ignore-revs à la racine du référentiel.
touch .git-blame-ignore-revs
2. Ajoutez les hachages de validation pertinents au fichier, en expliquant pourquoi chaque validation est ignorée. Dans ce cas, nous ajouterons les deux commits que nous avons identifiés précédemment :
# Prettier formatting changes c998bb1ed4b3285398c9c7797135d3f060243c6a fd2b3e13d330a4559f5aa21462e1cb2cbbcf144b
3. Enregistrez le fichier .git-blame-ignore-revs dans le référentiel. Ce fichier peut être versionné avec votre code, permettant à toute l'équipe d'utiliser la même liste de commits ignorés.
Pour éviter de saisir l'option --ignore-revs-file à chaque fois que vous utilisez git scream, vous pouvez configurer Git pour qu'il utilise automatiquement le fichier .git-blame-ignore-revs.
git config blame.ignoreRevsFile .git-blame-ignore-revs
Cela garantit que chaque fois que quelqu'un exécute git Blame dans ce référentiel, Git ignorera automatiquement les commits répertoriés dans .git-blame-ignore-revs.
Voyons comment cela fonctionne dans la pratique. Sans ignorer les validations de formatage groupé, git blâme pourrait afficher :
$ git blame src/someFile.tsx c998bb1e (Joe Bloggs 2023-03-15 10:00:00 +0200 1) import React from 'react'; fd2b3e13 (Alan 2023-04-01 14:15:30 +0200 2) function App() { c998bb1e (Joe Bloggs 2023-03-15 10:00:00 +0200 3) return <div>Hello, world!</div>; fd2b3e13 (Ben 2023-04-01 14:15:30 +0200 4) }
Cette sortie indique que la dernière modification apportée aux lignes 1 et 3 était due à la validation de formatage Prettier (c998bb1e), et que les lignes 2 et 4 ont été modifiées dans une autre validation groupée (fd2b3e13). Puisqu'il s'agit de changements de format, cela n'est pas utile pour comprendre qui a introduit la véritable logique derrière ces lignes.
Après avoir configuré .git-blame-ignore-revs, exécuter git blâme ignorera les validations groupées et affichera le véritable historique :
$ git blame src/someFile.tsx a23d9b34 (May 2022-12-01 09:30:00 +0200 1) import React from 'react'; b12e45a6 (JJ 2022-12-05 11:45:15 +0200 2) function App() { a23d9b34 (Joe 2022-12-01 09:30:00 +0200 3) return <div>Hello, world!</div>; b12e45a6 (Ram 2022-12-05 11:45:15 +0200 4) }
Maintenant, git blâme attribue les lignes aux bons commits, ignorant les changements de formatage sans importance. Cela nous donne des informations utiles, montrant qui a effectué les modifications fonctionnelles réelles.
Git 2.23 の .git-blame-ignore-revs 機能は、一括書式設定やスタイル変更を伴うプロジェクトにとって大きな変革をもたらします。 .git-blame-ignore-revs ファイルをセットアップしてリポジトリを構成すると、Blame 履歴の汚染を心配することなく、コーディング標準を適用したり、Prettier などのツールを実行したり、コードをリファクタリングしたりできます。
このアプローチにより、チームは意味のある変更を追跡する機能を犠牲にすることなく、自信を持ってコードの品質と書式を向上させることができ、コードの各行の背後にある歴史と推論を理解するための貴重なツールとして gitblame を維持することができます。
Think Throo では、オープンソース プロジェクトで使用される高度なコードベース アーキテクチャの概念を教えることを使命としています。
Next.js/React の高度なアーキテクチャ概念を実践してコーディング スキルを 10 倍にし、ベスト プラクティスを学び、実稼働レベルのプロジェクトを構築します。
私たちはオープンソースです — https://github.com/thinkthroo/thinkthroo (スターを付けてください!)
コードベース アーキテクチャに基づいた高度なコースでチームのスキルを向上させます。詳細については、hello@thinkthroo.com までお問い合わせください。
https://github.com/facebook/react/blob/main/.git-blame-ignore-revs
https://gist.github.com/kateinoigakikun/b0bc920e587851bfffa98b9e279175f2
https://github.com/facebook/react/commit/c998bb1ed4b3285398c9c7797135d3f060243c6a
https://moxio.com/blog/ignoring-bulk-change-commits-with-git-blame/
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!