Existe-t-il un système de contrôle de version simplifié approprié pour les non-codeurs écrivant dans Emacs?

28

Je suis un universitaire et j'aime faire autant de mes écrits que possible dans Emacs. Un élément clé qui me manque est la possibilité de revoir facilement les modifications que j'ai apportées à un fichier texte au fil du temps.

Les fonctionnalités de suivi sur les articles Wikipedia ou Google Documents sont à la fois dans le sens de ce que je recherche. J'ai joué avec des systèmes de contrôle de version comme git car ils semblent être bien supportés par Emacs, mais je les ai trouvés difficiles à utiliser et beaucoup plus complexes que ce dont j'ai besoin. Enregistrer des référentiels, s'enregistrer et sortir, tout cela était juste gênant.

Je ne suppose pas qu'il existe des packages qui fournissent les fonctionnalités que je recherche d'une manière relativement conviviale?

Brian Z
la source
3
Je recommande d'utiliser gitand magit- github.com/magit/magit - car vous avez déjà joué un peu avec. Vous voudrez probablement vous familiariser avec les options de ligne de commande afin d'avoir une meilleure compréhension de ce qui magitse passe. Emacs n'est pas pour les non-codeurs, mais vous êtes sur la scène depuis assez longtemps pour ne pas en avoir peur - :) Vous pouvez également essayer de jouer avec gist: github.com/defunkt/gist.el
lawlist
Techniquement, le but du vc-groupe de commandes est de simplifier le processus d'utilisation des VCS. Malheureusement, ils ne sont pas aussi intuitifs que de permettre à des utilisateurs sans expérience d'en faire un bon usage. En revanche, des systèmes comme ceux que vous mentionnez sont très limitatifs, de sorte que l'on développe rapidement des demandes qu'ils ne peuvent satisfaire. gnu.org/software/emacs/manual/html_node/emacs/… il existe un mécanisme simpliste pour conserver les sauvegardes, mais en raison de ce qui précède, je recommanderais plutôt d'apprendre à utiliser du VCS à la place.
wvxvw
6
Je suis également universitaire et j'ai commencé à utiliser git/ magitpour le contrôle de version de mes articles. Cela semble intimidant pour commencer, mais a) vous n'avez pas à tout apprendre en même temps, et b) c'est agréable à utiliser après avoir franchi la courbe d'apprentissage initiale. Un bon flux de travail vous aide également à discipliner vos tâches d'écriture, car il vous encourage à annoter ce que vous faites - ce qui est un excellent moyen d'obtenir une chronologie de l'évolution du projet d'écriture.
Dan
Sur quel système d'exploitation êtes-vous? J'ai utilisé RCS pendant des années, et auparavant SCCS, mais cela a commencé à être le cas, ce n'était plus fourni avec le système d'exploitation, et je suis récemment passé à git, après avoir eu des documents en cours de subversion. Le processus d'enregistrement dans git comporte une étape supplémentaire par rapport à RCS, mais dans un certain nombre de situations, il est très utile d'avoir des ensembles de fichiers archivés ensemble.
Andrew Swann
Cela m'est venu à l'esprit et l'auto-commit peut faire partie de l'histoire: engager automatiquement git après chaque sauvegarde projects.ryuslash.org/git-auto-commit-mode
grettke

Réponses:

43

Le problème avec les systèmes de contrôle de version existants n'est pas tant leur complexité; c'est le fait qu'il existe une telle richesse d'informations qu'il peut être très difficile pour les débutants de voir la forêt pour les arbres (c'est-à-dire, de comprendre ce qu'ils font et n'ont pas besoin d'apprendre quand ils ne font que commencer) ).

Ce message va se concentrer sur gitet décrire comment le contrôler à partir d'Emacs à l'aide d'un module complémentaire appelé magit. Oui , gitc'est complexe, mais vous n'avez pas besoin d'apprendre beaucoup pour l'utiliser de manière productive aux fins que vous décrivez.

Je vais supposer que vous avez gitinstallé (si vous ne le faites pas, obtenez-le ici ) et que vous ne voulez pas quitter Emacs du tout.


L'installation magit

magitest un gitfrontal pour Emacs. Il est disponible auprès de MELPA et vous pouvez l'installer via:

M-x package-install RET magit RET

Si vous n'avez pas activé MELPA dans votre configuration, vous pouvez trouver des instructions sur la façon de le faire ici .

Configuration d'un référentiel

Disons que vous avez un dossier appelé ~/writingdans votre répertoire personnel qui contient un ou plusieurs documents que vous souhaitez mettre sous contrôle de version.

  1. Ouvrez le dossier dans Dired: C-x d ~/writing RET
  2. Ouvrez un shell: M-x shell RET
  3. Tapez git initet appuyez sur RET.

C'est ça. Vous avez maintenant un gitréférentiel. Il n'est pas nécessaire de "l'enregistrer" n'importe où. gitest un système de contrôle de version distribué ; il ne nécessite pas de serveur distant pour suivre les modifications.

Vérification de l'état de votre référentiel

  1. Revenez au tampon Dired qui répertorie les fichiers dans votre référentiel.
  2. Faites M-x magit-status RET.

Vous pouvez penser au tampon qui apparaît comme votre «panneau de contrôle» pour travailler avec votre référentiel. Pour un nouveau référentiel, il ressemble à ceci:

Tampon d'état Magit pour le référentiel nouvellement créé

  • Vous pouvez naviguer entre les différentes sections de ce tampon en utilisant n( magit-goto-next-section) et p( magit-goto-previous-section).

  • Vous pouvez actualiser le tampon en appuyant sur g( magit-refresh).

Notez que vous pouvez afficher le tampon d'état à partir de n'importe quel fichier ou répertoire appartenant au référentiel que vous avez configuré précédemment.

Ajout de fichiers

Comme vous pouvez le voir sur la capture d'écran, il y a trois fichiers dans le référentiel qui gitne sont pas actuellement suivis. Pour dire gitde commencer à suivre un fichier, vous devez le mettre en scène : avec le point sur le fichier que vous souhaitez ajouter, appuyez sur s. Le tampon d'état ressemblera alors à ceci:

Tampon d'état Magit après l'ajout de fichier-1.txt

S'engager

Après avoir transféré un ou plusieurs fichiers, vous pouvez les valider en appuyant sur c c. Cela fera apparaître un tampon qui ressemble à ceci:

Tampon Magit pour la saisie du message de validation

Saisissez votre message de validation en haut, puis appuyez sur C-c C-cpour finaliser la validation. (Pour abandonner, appuyez sur C-c C-k.)

Le tampon d'état ressemblera alors à ceci:

Tampon d'état Magit après le premier commit

Modifications par étapes

Si vous apportez des modifications à un fichier suivi, elles seront répertoriées dans une section distincte ("Modifications non mises en scène") dans le tampon d'état:

Modifications non planifiées (réduites)

Pour revoir les modifications que vous avez apportées au fichier, accédez à la ligne qui dit Modified file-1.txtet appuyez sur TAB:

Modifications non planifiées (développées)

Pour mettre en scène ces changements, appuyez sur s:

Tampon d'état Magit après la mise en scène des modifications apportées au fichier suivi

Affichage des validations passées

Enfin, si vous souhaitez consulter les validations passées, vous pouvez appuyer sur l l(c'est deux L minuscules):

Tampon de journal Magit

Comme d'habitude, vous pouvez parcourir le tampon fourni avec net p. Magit affichera les changements associés aux commits individuels répertoriés dans ce tampon dans une fenêtre séparée.

Sommaire

De la coque:

  • git init: Initialiser le gitréférentiel dans le répertoire courant

Depuis n'importe quel fichier ou répertoire associé à un gitréférentiel:

  • M-x magit-status RET

Depuis le tampon d'état:

  • s pour ajouter de nouveaux fichiers ou des changements d'étape

  • c c pour valider les modifications par étapes

    • C-c C-c pour finaliser la validation
    • C-c C-k abandonner le commit
  • l l pour afficher les journaux de validation

C'est ça. :)

itsjeyd
la source
7
Vous n'avez pas besoin de git initpartir du shell. Si vous appelez M-x magit-statusquelque part en dehors d'un dépôt git, il vous proposera d'en créer un. (Mais vous devrez l'appeler à nouveau pour afficher le tampon d'état après avoir terminé la configuration).
wvxvw
Vous m'avez convaincu qu'il vaut la peine d'essayer le contrôle de version, et cela devrait être un guide utile. Merci!
Brian Z
1
Jusqu'ici tout va bien, mais une frustration est que lorsque je change quelques mots dans un long paragraphe, l'ensemble du paragraphe est mis en évidence comme un changement par étapes. Je veux vraiment voir les changements mot par mot plutôt que ligne par ligne.
Brian Z
3
@BrianZ Vous pouvez personnaliser la variable magit-diff-refine-hunkpour obtenir le comportement souhaité. Ajoutez (setq magit-diff-refine-hunk t) ou (setq magit-diff-refine-hunk 'all) à votre fichier init. Vous pouvez faire C-h v magit-diff-refine-hunk RETpour obtenir plus d'informations sur la signification des différents paramètres.
itsjeyd
Vous devrez expérimenter les paramètres magit-diff-affine-hunk pour vous rapprocher de ce que vous voulez. Les paramètres par défaut sont parfaits pour suivre les changements de code, mais pas nécessairement brillants lorsque vous souhaitez suivre les changements chez les pros. Il faudra peut-être un peu de temps avant de bien comprendre, mais cela devrait être possible et une fois que vous l'avez fait, je suppose que vous ne reviendrez jamais!
Tim X
11

En plus de magit(comme le montre la réponse de @ itsjeyd), vous pouvez également essayer git-timemachine, qui fournit des fonctionnalités pour parcourir rapidement les anciennes versions d'un fichier sous gitcontrôle de version. Selon sa page github, les raccourcis clavier par défaut suivants vous donnent une idée de ce que vous pouvez faire:

  • p Visitez la version historique précédente
  • n Visitez la prochaine version historique
  • w Copiez le hachage abrégé de la version historique actuelle
  • W Copiez le hachage complet de la version historique actuelle
  • q Quittez la machine à voyager dans le temps.
Dan
la source
8

Je pense que vous trouverez le mode Sauvegardes et / ou Backup Walker très intéressant.

Les deux visent à tirer parti des mécanismes de sauvegarde existants dans Emacs et à fournir un meilleur accès et une meilleure visibilité de l'historique de vos fichiers, sans nécessiter de VCS supplémentaire.

phils
la source
6

Comme cela a été mentionné, un système simple pour avoir différentes versions d'un fichier est le système de sauvegarde Emacs.

(setq backup-directory-alist '(("." . "~/emacs-backups"))
      version-control 'numbered
      make-backup-files t
      delete-old-versions 'never)

Cela utilisera un répertoire dédié pour les sauvegardes numérotées, qui ne seront jamais supprimées automatiquement. Ensuite, vous pouvez utiliser C-u C-x C-spour créer une autre version à tout moment.

Cependant, je pense qu'il n'y a pas d'interface facile à utiliser, par exemple pour différencier ces versions. Il vous faudrait donc ouvrir manuellement une ou deux de ces sauvegardes et les utiliser ediff-bufferset / ou le tampon d'origine.

politza
la source
1
Vous pouvez différencier les sauvegardes en utilisant, par exemple: gnu.org/software/emacs/manual/html_node/emacs/… (marquez un fichier avec un mpoint de déplacement vers l'autre fichier et appuyez sur =).
wvxvw
2
Cela semblait en théorie une option intéressante, mais cela me donne juste un dossier écrasant plein de sauvegardes aléatoires. Les versions qui m'intéressent sont complètement enterrées. Peut-être existe-t-il un moyen de déclencher manuellement une sauvegarde numérotée d'un fichier, mais uniquement lorsque je le souhaite? Si je pouvais également joindre un bref "message de validation" à cette sauvegarde, ce serait une très bonne solution. Mais pour l'instant, je suppose que je suis coincé à apprendre le magit :)
Brian Z
2

Je n'ai pas encore eu l'occasion d'utiliser cette solution, mais vous pouvez également envisager le flashbake de Cory Doctorow et Thomas Gideon . Voici ce que Doctorow a à dire à ce sujet :

J'ai été invité à le faire après des discussions avec plusieurs archivistes numériques qui se sont plaints qu'avant l'ère de l'informatique, les écrivains avaient produit une série de projets complets sur le chemin des publications, avec des suppressions, des annotations, etc. Il s'agit d'or archivistique, car ils éclairent le processus créatif d'une manière qui révèle souvent les histoires cachées derrière les livres qui nous intéressent. En revanche, de nombreux auteurs ne produisent qu'un seul (ou quelques) fichiers numériques qui sont modifiés jusqu'au moment de la publication, sans aucun enregistrement systématique réel des états intermédiaires entre le premier morceau de composition et le projet final.

Entrez Flashbake. Toutes les 15 minutes, Flashbake examine tous les fichiers que vous lui demandez de vérifier (je l'ai en regardant toutes mes fictions en cours, ma liste de tâches, mon fichier d'informations utiles et les versions électroniques complètes de mes livres récents ), et enregistre toutes les modifications apportées depuis la dernière vérification, en les annotant avec le fuseau horaire actuel sur l'horloge système, la météo dans ce fuseau horaire récupérée sur Google, et les trois derniers titres avec votre ligne sous eux dans le RSS de votre blog feed (J'ai décrit cela comme «Où suis-je, à quoi ça ressemble là-bas, et à quoi je pense?»). Il enregistre également la disponibilité de votre ordinateur. Pour une future version, je pense que ce serait amusant d'avoir les trois chansons les plus récentes jouées par votre lecteur de musique.

Cela étant dit, je n'ai jamais eu l'occasion de le tester, car j'ai fini par écrire beaucoup de choses en mode org, et je programmais beaucoup, et ... eh bien ... je me suis un peu amélioré dans l'utilisation magit, et à la fin, je sorte de ... juste pas besoin de l'utiliser.

En tout cas, cette solution s'adressait aux rédacteurs travaillant sur des projets non techniques. Vous trouverez peut-être que cela peut répondre à vos besoins.

Tariq Kamal
la source
1

Bien que cela ne soit absolument pas lié à emacs, vous pouvez toujours enregistrer vos fichiers texte dans Dropbox et si vous êtes un utilisateur professionnel, vous pouvez utiliser l' historique des versions étendu . (Si vous voulez crypter, vous voudrez peut-être regarder SparkleShare .)

Ensuite, il y a flashbake qui est un peu automatisé ( voici un tutoriel ).

En outre , il a été demandé ailleurs aussi , dont les réponses pourraient vous être utiles.

Zsolt Botykai
la source
Flashbake semble très prometteur. Je vais certainement essayer.
Brian Z
-1

Vous pouvez utiliser Dropbox. Il rend la version révisable de votre fichier à chaque fois que vous appuyez sur Cx Cs. Pour le cryptage de mes fichiers texte, j'utilise GNU Privacy Guard, il est pris en charge par Emacs.

Роман Захаров
la source