Emacs'ta kodlayıcı olmayanlar için basitleştirilmiş bir versiyon kontrol sistemi var mı?


28

Ben bir akademisyenim ve Emacs'ta mümkün olduğunca yazmamı seviyorum. Benim için eksik olan önemli bir şey, zaman içinde bir metin dosyasına yaptığım değişiklikleri kolayca gözden geçirme yeteneğidir.

Wikipedia makaleleri veya Google Dokümanlar’daki izleme özellikleri, aradığım şey boyunca. Git gibi sürüm kontrol sistemleriyle oynamıştım, çünkü Emacs tarafından iyi desteklenmiş görünüyorlar, ancak ihtiyacım olandan çok daha karmaşık ve kullanımı daha zor buldum. Depoları kaydetme, giriş ve çıkış işlemleri, yalnızca sorunlu bir durumdu.

Aradığım işlevselliği nispeten kullanıcı dostu bir şekilde sağlayan herhangi bir paket olduğunu sanmıyorum?


3
Ben gitve magit- github.com/magit/magit - kullanarak biraz oynamış olmanızı tavsiye ederim . Muhtemelen kendinizi komut satırı seçeneklerine alıştırmak isteyeceksiniz, böylece ne magityaptığınızı daha iyi anlayabilirsiniz . Emacs olduğu değil olmayan kodlayıcılar için, ancak bunun korkma kadar uzun sahnenin etrafında been - :) Ayrıca ile oynamaya denemek isteyebilirsiniz gist: github.com/defunkt/gist.el
lawlist

Teknik olarak, vc-komut grubunun amacı VCS'lerin kullanım sürecini kolaylaştırmaktır. Ne yazık ki, hiçbir deneyimi olmayan kullanıcıların bunları iyi bir şekilde kullanmalarına izin verecek kadar sezgisel değiller. Öte yandan, bahsettiğiniz sistemler gibi sistemler çok sınırlayıcıdır, böylece bir tanesi hızla karşılayamayacakları talepler geliştirir. gnu.org/software/emacs/manual/html_node/emacs/… yedek tutmak için basit bir mekanizma var, ancak yukarıda olduğu için bunun yerine bazı VCS kullanmayı öğrenmeyi tavsiye ederim.
wvxvw

6
Aynı zamanda bir akademisyenim ve makalelerin sürüm kontrolü için git/ kullanmaya başladım magit. Başlamak için korkutucu görünüyor, ancak a) hepsini bir kerede öğrenmek zorunda değilsiniz ve b) ilk öğrenme eğrisini geçtikten sonra kullanmak keyifli. İyi bir iş akışı aynı zamanda yazdıklarınızı disipline etmenize yardımcı olur, çünkü yaptığınız işi açıklamada size yardımcı olur - bu yazı projesinin evriminin zaman çizelgesini almanın harika bir yoludur.
Dan

Hangi işletim sistemindesiniz? RCS'yi yıllarca ve daha önce SCCS'yi kullandım, ancak bunun artık işletim sistemi ile bir araya gelmediği ve son zamanlarda gitmeye geçti ve sübvansiyon altında bazı gazeteler olduğu anlaşılmaya başladı. Git'teki check-in işleminde RCS'ye göre bir adım daha vardır, ancak bazı durumlarda, birlikte kontrol edilen dosya kümelerinin bulunması çok yararlıdır.
Andrew Swann

Bu aklımda olmuştur ve otomatik işleyen hikayenin bir parçası olabilir: Otomatik kaydetme Her sonra Git taahhüt projects.ryuslash.org/git-auto-commit-mode
grettke

Yanıtlar:


43

Mevcut sürüm kontrol sistemlerinde sorun karmaşıklığı kadar değildir; Orada yeni bir bilgi hazinesi olduğu gerçeği, yeni başlayanlar için ormanları ağaçlar için görmenin çok zor olabileceği (yani ne yaptıklarını ve yeni başladıklarında öğrenmeleri gerekmeyen şeyleri bulmak) çok zor olabilir. ).

Bu yayın üzerinde durulacak gitve adı verilen bir eklenti paketi kullanarak Emacs'tan nasıl kontrol edileceği anlatılacak magit. Evet , gitkarmaşıktır, ancak onu tanımladığınız amaç için verimli bir şekilde kullanmak için çok fazla şey öğrenmenize gerek yoktur.

Yüklemiş olduğunuzu git(istemiyorsanız, buraya getirin ) ve Emacs'ı bırakmak istemediğinizi varsayacağım .


yükleme magit

magitgitEmacs için bir ön uç. MELPA'dan temin edilebilir ve aşağıdakiler aracılığıyla yükleyebilirsiniz:

M-x package-install RET magit RET

Yapılandırmanızda MELPA'yı etkinleştirme şansınız olmadığında, bunun nasıl yapılacağına ilişkin talimatları burada bulabilirsiniz .

Bir havuz oluşturmak

Diyelim ki ~/writing, giriş dizininizde, sürüm kontrolü altına almak istediğiniz bir veya daha fazla belgeyi içeren bir klasörünüz var .

  1. Dired'da klasörü açın: C-x d ~/writing RET
  2. Bir kabuk aç: M-x shell RET
  3. Yaz git initve vur RET.

Bu kadar. Artık bir githavuzunuz var. Herhangi bir yere "kaydolmak" gerekmez. gita, dağıtılmış sürüm kontrolü sistemi; değişiklikleri izlemek için uzak bir sunucu gerektirmez.

Deponuzun durumunu kontrol etme

  1. Deponuzdaki dosyaları listeleyen Dired buffer'a geri dönün.
  2. Do M-x magit-status RET.

Depo ile çalışmak için gelen "kontrol paneli" olarak gelen arabellek düşünebilirsiniz. Yeni bir depo için şuna benziyor:

Yeni oluşturulan depo için magit status buffer

  • n( magit-goto-next-section) Ve p( magit-goto-previous-section) tuşlarını kullanarak bu tamponun farklı bölümleri arasında gezinebilirsiniz .

  • Tamponu g( magit-refresh) tuşuna basarak yenileyebilirsiniz .

Durum arabelleğini daha önce kurduğunuz depoya ait herhangi bir dosyadan veya dizinden getirebileceğinizi unutmayın.

Dosya ekleme

Ekran görüntüsünde de görebileceğiniz gibi, depoda gitşu anda izlemeyen üç dosya var . Söylemek gerekirse gitbir dosya izlemeye başlamak için yapmanız gerekenler sahne sen basın eklemek istediğiniz dosyanın üzerine noktasıyla: it s. Durum tamponu daha sonra şöyle görünecektir:

File-1.txt ekledikten sonra magit status buffer

Committing

Bir veya daha fazla dosyayı hazırladıktan sonra, tuşuna basarak bunları işleyebilirsinizc c . Bu şuna benzeyen bir arabellek getirecektir:

İleti mesajı girmek için magit buffer

Taahhüt mesajınızı en üste girin ve daha sonra taahüt C-c C-cişlemini tamamlamak için tuşuna basın . (İptal etmek için, tuşuna basın C-c C-k.)

Durum tamponu daha sonra şöyle görünecektir:

İlk işlemden sonra magit durum tamponu

Aşama değişiklikleri

İzlenen bir dosyada değişiklik yaparsanız, durum arabelleğinde ayrı bir bölümde ("İstenmeyen değişiklikler") listelenir:

İstenmeyen değişiklikler (daraltılmış)

Dosyada yaptığınız değişiklikleri incelemek için, yazan satıra gidin Modified file-1.txtve tuşuna basın TAB:

İstenmeyen değişiklikler (genişletilmiş)

Bu değişiklikleri yapmak için s:

İzlenen dosyadaki değişiklikleri düzenledikten sonra durum arabelleğini magit

Geçmiş taahhütleri görüntüleme

Son olarak, geçmişteki taahhütleri gözden geçirmek istiyorsanız, tuşuna basabilirsiniz l l(bu iki küçük harf L'dir):

Magit log arabelleği

Her zamanki gibi nve ile gelen arabellekte gezinebilirsiniz p. Magit, bu tamponda listelenen bireysel taahhütlerle ilişkili değişiklikleri ayrı bir pencerede gösterecektir.

özet

Kabuğundan:

  • git init: gitDepoyu geçerli dizinde başlat

Bir githavuzla ilişkili herhangi bir dosya veya dizinden:

  • M-x magit-status RET

Durum arabelleğinden:

  • s yeni dosyalar veya sahne değişiklikleri eklemek için

  • c c aşamalı değişiklikler yapmak

    • C-c C-c taahhüt vermek
    • C-c C-k taahhütten vazgeçmek
  • l l taahhüt günlüklerini görüntülemek için

Bu kadar. :)


7
git initKabuğundan yapmana gerek yok . M-x magit-statusGit deposunun dışındaki herhangi bir yeri ararsanız , bir tane kurmayı önerecektir. (Ancak kurulumu tamamladıktan sonra durum arabelleğini getirmek için tekrar aramanız gerekir).
wvxvw

Beni başka bir deneme sürümü sürümüne vermeye değer olduğuna ikna ettiniz ve bu yardımcı bir rehber olmalı. Teşekkürler!
Brian Z

1
Şimdiye kadar iyi ama bir hayal kırıklığı, uzun bir paragrafta birkaç kelime değiştirdiğimde, o zaman tüm paragrafın aşamalı bir değişiklik olarak vurgulanmasıdır. Gerçekten değişiklikleri kelime satır satır yerine kelime görmek istiyorum.
Brian Z

3
@BrianZ İstediğiniz magit-diff-refine-hunkdavranışı elde etmek için değişkeni özelleştirebilirsiniz . Init dosyasına ekleyin (setq magit-diff-refine-hunk t) veya ekleyin (setq magit-diff-refine-hunk 'all). C-h v magit-diff-refine-hunk RETFarklı ayarların ne anlama geldiği hakkında daha fazla bilgi edinmek için yapabilirsiniz .
itsjeyd

İstediklerinize yaklaşmak için magit-diff-refine-hunk ayarlarını denemeniz gerekecektir. Varsayılan ayarlar, kod değişikliklerini izlemek için mükemmeldir, ancak artılarda yapılan değişiklikleri izlemek istediğinizde mutlaka mükemmel olmaz. Tamamen doğru yapmadan önce biraz zaman alabilir, ancak bu mümkün olmalı ve bir kez yaptıktan sonra asla geri dönmeyeceğinden şüpheleniyorum!
Tim X,

11

Buna ek olarak magit(@ itsjeyd'in cevabının açıkça gösterdiği gibi), sürüm kontrolü git-timemachinealtındaki bir dosyanın eski sürümleri arasında hızlı bisiklete binme için kolaylıklar sağlayan deneyimleri de deneyebilirsiniz git. Github sayfasına göre, aşağıdaki varsayılan tuş bağlantıları size yapabilecekleriniz hakkında bir fikir verir:

  • p Önceki tarihi sürümü ziyaret et
  • n Bir sonraki tarihi versiyonu ziyaret et
  • w Geçerli tarihi sürümün kısaltılmış özetini kopyalayın
  • W Geçerli tarihi sürümün tam özetini kopyala
  • q Zaman makinesinden çıkın.

8

Yedekleme Modu ve / veya Yedekleme Walker'ı çok ilginç bulacağınızdan şüpheleniyorum .

Her ikisi de Emacs'taki mevcut yedekleme mekanizmalarından yararlanmayı ve ek bir VCS gerektirmeden dosya geçmişinize daha iyi erişim ve görünürlük sağlamayı amaçlamaktadır.


6

Daha önce de belirtildiği gibi, bir dosyanın farklı sürümlerine sahip olmanın basit bir yolu Emacs yedekleme sistemidir.

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

Bu, numaralandırılmış yedeklemeler için özel bir dizini kullanır ve bu dosyalar asla otomatik olarak silinmez. Sonra istediğiniz C-u C-x C-szaman başka bir sürüm yapmak için kullanabilirsiniz .

Yine de, sanırım, bu sürümleri farklılaştırmak için kolay, kullanıma hazır bir arayüz yok. Bu nedenle, bu yedeklerden birini veya ikisini manuel olarak açmanız ve ediff-buffersbunları ve / veya orijinal arabelleği kullanmanız gerekir.


1
Yedekleri örneğin: gnu.org/software/emacs/manual/html_node/emacs/… (farklı bir dosyaya mhareket noktası ile işaretleyin ve tuşuna basın =) kullanarak değiştirebilirsiniz.
wvxvw

2
Bu teoride çekici bir seçenek gibi gözüküyordu, ancak bana rastgele yedeklerle dolu çok büyük bir klasör veriyor. İlgilendiğim sürümler tamamen gömülü. Belki de bir dosyanın numaralandırılmış bir yedeğini manuel olarak tetiklemenin bir yolu vardır, fakat sadece istediğimde? Bu yedeklemeye bir şekilde kısa bir "taahhüt mesajı" ekleyebilseydim, bu çok iyi bir çözüm olurdu. Ama şimdilik, sanırım büyücü öğrenmeye mahkumum :)
Brian Z

2

Bu çözümü kullanma fırsatım olmadı, ancak Cory Doctorow ve Thomas Gideon'un flashbake oyununu da düşünebilirsiniz . İşte Doctorow'un bu konuda söyleyecekleri :

Bunu, bilgisayarlı çağdan önce, yazarların yayınlara giderken, silme, açıklama vb. İle tamamlanan bir dizi taslak hazırladıklarından şikayet eden birkaç dijital arşivci ile yapılan görüşmelerden sonra yapmam istendi. Bunlar arşivsel altındır, çünkü yaratıcı süreci, umursadığımız kitapların arkasındaki gizli hikayeleri sıklıkla ortaya çıkaran bir şekilde aydınlatırlar. Buna karşılık, birçok yazar, ilk bitirme kompozisyonu ile son taslak arasındaki ara durumların gerçek sistematik kayıtları olmadan, yayınlanma süresine kadar değiştirilen sadece bir (veya birkaç) dijital dosya üretir.

Flashbake'e girin. 15 dakikada bir Flashbake, kontrol etmesini istediğin dosyalara bakar (Devam eden tüm kurgularıma, yapılacaklar listeme, faydalı bilgilerimden ve son kitaplarımın tamamlanmış elektronik sürümlerine bakarım. ) ve son kontrolden sonra yapılan değişiklikleri sistem saatindeki geçerli saat dilimine, Google’dan getirilen saat dilimindeki hava durumuna ve blogunuzun RSS’sindeki alt satırınızla birlikte son üç başlığa ek açıklama ekleyerek kaydeder. feed (Bunu “Neredeyim, orada nasıl bir yer ve ne düşünüyorum?” olarak nitelendiriyorum). Ayrıca, bilgisayarınızın çalışma süresini de kaydeder. Gelecekteki bir sürüm için, müzik çalarınızda en son ç şarkının çalınmasının eğlenceli olacağını düşünüyorum.

Varlık Ben yazma sona erdi beri, bunu test imkanı yoktu dedi çok iyi ... ben tür iyi kullanmada var ... org-modunda malzeme ve bir sürü programlama, ve magit, ve sonunda, sadece ... onu kullanmama gerek yoktu.

Her durumda, bu çözüm teknik olmayan projelerde çalışan yazarları hedef aldı. Gereksinimlerinize uygun olabilir bulabilirsiniz.


1

Kesinlikle ilgisiz olsa da emacs, metin dosyalarınızı Dropbox'a kaydedebilirsiniz ve profesyonel bir kullanıcıysanız genişletilmiş sürüm geçmişini kullanabilirsiniz . (Eğer şifreleme istiyorsanız, SparkleShare'a bakmak isteyebilirsiniz .)

Sonra biraz otomatik olan flashbake var ( işte bir öğretici ).

Ayrıca , yanıtları yararlı bulabileceğiniz başka bir yerde de istendi .


Flashbake çok umut verici görünüyor. Bunu kesinlikle deneyeceğim.
Brian Z

-1

Dropbox'ı kullanabilirsiniz. Cx Cs'ye her basışınızda dosyanızın revize edilebilir halini alır. Metin dosyalarımı şifrelemek için Emacs tarafından desteklenen GNU Privacy Guard'ı kullanıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.