51 votes

algorithme git diff qui ne déchire pas les fonctions? (diff de langue)

Est-il possible de configurer git diff à l'égard de l'indentation et de la syntaxe? Je ne parle pas ignorant l'indentation et des espaces, mais plutôt d'utiliser les lignes vides, des niveaux d'indentation et éventuellement des parenthèses, pour mieux jumeler les vieilles lignes de lignes nouvelles.

E. g. git diff souvent par le biais de coupes de fonctions et de leur docblock, comme ceci:

 class C {

   /**
+   * Goes to the bar.
+   */
+  function bar() {
+    return 'bar';
+  }
+
+  /**
    * Gets your foo up to date.
    */
   function foo() {

Lorsque je préfère

 class C {
+
+  /**
+   * Goes to the bar.
+   */
+  function bar() {
+    return 'bar';
+  }

   /**
    * Gets your foo up to date.
    */
   function foo() {

Dans cet exemple, il est encore tout à fait inoffensif, mais il y a des exemples où les fonctions et leur docblock sont vraiment déchiré en raison de la gourmande et naïf diff mise en œuvre.

Note: j'ai déjà configuré *.php diff=php en ~/.gitattributes.

EDIT: un Autre exemple: Ici git diff mélange une propriété docblock avec une méthode docblock:

   /**
-   * @var int
+   * @param string $str
    */

5voto

henko Points 468

Je ne sais pas comment faire cela uniquement avec git, mais il existe au moins un outil commercial (c’est-à-dire qui coûte de l’argent) qui traite ce type de problèmes, appelé SemanticMerge .

Il peut gérer un grand nombre de cas intéressants et supporte C #, Java et partiellement C. Vous pouvez configurer git pour l'utiliser comme outil de fusion.

(Je ne suis pas affilié.)

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