Có một hệ thống kiểm soát phiên bản đơn giản hóa phù hợp cho những người không viết mã bằng Emacs không?


28

Tôi là một học giả và tôi thích viết càng nhiều càng tốt trong Emacs. Một điều quan trọng còn thiếu đối với tôi là khả năng dễ dàng xem lại các thay đổi tôi đã thực hiện đối với tệp văn bản theo thời gian.

Các tính năng theo dõi trên các bài viết Wikipedia hoặc Tài liệu Google đều nằm dọc theo những gì tôi đang tìm kiếm. Tôi đã chơi với các hệ thống kiểm soát phiên bản như git bởi vì chúng dường như được hỗ trợ tốt bởi Emacs, nhưng tôi thấy chúng khó sử dụng và phức tạp hơn nhiều so với những gì tôi cần. Đăng ký kho lưu trữ, kiểm tra trong và ngoài, tất cả chỉ là rắc rối.

Tôi không cho rằng có bất kỳ gói nào ngoài đó cung cấp chức năng mà tôi đang tìm kiếm theo cách tương đối thân thiện với người dùng?


3
Tôi khuyên bạn nên sử dụng gitmagit- github.com/magit/magit - vì bạn đã chơi xung quanh một chút với nó. Có lẽ bạn sẽ muốn làm quen với các tùy chọn dòng lệnh để bạn hiểu rõ hơn về những gì magitđang làm. Emacs là không cho người không lập trình, nhưng bạn đã được xung quanh hiện trường đủ lâu để không phải sợ nó - :) Bạn cũng có thể muốn thử chơi với gist: github.com/defunkt/gist.el
lawlist

Về mặt kỹ thuật, mục tiêu của vc-nhóm các lệnh là đơn giản hóa quá trình sử dụng các VCS. Thật không may, chúng không trực quan như cho phép người dùng không có kinh nghiệm sử dụng chúng tốt. Mặt khác, các hệ thống như những hệ thống mà bạn đề cập rất hạn chế, do đó, một hệ thống sẽ nhanh chóng phát triển các nhu cầu mà chúng không thể đáp ứng. gnu.org/software/emacs/manual/html_node/emacs/ Khăn có một cơ chế đơn giản để giữ các bản sao lưu, nhưng do ở trên, tôi muốn khuyên bạn nên sử dụng một số VCS thay thế.
wvxvw

6
Tôi cũng là một học giả, và đã bắt đầu sử dụng git/ magitđể kiểm soát phiên bản giấy tờ của mình. Nó có vẻ đáng sợ khi bắt đầu, nhưng a) bạn không phải học tất cả cùng một lúc và b) thật thú vị khi sử dụng sau khi vượt qua giai đoạn học tập ban đầu. Một quy trình công việc tốt cũng giúp bạn kỷ luật các công việc viết lách của mình, vì nó khuyến khích bạn chú thích những gì bạn đang làm - đó là một cách tuyệt vời để có được dòng thời gian về sự phát triển của dự án viết.
Dân

Bạn đang dùng hệ điều hành nào? Tôi đã sử dụng RCS trong nhiều năm và SCCS trước đây, nhưng nó bắt đầu là trường hợp này không còn đi kèm với HĐH và gần đây đã chuyển sang git, đã có một số giấy tờ bị lật đổ. Quá trình kiểm tra trong git có thêm một bước so với RCS, nhưng trong một số tình huống, sẽ rất hữu ích khi có các bộ tệp được kiểm tra cùng nhau.
Andrew Swann

Điều này đã có trong tâm trí của tôi và tự động cam kết có thể là một phần của câu chuyện: Tự động cam kết git sau mỗi lần lưu dự
án.ryuslash.org

Câu trả lời:


43

Vấn đề với các hệ thống kiểm soát phiên bản hiện tại không quá phức tạp; Có một sự thật là có rất nhiều thông tin ngoài kia đến nỗi người mới bắt đầu rất khó nhìn thấy rừng cây (nghĩa là tìm ra những gì họ làm và không cần phải học khi họ mới bắt đầu ).

Bài đăng này sẽ tập trung vào gitvà mô tả cách kiểm soát nó từ Emacs bằng cách sử dụng gói bổ trợ được gọi magit. Đúng , gitrất phức tạp, nhưng bạn không cần phải học nhiều để sử dụng nó một cách hiệu quả cho mục đích bạn mô tả.

Tôi sẽ giả định rằng bạn đã gitcài đặt (nếu bạn không, hãy lấy nó ở đây ) và rằng bạn không muốn rời khỏi Emacs.


Cài đặt magit

magitlà một gitmặt trước cho Emacs. Nó có sẵn từ MELPA và bạn có thể cài đặt nó qua:

M-x package-install RET magit RET

Nếu bạn chưa kích hoạt MELPA trong cấu hình của mình, bạn có thể tìm thấy hướng dẫn về cách thực hiện điều đó tại đây .

Thiết lập một kho lưu trữ

Giả sử bạn có một thư mục được gọi ~/writingtrong thư mục chính chứa một hoặc nhiều tài liệu mà bạn muốn đặt dưới sự kiểm soát phiên bản.

  1. Mở thư mục trong Dired: C-x d ~/writing RET
  2. Mở một cái vỏ: M-x shell RET
  3. git initvà đánh RET.

Đó là nó. Bây giờ bạn có một gitkho lưu trữ. Không cần phải "đăng ký" nó ở bất cứ đâu. gitlà một hệ thống kiểm soát phiên bản phân tán ; nó không yêu cầu một máy chủ từ xa để theo dõi các thay đổi.

Kiểm tra trạng thái của kho lưu trữ của bạn

  1. Quay trở lại bộ đệm Dired liệt kê các tệp trong kho lưu trữ của bạn.
  2. Làm M-x magit-status RET.

Bạn có thể nghĩ về bộ đệm xuất hiện dưới dạng "bảng điều khiển" để làm việc với kho lưu trữ của bạn. Đối với một kho lưu trữ mới, nó trông giống như thế này:

Bộ đệm trạng thái Magit cho kho lưu trữ mới được tạo

  • Bạn có thể điều hướng giữa các phần khác nhau của bộ đệm này bằng cách sử dụng n( magit-goto-next-section) và p( magit-goto-previous-section).

  • Bạn có thể làm mới bộ đệm bằng cách nhấn g( magit-refresh).

Lưu ý rằng bạn có thể hiển thị bộ đệm trạng thái từ bất kỳ tệp hoặc thư mục nào thuộc về kho lưu trữ mà bạn đã thiết lập trước đó.

Thêm tệp

Như bạn có thể thấy trong ảnh chụp màn hình, có ba tệp trong kho lưu trữ githiện không theo dõi. Để biết gitđể bắt đầu theo dõi một tệp, bạn cần tạo giai đoạn cho nó: Với điểm trên tệp bạn muốn thêm, nhấn s. Bộ đệm trạng thái sau đó sẽ trông như thế này:

Bộ đệm trạng thái Magit sau khi thêm tệp-1.txt

Cam kết

Sau khi dàn dựng một hoặc nhiều tệp, bạn có thể cam kết chúng bằng cách nhấn c c. Điều này sẽ mang đến một bộ đệm trông như thế này:

Bộ đệm Magit để nhập thông điệp cam kết

Nhập thông điệp cam kết của bạn ở trên cùng và sau đó nhấn C-c C-cđể hoàn thành cam kết. (Để hủy bỏ, nhấn C-c C-k.)

Bộ đệm trạng thái sau đó sẽ trông như thế này:

Bộ đệm trạng thái Magit sau lần cam kết đầu tiên

Thay đổi giai đoạn

Nếu bạn thay đổi tệp được theo dõi, chúng sẽ được liệt kê trong một phần riêng ("Thay đổi chưa được xử lý") trong bộ đệm trạng thái:

Những thay đổi chưa được thực hiện (sụp đổ)

Để xem lại những thay đổi bạn đã thực hiện đối với tệp, hãy điều hướng đến dòng có nội dung Modified file-1.txtvà nhấn TAB:

Thay đổi chưa được chỉnh sửa (mở rộng)

Để thực hiện những thay đổi này, nhấn s:

Bộ đệm trạng thái Magit sau khi thay đổi tập tin theo dõi

Xem các cam kết trong quá khứ

Cuối cùng, nếu bạn muốn xem lại các cam kết trong quá khứ, bạn có thể nhấn l l(đó là hai chữ L viết thường):

Bộ đệm nhật ký Magit

Như thường lệ, bạn có thể điều hướng bộ đệm đi kèm np. Magit sẽ hiển thị các thay đổi liên quan đến các cam kết riêng lẻ được liệt kê trong bộ đệm này trong một cửa sổ riêng.

Tóm lược

Từ vỏ:

  • git init: Khởi tạo gitkho lưu trữ trong thư mục hiện tại

Từ bất kỳ tập tin hoặc thư mục liên quan đến một gitkho lưu trữ:

  • M-x magit-status RET

Từ bộ đệm trạng thái:

  • s để thêm tập tin mới hoặc thay đổi giai đoạn

  • c c để thực hiện các thay đổi theo giai đoạn

    • C-c C-c để hoàn thành cam kết
    • C-c C-k hủy bỏ cam kết
  • l l để xem nhật ký cam kết

Đó là nó. :)


7
Bạn không cần phải git inittừ vỏ. Nếu bạn gọi M-x magit-statusmột nơi nào đó bên ngoài bất kỳ kho lưu trữ git nào, nó sẽ đề nghị thiết lập một kho lưu trữ. (Nhưng bạn sẽ cần gọi lại để hiển thị bộ đệm trạng thái sau khi bạn hoàn tất cài đặt).
wvxvw

Bạn đã thuyết phục tôi rằng nó đáng để cho phiên bản kiểm soát một lần thử khác, và đây sẽ là một hướng dẫn hữu ích. Cảm ơn!
Brian Z

1
Cho đến nay rất tốt nhưng một điều thất vọng là khi tôi thay đổi một vài từ trong một đoạn văn dài, thì toàn bộ đoạn văn được tô sáng như một sự thay đổi theo giai đoạn. Tôi thực sự muốn thấy những thay đổi từng chữ hơn là từng dòng một.
Brian Z

3
@BrianZ Bạn có thể tùy chỉnh biến magit-diff-refine-hunkđể có hành vi bạn muốn. Thêm (setq magit-diff-refine-hunk t) hoặc (setq magit-diff-refine-hunk 'all) vào tập tin init của bạn. Bạn có thể làm C-h v magit-diff-refine-hunk RETđể có thêm thông tin về ý nghĩa của các cài đặt khác nhau.
itjeyd 04/02/2015

Bạn sẽ cần thử nghiệm với các cài đặt magit-diff-refine-hunk để đến gần hơn với những gì bạn muốn. Các cài đặt mặc định rất phù hợp để theo dõi các thay đổi mã, nhưng không nhất thiết phải xuất sắc khi bạn muốn theo dõi các thay đổi về ưu điểm. Có thể mất một chút trước khi bạn hoàn toàn đúng, nhưng điều đó là có thể và một khi bạn làm vậy, tôi nghi ngờ bạn sẽ không bao giờ quay trở lại!
Tim X

11

Ngoài magit(như câu trả lời của @ Itsjeyd ably chứng minh), bạn cũng có thể thửgit-timemachine , cung cấp phương tiện để đạp xe nhanh qua các phiên bản cũ hơn của tệp dưới sự gitkiểm soát phiên bản. Theo trang github của nó, các phím bấm mặc định sau đây cho bạn cảm giác về những gì bạn có thể làm:

  • p Ghé thăm phiên bản lịch sử trước đó
  • n Ghé thăm phiên bản lịch sử tiếp theo
  • w Sao chép hàm băm viết tắt của phiên bản lịch sử hiện tại
  • W Sao chép toàn bộ hàm băm của phiên bản lịch sử hiện tại
  • q Thoát khỏi cỗ máy thời gian.

8

Tôi nghi ngờ bạn sẽ tìm thấy Chế độ sao lưu và / hoặc Sao lưu Walker rất thú vị.

Cả hai đều nhằm mục đích tận dụng các cơ chế sao lưu hiện có trong Emacs và cung cấp quyền truy cập tốt hơn và khả năng hiển thị lịch sử tệp của bạn mà không yêu cầu thêm VCS.


6

Như đã đề cập, một cách đơn giản để có các phiên bản khác nhau của tệp là hệ thống sao lưu Emacs.

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

Điều này sẽ sử dụng một thư mục chuyên dụng để sao lưu được đánh số, sẽ không bao giờ tự động xóa. Sau đó, bạn có thể sử dụngC-u C-x C-s để tạo một phiên bản khác bất cứ lúc nào.

Mặc dù, tôi nghĩ rằng, không có giao diện dễ dàng, sẵn sàng để sử dụng, ví dụ như làm khác các phiên bản này. Vì vậy, bạn phải tự mở một hoặc hai trong số các bản sao lưu đó và sử dụng ediff-bufferschúng và / hoặc bộ đệm ban đầu.


1
Bạn có thể tìm các bản sao lưu bằng cách sử dụng, ví dụ: gnu.org/software/emacs/manual/html_node/emacs/ mẹo (đánh dấu một tệp bằng mđiểm di chuyển đến tệp khác và nhấn =).
wvxvw

2
Đây có vẻ như là một lựa chọn hấp dẫn trên lý thuyết, nhưng nó chỉ mang đến cho tôi một thư mục tràn ngập các bản sao lưu ngẫu nhiên. Các phiên bản tôi quan tâm hoàn toàn bị chôn vùi. Có lẽ có một cách để tự kích hoạt một bản sao lưu được đánh số của một tệp, nhưng chỉ khi tôi muốn nó? Nếu tôi cũng có thể đính kèm một "thông điệp cam kết" ngắn gọn vào bản sao lưu đó bằng cách nào đó, thì đây sẽ là một giải pháp rất hay. Nhưng hiện tại, tôi đoán tôi đang bị mắc kẹt trong việc học phép thuật :)
Brian Z

2

Tôi chưa có cơ hội sử dụng giải pháp này, nhưng bạn cũng có thể muốn xem xét flashbake của Cory Doctorow và Thomas Gideon . Đây là những gì Doctorow nói về nó :

Tôi đã được nhắc làm điều này sau khi thảo luận với một số nhà lưu trữ kỹ thuật số đã phàn nàn rằng, trước thời đại máy tính, các nhà văn đã tạo ra một loạt bản thảo hoàn chỉnh trên đường đến các ấn phẩm, hoàn thành với các bản xóa, chú thích, v.v. Đây là vàng lưu trữ, vì chúng chiếu sáng quá trình sáng tạo theo cách thường tiết lộ những câu chuyện ẩn giấu đằng sau những cuốn sách chúng ta quan tâm. Ngược lại, nhiều tác giả chỉ tạo ra một (hoặc một vài) tệp kỹ thuật số được sửa đổi theo thời gian xuất bản, không có bất kỳ hồ sơ hệ thống thực sự nào về các trạng thái tạm thời giữa bit đầu tiên của bản soạn thảo và bản nháp cuối cùng.

Nhập Flashbake. Cứ sau 15 phút, Flashbake xem xét bất kỳ tệp nào bạn yêu cầu kiểm tra (Tôi đã xem tất cả các tác phẩm giả tưởng, danh sách việc cần làm của tôi, tệp thông tin hữu ích của tôi và các phiên bản điện tử hoàn chỉnh của những cuốn sách gần đây của tôi ) và ghi lại mọi thay đổi được thực hiện kể từ lần kiểm tra cuối cùng, chú thích chúng với múi giờ hiện tại trên đồng hồ hệ thống, thời tiết trong múi giờ đó được lấy từ Google và ba tiêu đề cuối cùng với dòng của bạn trong RSS của bạn nguồn cấp dữ liệu (Tôi đã mô tả đặc điểm này là ở đâu Tôi đang ở đâu, nó như thế nào và tôi đang nghĩ gì về? Nó cũng ghi lại thời gian hoạt động của máy tính của bạn. Đối với phiên bản trong tương lai, tôi nghĩ sẽ rất vui khi có ba bài hát gần đây nhất được phát bởi trình phát nhạc của bạn.

Điều đó đã được nói, tôi chưa bao giờ có cơ hội để kiểm tra nó, vì cuối cùng tôi đã viết rất nhiều thứ ở chế độ org, và đã lập trình rất nhiều, và ... ờ ... tôi đã sử dụng tốt hơn magit, và cuối cùng, tôi chỉ là ... không cần sử dụng nó.

Trong mọi trường hợp, giải pháp này là nhằm vào các nhà văn làm việc trên các dự án phi kỹ thuật. Bạn có thể thấy rằng nó có thể phù hợp với yêu cầu của bạn.


1

Mặc dù nó hoàn toàn không liên quan đến emacs, bạn vẫn có thể lưu tệp văn bản của mình vào Dropbox và nếu bạn là người dùng chuyên nghiệp, bạn có thể sử dụng lịch sử phiên bản mở rộng . (Nếu bạn muốn mã hóa, bạn có thể muốn xem SparkleShare .)

Sau đó, có flashbake là một chút tự động ( đây là một hướng dẫn ).

Ngoài ra nó đã được hỏi ở những nơi khác quá , mà câu trả lời bạn có thể thấy hữu ích.


Flashbake trông rất hứa hẹn. Tôi chắc chắn sẽ thử.
Brian Z

-1

Bạn có thể sử dụng Dropbox. Nó làm cho phiên bản có thể xem lại của tệp của bạn mỗi khi bạn nhấn Cx Cs. Để mã hóa các tập tin văn bản của tôi, tôi sử dụng GNU Privacy Guard, nó được hỗ trợ bởi Emacs.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.