Existe um sistema simplificado de controle de versão apropriado para não codificadores que escrevem no Emacs?

28

Sou acadêmico e adoro escrever o máximo possível no Emacs. Uma coisa importante que me falta é a capacidade de revisar facilmente as alterações que fiz em um arquivo de texto ao longo do tempo.

Os recursos de rastreamento nos artigos da Wikipedia ou no Google Documents são da mesma maneira que estou procurando. Eu brinquei com sistemas de controle de versão como o git porque eles parecem ser bem suportados pelo Emacs, mas os achei difíceis de usar e muito mais complexos do que o necessário. Registrar repositórios, fazer check-in e check-out, tudo isso era problemático.

Suponho que não existem pacotes por aí que ofereçam a funcionalidade que estou procurando de uma maneira relativamente amigável.

Brian Z
fonte
3
Eu recomendo usar gite magit- github.com/magit/magit - já que você já brincou um pouco com ele. Você provavelmente desejará se familiarizar com as opções da linha de comando, para entender melhor o que magitestá fazendo. O Emacs não é para não-codificadores, mas você já está por aqui há tempo suficiente para não ter medo dele - :) Você também pode tentar brincar com gist: github.com/defunkt/gist.el
lawlist
Tecnicamente, o objetivo do vc-grupo de comandos é simplificar o processo de uso de VCSs. Infelizmente, eles não são tão intuitivos quanto permitem que usuários sem experiência façam um bom uso deles. Por outro lado, sistemas como os que você menciona são muito limitantes, de modo que se desenvolve rapidamente demandas que eles não podem satisfazer. gnu.org/software/emacs/manual/html_node/emacs/… existe um mecanismo simplista de manter backups, mas devido ao exposto acima, eu recomendo aprender a usar alguns VCS.
Wvxvw
6
Também sou acadêmico e comecei a usar git/ magitpara controle de versão dos meus trabalhos. Parece intimidador começar, mas a) você não precisa aprender tudo de uma vez eb) é agradável de usar depois de superar a curva de aprendizado inicial. Um bom fluxo de trabalho também ajuda a disciplinar suas tarefas de escrita, pois incentiva você a anotar o que está fazendo - o que é uma ótima maneira de obter uma linha do tempo da evolução do projeto de escrita.
Dan
Em qual sistema operacional você está? Eu usei o RCS por anos e, anteriormente, o SCCS, mas começou a acontecer que não estava mais incluído no sistema operacional e recentemente mudou para o git, depois de alguns trabalhos em subversão. O processo de check-in no git tem uma etapa extra em comparação com o RCS, mas em várias situações, é muito útil ter conjuntos de arquivos verificados juntos.
Andrew Swann
Isso está em minha mente, e o auto-commit pode fazer parte da história: comprometa-se automaticamente ao git após cada salvamento projects.ryuslash.org/git-auto-commit-mode
grettke

Respostas:

43

O problema com os sistemas de controle de versão existentes não é tanto sua complexidade; é o fato de haver tanta informação por aí que pode ser muito difícil para iniciantes ver a floresta para as árvores (ou seja, descobrir o que fazem e não precisam aprender quando estão apenas começando) )

Este post será focado gite descreverá como controlá-lo no Emacs usando um pacote complementar chamado magit. Sim , gité complexo, mas você não precisa aprender muito para usá-lo produtivamente para a finalidade que você descreve.

Suponho que você tenha gitinstalado (se não o tiver, obtenha-o aqui ) e que não deseja deixar o Emacs.


Instalando magit

magité um gitfront-end para o Emacs. Está disponível no MELPA e você pode instalá-lo via:

M-x package-install RET magit RET

Com a chance de você não ter ativado o MELPA em sua configuração, você pode encontrar instruções sobre como fazer isso aqui .

Configurando um Repositório

Digamos que você tenha uma pasta chamada ~/writingno diretório inicial que contém um ou mais documentos que você deseja colocar sob controle de versão.

  1. Abra a pasta em Dired: C-x d ~/writing RET
  2. Abra um shell: M-x shell RET
  3. Digite git inite clique RET.

É isso aí. Agora você tem um gitrepositório. Não há necessidade de "registrá-lo" em nenhum lugar. gité um sistema de controle de versão distribuído ; não requer um servidor remoto para rastrear alterações.

Verificando o status do seu repositório

  1. Volte para o buffer Dired que lista os arquivos no seu repositório.
  2. Faça M-x magit-status RET.

Você pode pensar no buffer que aparece como seu "painel de controle" para trabalhar com seu repositório. Para um novo repositório, é algo parecido com isto:

Buffer de status Magit para o repositório recém-criado

  • Você pode navegar entre diferentes seções desse buffer usando n( magit-goto-next-section) e p( magit-goto-previous-section).

  • Você pode atualizar o buffer pressionando g( magit-refresh).

Observe que você pode ativar o buffer de status de qualquer arquivo ou diretório que pertença ao repositório configurado anteriormente.

Adicionando arquivos

Como você pode ver na captura de tela, existem três arquivos no repositório que gitnão estão rastreando no momento. Para dizer gitpara começar a rastrear um arquivo, você precisa prepará- lo: Com o ponto no arquivo que você deseja adicionar, pressione s. O buffer de status ficará assim:

Buffer de status do Magit após adicionar o arquivo 1.txt

Cometer

Depois de preparar um ou mais arquivos, você pode confirmá- los pressionando c c. Isso exibirá um buffer parecido com este:

Buffer Magit para inserir a mensagem de confirmação

Digite sua mensagem de confirmação na parte superior e pressione C-c C-cpara finalizar a confirmação. (Para cancelar, pressione C-c C-k.)

O buffer de status ficará assim:

Buffer de status do Magit após a primeira confirmação

Mudanças de preparação

Se você fizer alterações em um arquivo rastreado, elas serão listadas em uma seção separada ("Alterações em etapas") no buffer de status:

Alterações não faseadas (recolhidas)

Para revisar as alterações feitas no arquivo, navegue até a linha que diz Modified file-1.txte pressione TAB:

Alterações não faseadas (expandidas)

Para organizar essas alterações, pressione s:

Buffer de status Magit após o teste de mudanças no arquivo rastreado

Visualizando confirmações anteriores

Por fim, se você quiser revisar confirmações anteriores, pressione l l(são dois L minúsculos):

Buffer de log Magit

Como de costume, você pode navegar no buffer que acompanha ne p. O Magit mostrará as alterações associadas a confirmações individuais listadas nesse buffer em uma janela separada.

Sumário

Do shell:

  • git init: Inicializar gitRepositório no Diretório Atual

De qualquer arquivo ou diretório associado a um gitrepositório:

  • M-x magit-status RET

No buffer de status:

  • s para adicionar novos arquivos ou alterações de estágio

  • c c para confirmar mudanças em etapas

    • C-c C-c para finalizar commit
    • C-c C-k abortar commit
  • l l para visualizar logs de confirmação

É isso aí. :)

itsjeyd
fonte
7
Você não precisa git initdo shell. Se você ligar para M-x magit-statusalgum lugar fora de qualquer repositório git, ele oferecerá a configuração de um. (Mas você precisará chamá-lo novamente para ativar o buffer de status depois de concluir a instalação).
wvxvw
Você me convenceu de que vale a pena tentar outra vez o controle de versão, e esse deve ser um guia útil. Obrigado!
Brian Z
1
Até aqui tudo bem, mas uma frustração é que, quando troco algumas palavras em um parágrafo longo, todo o parágrafo inteiro é destacado como uma mudança em etapas. Eu realmente quero ver mudanças palavra por palavra em vez de linha por linha.
Brian Z
3
@BrianZ Você pode personalizar a variável magit-diff-refine-hunkpara obter o comportamento que deseja. Adicione (setq magit-diff-refine-hunk t) ou (setq magit-diff-refine-hunk 'all) ao seu arquivo init. Você pode fazer C-h v magit-diff-refine-hunk RETpara obter mais informações sobre o significado das diferentes configurações.
itsjeyd
Você precisará experimentar as configurações magit-diff-refine-hunk para se aproximar do que deseja. As configurações padrão são ótimas para rastrear alterações no código, mas não necessariamente brilhantes quando você deseja rastrear alterações nos profissionais. Pode demorar um pouco até você acertar, mas deve ser possível e, uma vez que você faça isso, suspeito que nunca mais voltará!
Tim X
11

Além de magit(como a resposta de @ itsjeyd demonstra habilmente), você também pode tentar git-timemachine, que fornece facilidades para um ciclo rápido nas versões mais antigas de um arquivo sob gitcontrole de versão. De acordo com a página do github, as seguintes combinações de teclas padrão fornecem uma idéia do que você pode fazer:

  • p Visite a versão histórica anterior
  • n Visite a próxima versão histórica
  • w Copie o hash abreviado da versão histórica atual
  • W Copie o hash completo da versão histórica atual
  • q Saia da máquina do tempo.
Dan
fonte
8

Eu suspeito que você achará o Modo de backup e / ou o Walker de backup muito interessante.

Ambos visam alavancar os mecanismos de backup existentes no Emacs e fornecem melhor acesso e visibilidade do seu histórico de arquivos, sem a necessidade de um VCS adicional.

phils
fonte
6

Como mencionado, uma maneira simples de ter diferentes versões de um arquivo é o sistema de backup Emacs.

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

Isso usará um diretório dedicado para backups numerados, que nunca serão excluídos automaticamente. Em seguida, você pode usar C-u C-x C-spara criar outra versão a qualquer momento.

Embora, eu acho, não exista uma interface fácil e pronta para usar, por exemplo, para diferenciar essas versões. Portanto, você teria que abrir manualmente um ou dois desses backups e usá ediff-buffers-los e / ou o buffer original.

politza
fonte
1
Você pode diferenciar os backups usando, por exemplo: gnu.org/software/emacs/manual/html_node/emacs/… (marque um arquivo com mo ponto de movimentação para o outro arquivo e pressione =).
wvxvw
2
Parecia uma opção atraente em teoria, mas me deu uma pasta impressionante, cheia de backups aleatórios. As versões nas quais estou interessado estão completamente enterradas. Talvez haja uma maneira de acionar manualmente um backup numerado de um arquivo, mas somente quando eu o desejar? Se eu também pudesse anexar uma breve "mensagem de confirmação" a esse backup de alguma forma, essa seria uma solução muito boa. Mas, por agora, eu acho que eu sou magit aprendizagem preso :)
Brian Z
2

Ainda não tive a oportunidade de usar esta solução, mas você também pode considerar o flashbake de Cory Doctorow e Thomas Gideon . Aqui está o que Doctorow tem a dizer sobre isso :

Fui solicitado a fazer isso depois de discussões com vários arquivistas digitais que se queixaram de que, antes da era computadorizada, os escritores produziam uma série de rascunhos completos no caminho para as publicações, completos com rasuras, anotações e assim por diante. São ouro de arquivo, pois iluminam o processo criativo de uma maneira que muitas vezes revela as histórias ocultas por trás dos livros de que gostamos. Por outro lado, muitos escritores produzem apenas um (ou alguns) arquivos digitais modificados até o momento da publicação, sem nenhum registro sistemático real dos estados intermediários entre o primeiro pedaço de composição e o rascunho final.

Digite Flashbake. A cada 15 minutos, o Flashbake analisa todos os arquivos que você solicita que sejam verificados (eu o analiso em toda a minha ficção em andamento, minha lista de tarefas, meu arquivo de informações úteis e as versões eletrônicas completas dos meus livros recentes ) e registra todas as alterações feitas desde a última verificação, anotando-as com o fuso horário atual no relógio do sistema, o clima nesse fuso horário buscado no Google e as últimas três manchetes com sua linha por elas no RSS do seu blog feed (Eu caracterizo isso como “Onde estou, como é lá e o que estou pensando?”). Ele também registra o tempo de atividade do seu computador. Para uma versão futura, acho que seria divertido ter as três músicas mais recentes tocadas pelo seu music player.

Dito isto, eu nunca tive a oportunidade de testá-lo, pois acabei escrevendo muitas coisas no modo organizacional e estava programando bastante, e ... bem ... eu meio que fiquei melhor usando magit, e no final, eu meio que ... não precisava usá-lo.

De qualquer forma, essa solução foi destinada a escritores que trabalham em projetos não técnicos. Você pode achar que ele pode atender às suas necessidades.

Tariq Kamal
fonte
1

Embora não esteja absolutamente relacionado emacs, você ainda pode salvar seus arquivos de texto no Dropbox e, se for um usuário profissional, poderá usar o histórico de versão estendido . (Se você deseja criptografia, consulte SparkleShare .)

Depois, há o flashbake, que é um pouco automatizado ( aqui está um tutorial ).

Também foi perguntado em outro lugar também , cujas respostas você pode achar úteis.

Zsolt Botykai
fonte
Flashbake parece muito promissor. Definitivamente vou tentar.
Brian Z
-1

Você pode usar o Dropbox. Torna a versão revisável do seu arquivo toda vez que você pressiona Cx Cs. Para criptografia dos meus arquivos de texto, eu uso o GNU Privacy Guard, compatível com o Emacs.

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