vc-partial-commit – faire un commit partiel

Table des matières

1 In English

1.1 Description

The idea is that after some happy hacking on a file, there are several unrelated changes in our working copy. For instance, while working on feature A, we hit bug B, so we corrected it before continuing to work on A. But, we want to commit "atomic changes" (e.g. only the correction to B, and then the new feature A), so we want to commit only part of thoses changes (as in "git add --patch"). So, we ask for the diff between our working copy and the last updated file, we keep only those hunks we want to keep, and commit that. And then we can make a second commit with the rest of the changes.

Since this package uses only Emacs' high-level VC commands, this feature is available to all VCS supported by Emacs.

1.2 Usage

When you are about to commit changes, press C-x v = (from a *vc-dir* buffer after marking some files, or directly from a file). This will bring up a *vc-diff* buffer in diff-mode. Edit the diff (k to delete a hunk, C-c C-s to split a hunk, etc.). When satisfied, press C-x v p, enter a comment in the buffer, and C-c C-c to commit the buffer.

You can actually use C-x v p from any buffer in diff-mode, as long as the filenames in the patch are relative to the patch location.

When not visiting a buffer in diff-mode, C-x v p will invoke (vc-diff nil).

1.3 Installation

The code is kept in my SVN repository, with a git mirror available. Retreive the .el file and put it somewhere in your load-path. Add (require 'vc-partial-commit) to your .emacs.

1.4 Bugs

There is no checking that the patch you created while in diff-mode will apply. If it doesn't, your working copy is going to be left in some intermediate state. In order to recover from that situation, run vc-partial-commit-restore-working-file. Maybe such situations should be detected and handled from vc-partial-commit itself.

Maybe we should register vc-partial-commit as a potential action in vc-next-action.

2 En Français

2.1 Description

Après une séance de code, il peut y avoir plusieurs modifications qui n'ont pas de rapport entre elles qui sont mélangées dans la copie locale. Typiquement, pendant que l'on travaille sur la fonctionnalité A, on tombe sur le bogue B, que l'on corrige. On voudrait ne committer que la correction de B, indépendemment de A, un peu à là git add --patch. On demande le diff entre notre copie de travail et le dernier commit, on ne garde que les morceaux qui nous intéressent, on committe cela. Ensuite, on peut faire un deuxième commit avec le reste des modifications.

Ce paquet n'utilisant que les commandes de VC d'Emacs, cette fonctionnalité est disponible dans tous les VCS gérés par Emacs.

2.2 Utilisation

Utilisez C-x v = (depuis un tampon *vc-dir* après avoir sélectionné certains fichiers, ou directement depuis un fichier). Ceci va créer un tampon *vc-diff* en mode diff-mode. Éditez le diff (k pour supprimer un hunk, C-c C-s pour diviser un hunk en deux morceaux, etc.). Lorsque le patch à committer est prêt, utilisez C-x v p, entrez un commentaire dans le tampon *vc-log*, et C-c C-c pour valider.

En fait, on peut utiliser C-x v p depuis tout tampon qui est en mode diff-mode, à condition que les chemins dans le diff soient resolvables depuis le dossier contenant le patch.

Lorsqu'on visite un tampon qui n'est pas en mode diff-mode, C-x v p appellera (vc-diff nil).

2.3 Installation

La version initiale est gardée dans SVN ; il y a un miroir git. Récupérer le fichier .el et le mettre quelque part dans load-path. Ajouter (require 'vc-partial-commit)) dans votre .emacs.

2.4 Bogues

Il n'y a pas de vérification que le patch créé s'applique correctement. Si ce n'est pas le cas, la copie de travail va se retrouver dans un état intermédiaire. Cela m'est déjà arrivé à cause de fichiers mélangeant les fins de ligne. Pour retomber sur ses pieds, utilisez vc-partial-commit-restore-working-file. De telles situations devraient probablement être détectées et gérées depuis vc-partial-commit.

On devrait peut-être considérer vc-partial-commit comme une action potentielle de vc-next-action.

Auteur : Frédéric Perrin (fred CHEZ resel POINT fr)

Date : 2015-06-06 sam 19:49

Sauf mention contraire, les textes de ce site sont sous licence Creative Common BY-SA.

Certains des articles sont publiés sur Planet Libre, l'aggrégateur des blogs de la communauté francophone du Logiciel Libre.

Ce site est produit avec des logiciels libres 100% élevés au grain et en plein air.