¿Existe un sistema de control de versiones simplificado apropiado para los no codificadores que escriben en Emacs?

28

Soy un académico y me encanta escribir lo máximo posible en Emacs. Una cosa clave que me falta es la capacidad de revisar fácilmente los cambios que he realizado en un archivo de texto con el tiempo.

Las características de seguimiento en los artículos de Wikipedia o Documentos de Google están en la línea de lo que estoy buscando. He jugado con sistemas de control de versiones como git porque parecen estar bien soportados por Emacs, pero los encontré difíciles de usar y mucho más complejos de lo que necesito. El registro de repositorios, el registro de entrada y salida, todo eso era problemático.

¿Supongo que no existen paquetes que brinden la funcionalidad que busco de una manera relativamente fácil de usar?

Brian Z
fuente
3
Recomiendo usar gity magit- github.com/magit/magit - ya que ya has jugado un poco con él. Probablemente querrá familiarizarse con las opciones de la línea de comandos para tener una mejor comprensión de lo que magitestá haciendo. Emacs no es para no codificadores, pero has estado en la escena el tiempo suficiente para no tenerle miedo - :) También puedes intentar jugar con gist: github.com/defunkt/gist.el
lawlist
Técnicamente, el objetivo del vc-grupo de comandos es simplificar el proceso de uso de VCS. Desafortunadamente, no son tan intuitivos como para permitir a los usuarios sin experiencia hacer un buen uso de ellos. Por otro lado, los sistemas como los que menciona son muy limitantes, por lo que uno desarrolla rápidamente demandas que no pueden satisfacer. gnu.org/software/emacs/manual/html_node/emacs/… hay un mecanismo simplista para mantener las copias de seguridad, pero debido a lo anterior, prefiero recomendar aprender a usar algunos VCS en su lugar.
wvxvw
66
También soy un académico y he comenzado a usar git/ magitpara el control de versiones de mis documentos. Parece intimidante comenzar, pero a) no tiene que aprenderlo todo de una vez, yb) es agradable de usar después de superar la curva de aprendizaje inicial. Un buen flujo de trabajo también lo ayuda a disciplinar sus tareas de escritura, ya que lo alienta a anotar lo que está haciendo, lo cual es una excelente manera de obtener una línea de tiempo de la evolución del proyecto de escritura.
Dan
¿En qué sistema operativo estás Utilicé RCS durante años, y anteriormente SCCS, pero comenzó a ser el caso, ya no estaba incluido en el sistema operativo, y recientemente cambié a git, después de haber tenido algunos documentos bajo subversión. El proceso de registro en git tiene un paso adicional en comparación con RCS, pero en varias situaciones, es muy útil tener conjuntos de archivos registrados juntos.
Andrew Swann
Esto ha estado en mi mente, y la confirmación automática puede ser parte de la historia:
Comprometerse

Respuestas:

43

El problema con los sistemas de control de versiones existentes no es tanto su complejidad; es el hecho de que existe tanta información que puede ser muy difícil para los principiantes ver el bosque en busca de árboles (es decir, averiguar qué hacen y no necesitan aprender cuando recién están comenzando )

Esta publicación se centrará gity describirá cómo controlarla desde Emacs usando un paquete adicional llamado magit. , gites complejo, pero no necesita aprender mucho para usarlo productivamente para el propósito que describe.

Asumiré que lo ha gitinstalado (si no lo tiene, consíguelo aquí ) y que no desea abandonar Emacs.


Instalando magit

magites un gitfront-end para Emacs. Está disponible en MELPA y puede instalarlo a través de:

M-x package-install RET magit RET

En el caso de que no haya habilitado MELPA en su configuración, puede encontrar instrucciones sobre cómo hacerlo aquí .

Configurar un repositorio

Supongamos que tiene una carpeta llamada ~/writingen su directorio de inicio que contiene uno o más documentos que le gustaría poner bajo control de versión.

  1. Abra la carpeta en Dired: C-x d ~/writing RET
  2. Abrir un caparazón: M-x shell RET
  3. Escribe git inity presiona RET.

Eso es. Ahora tienes un gitrepositorio. No hay necesidad de "registrarlo" en ningún lado. gites un sistema de control de versiones distribuido ; no requiere un servidor remoto para rastrear los cambios.

Verificando el estado de su repositorio

  1. Vuelva al búfer Dired que enumera los archivos en su repositorio.
  2. Hacer M-x magit-status RET.

Puede pensar en el búfer que aparece como su "panel de control" para trabajar con su repositorio. Para un nuevo repositorio, se ve así:

Búfer de estado Magit para repositorio recién creado

  • Puede navegar entre diferentes secciones de este búfer usando n( magit-goto-next-section) y p( magit-goto-previous-section).

  • Puede actualizar el búfer presionando g( magit-refresh).

Tenga en cuenta que puede abrir el búfer de estado desde cualquier archivo o directorio que pertenezca al repositorio que configuró anteriormente.

Agregar archivos

Como puede ver en la captura de pantalla, hay tres archivos en el repositorio que gitactualmente no están rastreando. Para indicar gitque comience a rastrear un archivo, debe organizarlo : con el punto en el archivo que desea agregar, presione s. El búfer de estado se verá así:

Magit status buffer después de agregar file-1.txt

Comprometerse

Después de organizar uno o más archivos, puede confirmarlos presionando c c. Esto abrirá un búfer que se ve así:

Magit buffer para ingresar el mensaje de confirmación

Ingrese su mensaje de confirmación en la parte superior y luego presione C-c C-cpara finalizar la confirmación. (Para abortar, presione C-c C-k).

El búfer de estado se verá así:

Búfer de estado de Magit después de la primera confirmación

Etapa de cambios

Si realiza cambios en un archivo rastreado, se enumerarán en una sección separada ("Cambios sin clasificar") en el búfer de estado:

Cambios no organizados (colapsados)

Para revisar los cambios que realizó en el archivo, navegue hasta la línea que dice Modified file-1.txty presione TAB:

Cambios sin clasificar (expandidos)

Para organizar estos cambios, presione s:

Búfer de estado de Magit después de organizar los cambios en el archivo rastreado

Ver confirmaciones pasadas

Finalmente, si desea revisar las confirmaciones pasadas, puede presionar l l(son dos L minúsculas):

Magit log buffer

Como de costumbre, puede navegar por el búfer que aparece con ny p. Magit mostrará los cambios asociados con las confirmaciones individuales enumeradas en este búfer en una ventana separada.

Resumen

De la cáscara:

  • git init: Inicializa el gitrepositorio en el directorio actual

Desde cualquier archivo o directorio asociado con un gitrepositorio:

  • M-x magit-status RET

Desde el búfer de estado:

  • s para agregar nuevos archivos o cambios de escenario

  • c c para cometer cambios por etapas

    • C-c C-c para finalizar el compromiso
    • C-c C-k abortar cometer
  • l l para ver los registros de confirmación

Eso es. :)

itsjeyd
fuente
77
No es necesario git initdesde el shell. Si llama a M-x magit-statusalgún lugar fuera de cualquier repositorio git, le ofrecerá configurar uno. (Pero deberá volver a llamarlo para que aparezca el búfer de estado una vez que haya terminado con la configuración).
wvxvw
Me has convencido de que vale la pena darle otra oportunidad al control de versiones, y esta debería ser una guía útil. ¡Gracias!
Brian Z
1
Hasta ahora todo bien, pero una frustración es que cuando cambio algunas palabras en un párrafo largo, todo el párrafo completo se resalta como un cambio por etapas. Realmente quiero ver los cambios palabra por palabra en lugar de línea por línea.
Brian Z
3
@BrianZ Puede personalizar la variable magit-diff-refine-hunkpara obtener el comportamiento que desea. Agregue (setq magit-diff-refine-hunk t) o (setq magit-diff-refine-hunk 'all) a su archivo de inicio. Puede hacer C-h v magit-diff-refine-hunk RETpara obtener más información sobre el significado de las diferentes configuraciones.
itsjeyd
Tendrá que experimentar con la configuración magit-diff-refine-hunk para acercarse a lo que desea. La configuración predeterminada es excelente para rastrear cambios en el código, pero no necesariamente brillante cuando desea rastrear cambios en profesionales. Puede tomar un poco antes de hacerlo bien, pero debería ser posible y una vez que lo haga, ¡sospecho que nunca volverá!
Tim X
11

Además de magit(como lo demuestra hábilmente la respuesta de @ itsjeyd), también puede intentarlo git-timemachine, lo que proporciona facilidades para recorrer rápidamente las versiones anteriores de un archivo bajo gitcontrol de versiones. Según su página de github, las siguientes combinaciones de teclas predeterminadas le dan una idea de lo que puede hacer:

  • p Visita la versión histórica anterior
  • n Visita la próxima versión histórica
  • w Copie el hash abreviado de la versión histórica actual
  • W Copie el hash completo de la versión histórica actual
  • q Sal de la máquina del tiempo.
Dan
fuente
8

Sospecho que encontrará el modo de copias de seguridad y / o Backup Walker muy interesante.

Ambos tienen como objetivo aprovechar los mecanismos de copia de seguridad existentes en Emacs, y proporcionar un mejor acceso y visibilidad de su historial de archivos, sin requerir un VCS adicional.

phils
fuente
6

Como se mencionó, una forma simple de tener diferentes versiones de un archivo es el sistema de respaldo Emacs.

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

Esto utilizará un directorio dedicado para copias de seguridad numeradas, que nunca se eliminarán automáticamente. Luego puede usar C-u C-x C-spara hacer otra versión en cualquier momento.

Sin embargo, creo que no hay una interfaz fácil de usar para, por ejemplo, diferenciar estas versiones. Por lo tanto, tendría que abrir manualmente una o dos de esas copias de seguridad y usarlas ediff-buffersen ellas y / o en el búfer original.

politza
fuente
1
Puede diferenciar las copias de seguridad utilizando, por ejemplo: gnu.org/software/emacs/manual/html_node/emacs/… (marque un archivo con mel punto de movimiento al otro archivo y presione =).
wvxvw
2
Esto parecía una opción atractiva en teoría, pero solo me da una carpeta abrumadora llena de copias de seguridad aleatorias. Las versiones que me interesan están completamente enterradas. ¿Quizás haya una manera de activar manualmente una copia de seguridad numerada de un archivo, pero solo cuando lo desee? Si también pudiera adjuntar un breve "mensaje de confirmación" a esa copia de seguridad de alguna manera, entonces esta sería una muy buena solución. Pero por ahora, supongo que estoy atrapado aprendiendo magit :)
Brian Z
2

Todavía no he tenido la oportunidad de usar esta solución, pero es posible que también desee considerar el flashbake de Cory Doctorow y Thomas Gideon . Esto es lo que Doctorow tiene que decir al respecto :

Me pidieron que hiciera esto después de discusiones con varios archiveros digitales que se quejaron de que, antes de la era computarizada, los escritores producían una serie de borradores completos en el camino hacia las publicaciones, completos con borrados, anotaciones, etc. Estos son archivos de oro, ya que iluminan el proceso creativo de una manera que a menudo revela las historias ocultas detrás de los libros que nos interesan. Por el contrario, muchos escritores producen solo un archivo digital (o unos pocos) que se modifican hasta el momento de la publicación, sin ningún registro sistemático real de los estados intermedios entre el primer fragmento de composición y el borrador final.

Entra Flashbake. Cada 15 minutos, Flashbake mira cualquier archivo que le pidas que revise (lo tengo mirando toda mi ficción en progreso, mi lista de tareas pendientes, mi archivo de información útil y las versiones electrónicas completas de mis libros recientes ), y registra los cambios realizados desde la última verificación, anotándolos con la zona horaria actual en el reloj del sistema, el clima en esa zona horaria obtenida de Google y los últimos tres titulares con su by-line debajo de ellos en el RSS de su blog feed (he estado caracterizando esto como "¿Dónde estoy, cómo es allí y en qué estoy pensando?"). También registra el tiempo de actividad de su computadora. Para una versión futura, creo que sería divertido tener las tres canciones más recientes reproducidas por su reproductor de música.

Dicho esto, nunca tuve la oportunidad de probarlo, ya que terminé escribiendo muchas cosas en modo org, y estaba programando mucho, y ... bueno ... mejoré un poco al usarlo magit, y al final, simplemente ... no necesité usarlo.

En cualquier caso, esta solución estaba dirigida a escritores que trabajan en proyectos no técnicos. Es posible que se ajuste a sus requisitos.

Tariq Kamal
fuente
1

Si bien no tiene ninguna relación emacs, todavía puede guardar sus archivos de texto en Dropbox y, si es un usuario profesional, puede usar el historial de versiones extendido . (Si desea el cifrado, es posible que desee ver SparkleShare ).

Luego está flashbake, que está un poco automatizado ( aquí hay un tutorial ).

También se pidió a otros lugares también , para los que las respuestas le puede resultar útil.

Zsolt Botykai
fuente
Flashbake se ve muy prometedor. Definitivamente lo intentaré.
Brian Z
-1

Puedes usar Dropbox. Hace una versión revisable de su archivo cada vez que presiona Cx Cs. Para el cifrado de mis archivos de texto, uso GNU Privacy Guard, compatible con Emacs.

Роман Захаров
fuente