Apakah ada sistem kontrol versi yang disederhanakan yang sesuai untuk penulisan non-coders di Emacs?


28

Saya seorang akademisi dan saya suka melakukan sebanyak mungkin tulisan saya di Emacs. Hal utama yang hilang bagi saya adalah kemampuan untuk dengan mudah meninjau perubahan yang saya buat pada file teks dari waktu ke waktu.

Fitur pelacakan pada artikel Wikipedia atau Google Documents keduanya sesuai dengan apa yang saya cari. Saya telah bermain dengan sistem kontrol versi seperti git karena mereka tampaknya didukung dengan baik oleh Emacs, tetapi saya menemukan mereka sulit untuk digunakan dan jauh lebih kompleks daripada yang saya butuhkan. Mendaftarkan repositori, check in dan out, semua itu hanya merepotkan.

Saya kira tidak ada paket di luar sana yang menyediakan fungsionalitas yang saya cari dengan cara yang relatif ramah pengguna?


3
Saya sarankan menggunakan gitdan magit- github.com/magit/magit - karena Anda sudah sedikit bermain-main dengannya. Anda mungkin ingin membiasakan diri dengan opsi baris perintah sehingga Anda akan memiliki pemahaman yang lebih baik tentang apa yang magitsedang dilakukan. Emacs bukan untuk non-coders, tetapi Anda sudah cukup lama berada di lokasi untuk tidak takut - :) Anda mungkin juga ingin mencoba bermain dengan gist: github.com/defunkt/gist.el
lawlist

Secara teknis, tujuan dari vc-kelompok perintah adalah untuk menyederhanakan proses menggunakan VCS. Sayangnya, mereka tidak seintuitif yang memungkinkan pengguna tanpa pengalaman untuk memanfaatkannya dengan baik. Di sisi lain, sistem seperti yang Anda sebutkan sangat terbatas, sehingga orang dengan cepat mengembangkan tuntutan yang tidak dapat mereka penuhi. gnu.org/software/emacs/manual/html_node/emacs/… ada mekanisme sederhana untuk menyimpan cadangan, tetapi karena di atas, saya lebih suka belajar menggunakan beberapa VCS sebagai gantinya.
wvxvw

6
Saya juga seorang akademisi, dan sudah mulai menggunakan git/ magituntuk kontrol versi dari makalah saya. Tampaknya menakutkan untuk memulai, tetapi a) Anda tidak harus mempelajarinya sekaligus, dan b) menyenangkan untuk digunakan setelah melewati kurva belajar awal. Alur kerja yang baik juga membantu Anda mendisiplinkan tugas menulis Anda, karena mendorong Anda untuk membubuhi keterangan apa yang Anda lakukan - yang merupakan cara terbaik untuk mendapatkan garis waktu dari evolusi proyek penulisan.
Dan

Sistem operasi apa yang Anda pakai? Saya menggunakan RCS selama bertahun-tahun, dan sebelumnya SCCS, tetapi mulai menjadi kasus ini tidak lagi dibundel dengan OS, dan baru-baru ini beralih ke git, setelah memiliki beberapa makalah di bawah subversi. Proses check in di git memiliki satu langkah ekstra dibandingkan dengan RCS, tetapi dalam beberapa situasi, sangat berguna untuk memiliki set file yang diperiksa bersamaan.
Andrew Swann

Ini ada di pikiran saya, dan auto-commit mungkin menjadi bagian dari cerita: Secara otomatis komit untuk git setelah setiap save projects.ryuslash.org/git-auto-commit-mode
grettke

Jawaban:


43

Masalah dengan sistem kontrol versi yang ada bukanlah kompleksitasnya; itu adalah fakta bahwa ada begitu banyak informasi di luar sana sehingga sangat sulit bagi pemula untuk melihat hutan untuk pepohonan (yaitu, untuk mencari tahu apa yang mereka lakukan dan tidak perlu belajar ketika mereka baru memulai. ).

Posting ini akan fokus pada git, dan menjelaskan cara mengontrolnya dari Emacs menggunakan paket add-on yang disebut magit. Ya , gitrumit, tetapi Anda tidak perlu belajar banyak untuk menggunakannya secara produktif untuk tujuan yang Anda jelaskan.

Saya akan berasumsi bahwa Anda telah gitmenginstal (jika tidak, dapatkan di sini ), dan bahwa Anda tidak ingin meninggalkan Emacs sama sekali.


Menginstal magit

magitadalah gitujung depan untuk Emacs. Ini tersedia dari MELPA dan Anda dapat menginstalnya melalui:

M-x package-install RET magit RET

Jika Anda belum mengaktifkan MELPA dalam konfigurasi Anda, Anda dapat menemukan instruksi tentang cara melakukannya di sini .

Menyiapkan repositori

Katakanlah Anda memiliki folder bernama ~/writingdi direktori home Anda yang berisi satu atau lebih dokumen yang ingin Anda letakkan di bawah kontrol versi.

  1. Buka folder di Dired: C-x d ~/writing RET
  2. Buka shell: M-x shell RET
  3. Ketik git initdan tekan RET.

Itu dia. Anda sekarang memiliki gitrepositori. Tidak perlu "mendaftar" di mana saja. gitadalah sistem kontrol versi terdistribusi ; itu tidak memerlukan server jauh untuk melacak perubahan.

Memeriksa status repositori Anda

  1. Beralih kembali ke buffer Dired yang berisi daftar file di repositori Anda.
  2. Lakukan M-x magit-status RET.

Anda dapat memikirkan buffer yang muncul sebagai "panel kontrol" Anda untuk bekerja dengan repositori Anda. Untuk repositori baru, tampilannya seperti ini:

Buffer status magit untuk repositori yang baru dibuat

  • Anda dapat menavigasi antara berbagai bagian buffer ini menggunakan n( magit-goto-next-section) dan p( magit-goto-previous-section).

  • Anda dapat menyegarkan buffer dengan menekan g( magit-refresh).

Perhatikan bahwa Anda dapat memunculkan buffer status dari file atau direktori apa pun yang termasuk repositori yang Anda buat sebelumnya.

Menambahkan file

Seperti yang dapat Anda lihat di tangkapan layar, ada tiga file di repositori yang gitsaat ini tidak dilacak. Untuk memberitahu gituntuk mulai melacak file, Anda perlu tahap itu: Dengan titik pada file yang ingin Anda tambahkan, tekan s. Buffer status akan terlihat seperti ini:

Buffer status magit setelah menambahkan file-1.txt

Berkomitmen

Setelah melakukan satu atau lebih file, Anda dapat mengkomitnya dengan menekan c c. Ini akan memunculkan buffer yang terlihat seperti ini:

Buffer magit untuk memasukkan pesan komit

Masukkan pesan komit Anda di bagian atas dan kemudian tekan C-c C-cuntuk menyelesaikan komit. (Untuk membatalkan, tekan C-c C-k.)

Buffer status akan terlihat seperti ini:

Buffer status magit setelah komit pertama

Pementasan perubahan

Jika Anda membuat perubahan pada file yang dilacak, mereka akan terdaftar di bagian terpisah ("Perubahan yang tidak bertahap") di buffer status:

Perubahan tidak bertahap (diciutkan)

Untuk meninjau perubahan yang Anda buat pada file, navigasikan ke baris yang mengatakan Modified file-1.txtdan tekan TAB:

Perubahan tidak bertahap (diperluas)

Untuk melakukan perubahan ini, tekan s:

Buffer status magit setelah melakukan perubahan pada file yang dilacak

Melihat komitmen sebelumnya

Terakhir, jika Anda ingin meninjau komitmen sebelumnya, Anda dapat menekan l l(itu adalah dua huruf kecil L):

Buffer log magit

Seperti biasa, Anda dapat menavigasi buffer yang muncul dengan ndan p. Magit akan menampilkan perubahan yang terkait dengan komit individual yang tercantum dalam buffer ini di jendela terpisah.

Ringkasan

Dari shell:

  • git init: Menginisialisasi gitrepositori di direktori saat ini

Dari file atau direktori apa pun yang terkait dengan gitrepositori:

  • M-x magit-status RET

Dari buffer status:

  • s untuk menambahkan file baru atau perubahan tahap

  • c c untuk melakukan perubahan bertahap

    • C-c C-c untuk menyelesaikan komitmen
    • C-c C-k untuk membatalkan komitmen
  • l l untuk melihat log komit

Itu dia. :)


7
Anda tidak perlu git initdari shell. Jika Anda menelepon M-x magit-statussuatu tempat di luar repositori git, ia akan menawarkan untuk menyiapkannya. (Tapi Anda harus memanggilnya lagi untuk memunculkan buffer status setelah Anda selesai dengan pengaturan).
wvxvw

Anda telah meyakinkan saya bahwa ada baiknya mencoba versi kontrol lagi, dan ini harus menjadi panduan yang bermanfaat. Terima kasih!
Brian Z

1
Sejauh ini bagus tapi satu frustrasi adalah bahwa ketika saya mengubah beberapa kata dalam paragraf panjang, maka seluruh paragraf disorot sebagai perubahan bertahap. Saya benar-benar ingin melihat perubahan kata demi kata daripada baris demi baris.
Brian Z

3
@BrianZ Anda dapat menyesuaikan variabel magit-diff-refine-hunkuntuk mendapatkan perilaku yang Anda inginkan. Tambahkan (setq magit-diff-refine-hunk t) atau (setq magit-diff-refine-hunk 'all) ke file init Anda. Anda dapat melakukannya C-h v magit-diff-refine-hunk RETuntuk mendapatkan informasi lebih lanjut tentang arti pengaturan yang berbeda.
itsjeyd

Anda perlu bereksperimen dengan pengaturan magit-diff-ref-hunk untuk lebih dekat dengan apa yang Anda inginkan. Pengaturan default sangat bagus untuk melacak perubahan kode, tetapi tidak selalu brilian ketika Anda ingin melacak perubahan dalam pro. Mungkin perlu sedikit sebelum Anda melakukannya dengan benar, tetapi itu harus mungkin dan setelah Anda melakukannya, saya curiga Anda tidak akan pernah kembali!
Tim X

11

Selain magit(seperti yang diperlihatkan oleh jawaban itsjeyd), Anda juga dapat mencoba git-timemachine, yang menyediakan fasilitas untuk perputaran cepat melalui versi file yang lebih lama di bawah gitkontrol versi. Menurut halaman github-nya, keybindings default berikut memberi Anda rasa apa yang dapat Anda lakukan:

  • p Kunjungi versi bersejarah sebelumnya
  • n Kunjungi versi bersejarah berikutnya
  • w Salin hash singkat dari versi bersejarah saat ini
  • W Salin hash lengkap dari versi bersejarah saat ini
  • q Keluar dari mesin waktu.

8

Saya kira Anda akan menemukan Mode Cadangan dan / atau Cadangan Walker sangat menarik.

Keduanya bertujuan untuk meningkatkan mekanisme cadangan yang ada di Emacs, dan memberikan akses yang lebih baik ke dan visibilitas riwayat file Anda, tanpa memerlukan VCS tambahan.


6

Seperti yang disebutkan, cara sederhana untuk memiliki berbagai versi file adalah sistem cadangan Emacs.

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

Ini akan menggunakan direktori khusus untuk cadangan bernomor, yang tidak akan pernah dihapus secara otomatis. Kemudian Anda dapat menggunakannya C-u C-x C-suntuk membuat versi lain kapan saja.

Meskipun, saya pikir, tidak ada antarmuka yang mudah dan siap digunakan untuk mis. Membedakan versi-versi ini. Jadi, Anda harus secara manual membuka satu atau dua dari cadangan itu dan menggunakannya ediff-bufferspada dan / atau buffer asli.


1
Anda dapat membuat cadangan menggunakan, misalnya: gnu.org/software/emacs/manual/html_node/emacs/… (tandai satu file dengan mtitik pindahkan ke file lainnya dan tekan =).
wvxvw

2
Ini tampak seperti pilihan yang menarik dalam teori, tetapi itu hanya memberi saya folder besar penuh dengan cadangan acak. Versi yang saya minati sepenuhnya dikubur. Mungkin ada cara untuk secara manual memicu cadangan nomor file, tetapi hanya ketika saya menginginkannya? Jika saya juga bisa melampirkan "pesan komit" singkat ke cadangan itu, maka ini akan menjadi solusi yang sangat bagus. Tetapi untuk sekarang, saya kira saya terjebak belajar magit :)
Brian Z

2

Saya belum memiliki kesempatan untuk menggunakan solusi ini, tetapi Anda mungkin juga ingin mempertimbangkan flashbake Cory Doctorow dan Thomas Gideon . Inilah yang dikatakan Doctorow tentang hal itu :

Saya terdorong untuk melakukan ini setelah berdiskusi dengan beberapa arsiparis digital yang mengeluh bahwa, sebelum era komputerisasi, penulis menghasilkan serangkaian draf lengkap dalam perjalanan ke publikasi, lengkap dengan penghapusan, anotasi, dan sebagainya. Ini adalah arsip emas, karena menerangi proses kreatif dengan cara yang sering mengungkapkan kisah tersembunyi di balik buku-buku yang kita pedulikan. Sebaliknya, banyak penulis hanya menghasilkan satu (atau beberapa) file digital yang dimodifikasi hingga waktu publikasi, tanpa ada catatan sistematis nyata dari keadaan sementara antara sedikit komposisi pertama dan draft akhir.

Masukkan Flashbake. Setiap 15 menit, Flashbake melihat semua file yang Anda minta untuk diperiksa (saya sudah melihat semua fiksi yang sedang dalam proses, daftar todo saya, file bit informasi yang berguna, dan versi elektronik lengkap dari buku-buku terbaru saya. ), dan mencatat setiap perubahan yang dibuat sejak pemeriksaan terakhir, menjelaskannya dengan zona waktu saat ini pada jam sistem, cuaca di zona waktu itu seperti yang diambil dari Google, dan tiga tajuk berita utama dengan baris-Anda di bawahnya di RSS blog Anda feed (Saya sudah mencirikan ini sebagai "Di mana saya, seperti apa di sana, dan apa yang saya pikirkan?"). Ini juga mencatat waktu aktif komputer Anda. Untuk versi masa depan, saya pikir akan menyenangkan untuk memiliki tiga lagu terbaru yang diputar oleh pemutar musik Anda.

Yang sedang berkata, saya tidak pernah memiliki kesempatan untuk mengujinya, karena saya akhirnya menulis banyak hal dalam mode-org, dan banyak pemrograman, dan ... yah ... Saya agak lebih baik dalam menggunakan magit, dan pada akhirnya, aku agak ... tidak perlu menggunakannya.

Bagaimanapun, solusi ini ditujukan untuk penulis yang bekerja pada proyek non-teknis. Anda mungkin menemukan bahwa itu mungkin sesuai dengan kebutuhan Anda.


1

Meskipun benar-benar tidak terkait emacs, Anda masih dapat menyimpan file teks ke Dropbox dan jika Anda pengguna pro, Anda dapat menggunakan riwayat versi yang diperluas . (Jika Anda ingin enkripsi, Anda mungkin ingin melihat SparkleShare .)

Lalu ada flashbake yang sedikit otomatis (di sini ada tutorial ).

Juga itu bertanya tempat lain juga , yang jawaban yang Anda mungkin menemukan berguna.


Flashbake terlihat sangat menjanjikan. Saya pasti akan mencobanya.
Brian Z

-1

Anda dapat menggunakan Dropbox. Itu membuat versi file Anda dapat direvisi setiap kali Anda menekan Cx Cs. Untuk enkripsi file teks saya, saya menggunakan GNU Privacy Guard, yang didukung oleh Emacs.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.