Emacsで記述する非コーダーに適した簡易バージョン管理システムはありますか?


28

私はアカデミックで、Emacsでできる限り多くの文章を書くのが大好きです。私にとって欠けている重要なことは、テキストファイルに行った変更を経時的に簡単に確認できることです。

ウィキペディアの記事またはGoogleドキュメントの追跡機能は、どちらも私が探しているものに沿っています。gitのようなバージョン管理システムで遊んだことがあるのは、それらがEmacsによって十分にサポートされているように見えるからです。リポジトリの登録、チェックインとチェックアウトなど、すべてが面倒でした。

私が探している機能を比較的ユーザーフレンドリーな方法で提供するパッケージがあるとは思いませんか?


3
私が使用することをお勧めgitしてmagit- github.com/magit/magit -あなたはすでにそれとは少し周りをプレイしたことから。おそらく、コマンドラインオプションをよく理解して、何magitをしているのかをよりよく理解したいと思うでしょう。Emacsはありません非プログラマーのために、しかし、あなたはそれを恐れてはいけないように十分な長さのシーンを中心にしてきた- :)あなたも一緒に遊んで試してみたいことがありますgistgithub.com/defunkt/gist.el
lawlist

技術的にはvc-、コマンドグループの目標は、VCSの使用プロセスを簡素化することです。残念ながら、経験のないユーザーがそれらをうまく利用できるほど直感的ではありません。一方、あなたが言及したようなシステムは非常に限定的であるため、彼らが満たすことができない要求を迅速に開発します。gnu.org/software/emacs/manual/html_node/emacs/…バックアップを保持する単純なメカニズムがありますが、上記の理由により、代わりにVCSの使用を学ぶことをお勧めします。
wvxvw

6
私もアカデミックで、論文のバージョン管理にgit/ magitを使用し始めました。始めるのは恐ろしいように見えますが、a)一度にすべてを学ぶ必要はありません。b)最初の学習曲線を乗り越えてから使用するのは楽しいです。優れたワークフローは、あなたがしていることを注釈することを奨励するので、あなたはあなたのライティングタスクを訓練するのにも役立ちます-これはライティングプロジェクトの進化のタイムラインを得る素晴らしい方法です。
ダン

どのオペレーティングシステムを使用していますか?私は何年もRCSを使用していましたが、以前はSCCSでしたが、OSにバンドルされなくなり、最近gitに切り替えました。gitでのチェックインプロセスには、RCSと比較して1つの余分なステップがありますが、多くの状況では、ファイルのセットを一緒にチェックインすると非常に便利です。
アンドリュース

これは私の心の中にあり、自動コミットは物語の一部かもしれません:各保存プロジェクトの
。ryuslash.org/

回答:


43

既存のバージョン管理システムの問題はそれほど複雑ではありません。そこに豊富な情報があり、初心者が木の森を見るのが非常に難しいことがあるという事実です(つまり、彼らが何をして、始めたばかりのときに学ぶ必要がないかを理解すること) )。

この投稿では、に注目しgit、と呼ばれるアドオンパッケージを使用してEmacsからそれを制御する方法について説明しますmagitはいgit複雑ですが、説明する目的で生産的に使用するために多くを学ぶ必要はありません。

私はあなたがgitインストール済みであると仮定します(インストールしていない場合は、ここで入手してください)。


インストール中 magit

magitあるgitEmacsのためのフロントエンド。MELPAから入手でき、次の方法でインストールできます。

M-x package-install RET magit RET

構成でMELPAを有効にしていない可能性がありますが、その方法についてはこちらご覧ください

リポジトリのセットアップ

~/writingバージョン管理下に置きたい1つまたは複数のドキュメントを含むフォルダーがホームディレクトリにあるとします。

  1. Diredでフォルダーを開きます。 C-x d ~/writing RET
  2. シェルを開きます: M-x shell RET
  3. 入力してgit initを押しRETます。

それでおしまい。これでgitリポジトリができました。どこにでも「登録」する必要はありません。gitある分散型バージョン管理システム。変更を追跡するためにリモートサーバーを必要としません。

リポジトリのステータスを確認する

  1. リポジトリ内のファイルをリストするDiredバッファーに戻ります。
  2. やりますM-x magit-status RET

バッファを、リポジトリを操作するための「コントロールパネル」と考えることができます。新しいリポジトリの場合、次のようになります。

新しく作成されたリポジトリのMagitステータスバッファー

  • nmagit-goto-next-section)およびpmagit-goto-previous-section)を使用して、このバッファーの異なるセクション間を移動できます。

  • gmagit-refresh)を押すと、バッファを更新できます。

前に設定したリポジトリに属する​​任意のファイルまたはディレクトリからステータスバッファを起動できることに注意してください。

ファイルを追加する

スクリーンショットでわかるように、リポジトリにgitは現在追跡されていない3つのファイルがあります。言うとgit、ファイルの追跡を開始するために、あなたがする必要がステージに:ファイル上のポイントを使用すると、プレスを追加したいですs。ステータスバッファは次のようになります。

file-1.txtを追加した後のMagitステータスバッファー

コミット

1つ以上のファイルをステージングした後、を押してそれらをコミットできますc c。これにより、次のようなバッファが表示されます。

コミットメッセージを入力するためのMagitバッファー

上部にコミットメッセージを入力し、を押しC-c C-cてコミットを確定します。(中止するには、を押しC-c C-kます。)

ステータスバッファは次のようになります。

最初のコミット後のMagitステータスバッファー

ステージングの変更

追跡されたファイルに変更を加えると、それらはステータスバッファーの別のセクション(「ステージングされていない変更」)にリストされます。

ステージングされていない変更(折りたたみ)

ファイルに加えた変更を確認するには、表示されている行に移動して、Modified file-1.txtを押しTABます。

ステージングされていない変更(拡張)

これらの変更をステージングするには、を押しsます。

追跡対象ファイルの変更をステージングした後のMagitステータスバッファー

過去のコミットを表示する

最後に、過去のコミットを確認する場合は、l l(2つの小文字のL)を押します。

Magitログバッファー

いつものように、あなたが思い付くバッファナビゲートできるnとしp。Magitは、このバッファーにリストされている個々のコミットに関連する変更を別のウィンドウに表示します。

概要

シェルから:

  • git initgit現在のディレクトリのリポジトリを初期化する

gitリポジトリに関連付けられているファイルまたはディレクトリから:

  • M-x magit-status RET

ステータスバッファから:

  • s 新しいファイルを追加するか、変更をステージングする

  • c c 段階的な変更をコミットする

    • C-c C-c コミットを確定する
    • C-c C-k コミットを中止する
  • l l コミットログを表示するには

それでおしまい。:)


7
あなたはgit initシェルからする必要はありません。M-x magit-statusgitリポジトリの外部のどこかを呼び出すと、それをセットアップするように提案されます。(ただし、セットアップが完了したら、再度呼び出してステータスバッファを呼び出す必要があります)。
wvxvw

バージョン管理をもう一度試してみる価値があると私は確信しています。これは役立つガイドになるはずです。ありがとう!
ブライアンZ

1
これまでのところ非常に良いことですが、フラストレーションの1つは、長い段落のいくつかの単語を変更すると、段落全体が段階的な変更として強調表示されることです。行ごとではなく、単語ごとの変化を本当に見たいです。
ブライアンZ

3
@BrianZ変数magit-diff-refine-hunkをカスタマイズして、必要な動作を取得できます。(setq magit-diff-refine-hunk t) または (setq magit-diff-refine-hunk 'all)、initファイルに追加します。C-h v magit-diff-refine-hunk RETさまざまな設定の意味に関する詳細情報を取得することができます。
itsjeyd

希望するものに近づけるために、magit-diff-refine-hunkの設定を試す必要があります。デフォルトの設定はコードの変更を追跡するのに最適ですが、プロの変更を追跡する場合は必ずしも素晴らしいとは限りません。正しく理解するまでには少し時間がかかるかもしれませんが、それが可能になるはずです。一度やると、二度と戻れないと思います!
ティムX

11

加えて、magit(@ itsjeydの答えは、巧みに実証したように)、あなたも試すことができますgit-timemachine下のファイルの古いバージョンによって迅速なサイクリングのための施設を提供する、gitバージョンコントロール。githubページによると、次のデフォルトのキーバインドにより、何ができるのかがわかります。

  • p 以前の歴史的なバージョンをご覧ください
  • n 次の歴史的なバージョンをご覧ください
  • w 現在の履歴バージョンの短縮ハッシュをコピーします
  • W 現在の履歴バージョンの完全なハッシュをコピーします
  • q タイムマシンを終了します。


6

前述のように、ファイルの異なるバージョンを使用する簡単な方法はEmacsバックアップシステムです。

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

これは、番号付きバックアップ専用のディレクトリを使用し、自動的に削除されることはありません。その後C-u C-x C-s、いつでも別のバージョンを作成するために使用できます。

ただし、これらのバージョンを差分するなどの簡単ですぐに使用できるインターフェイスはありません。そのため、これらのバックアップの1つまたは2つを手動で開きediff-buffers、それらおよび/または元のバッファーで使用する必要があります。


1
たとえば、gnu.org / software / emacs / manual / html_node / emacs / を使用してバックアップを差分できます(1つのファイルをm他のファイルへの移動ポイントでマークし、を押します=)。
wvxvw

2
これは理論的には魅力的なオプションのように思えましたが、ランダムバックアップでいっぱいの圧倒的なフォルダーを提供してくれます。興味のあるバージョンは完全に埋もれています。おそらく、ファイルの番号付きバックアップを手動でトリガーする方法がありますが、それは必要なときだけですか?何らかの方法で簡単な「コミットメッセージ」をそのバックアップに添付することができれば、これは非常に良いソリューションになります。しかし、今のところ、私はマギットの学習にこだわっていると思います:)
ブライアンZ

2

このソリューションを使用する機会はまだありませんが、Cory DoctorowとThomas Gideonのflashbakeも検討してください。ここだDoctorowのはそれについて言いたいこと

私は、コンピューター化された時代の前に、作家が出版までの一連の完全な草案を作成し、消去、注釈などを完備したと文句を言った数人のデジタルアーキビストとの議論の後にこれを行うよう促されました。これらは、私たちが関心を寄せる本の背後にある隠された物語をしばしば明らかにする方法で創造的なプロセスを照らすので、アーカイブの金です。対照的に、多くの作家は、最初の構成と最終ドラフトの間の中間状態の実際の体系的な記録なしに、発行時間まで修正される単一(または少数)のデジタルファイルのみを作成します。

Flashbakeを入力します。Flashbakeは15分ごとに、チェックするように依頼したファイルをすべて確認します(進行中のフィクション、todoリスト、有用な情報のファイル、最近の書籍の完成した電子版をすべて確認しています) )、最後のチェック以降に行われた変更を記録し、システムクロックの現在のタイムゾーン、Googleから取得したそのタイムゾーンの天気、ブログのRSSの下にあるあなたの署名欄を含む最後の3つの見出しに注釈を付けますフィード(私はこれを「どこにいるのか、そこにどんな感じがあるのか​​、何を考えているのか?」また、コンピューターの稼働時間も記録します。将来のバージョンでは、最新の3曲を音楽プレーヤーで再生できると楽しいと思います。

ことで、私は私が書いてしまったことから、それをテストする機会がなかった、と述べた多くも... I種類のより良い使用になった... ORGモードでのもののを、そして多くのプログラミングして、そしてmagit、そして最後に、私はちょっと...それを使用する必要はありませんでした。

いずれにせよ、このソリューションは、非技術的なプロジェクトに取り組んでいる作家を対象としています。あなたの要件に合っているかもしれません。


1

とはまったく関係emacsありませんが、テキストファイルをDropboxに保存できます。プロユーザーの場合は、拡張バージョン履歴を使用できます。(暗号化が必要な場合は、SparkleShareをご覧ください。)

次に、少し自動化されたflashbakeがあります(ここにチュートリアルがあります)。

また、それは他の場所で尋ねられ ので、あなたが役に立つ答えを見つけることができます。


Flashbakeは非常に有望に見えます。私は間違いなくそれを試してみます。
ブライアンZ

-1

Dropboxを使用できます。Cx Csを押すたびに、修正可能なバージョンのファイルが作成されます。テキストファイルの暗号化には、GNU Privacy Guardを使用します。これはEmacsでサポートされています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.