If you mark several files in this Dired buffer (with the ordinary Dired mark command described in Chapter 5 Chapter 5. Emacs as a Work Environment Many of the everyday things you do from a command prompt can be done from within Emacs. You can execute commands, work with directories, and print files—all without leaving Emacs. Changing tasks is as simple as jumping between buffers. What's important about this? Of course, it's nice to be able to move between tasks easily. What's even more important is that you have the same editing environment no matter what you're doing: you can use all of the Emacs editing commands to work on a file, give shell commands, then start up Dired, the directory editor, to do some file maintenance. It is simple to move text from one window to another. You can execute a command and then use Emacs commands to cut and paste the results into a file. If you're trying to compile a program and keep getting error messages, you can save the interactive session as a file and confer with someone about the problem. Despite the many advantages of modern window systems, Emacs often provides the best way to integrate the many kinds of work you do daily. Much of the information in this chapter involves integration between Emacs and the operating system. Emacs is most commonly a Unix editor, so forgive us for a bias in that direction. But we are happy to report that for users of GNU Emacs on other platforms, integration with the operating system is still available; you can use shell mode to run commands and can edit directories with Dired. There's no reason to leave Emacs no matter what your platform is.
) and then perform either a vc-next-actionor vc-revert-buffer, VC performs that operation on all the marked files. The most common case in which you'll perform this procedure is when you want to check in changes to several files simultaneously. VC helps you out: it pops up a buffer for only one change comment, which it then applies to every revision the check-in creates.
The vc-revert-bufferdesign is a bit more conservative; normally, it prompts you once for each file to make sure you really want to discard its changes.
Some Dired commands are rebound in VC Dired to run version-control commands. The =keystroke, for example, runs vc-diffon the current file rather than a Dired diff. And grefreshes all the VC status fields in the directory.
12.8.2 Difference Reports
Earlier, we mentioned that version control systems help you generate difference reports between versions. VC's command for this is C-x v =(for vc-diff). This command normally shows you the difference between your work file and the last revision you checked in so that you can see exactly what changes you'll be committing if you check in again.
If you give this command a prefix argument, C-u C-x v =, it prompts you for a file name and two revision numbers and reports the difference between those revisions of the file. If the older revision number is empty (that is, you simply press Enterat that prompt), it defaults to the last checked-in revision. If the newer revision is empty, it defaults to the work file. So pressing Entertwice compares the work file with what was last checked in to the repository, a very common task.
It's also possible to get a difference report for a whole tree of project files. If the filename you give C-u C-x v =is actually a directory, you'll see the differences between your specified versions for every registered file underneath that directory.
By design, such a difference report can be shipped and mechanically applied as a patch using Larry Wall's patchutility (available on all modern Unixes). This is a tremendous help when you're cooperating on a software project by email; you can download sources, register them, make modifications—and then, with one command, generate a complete patch set of your changes to mail to your collaborators.
The exact format of these reports varies somewhat between version control systems because VC uses each system's native difference reporter. [87]Generally, the output resembles that of the Unix diffcommand. We'll see how to customize the report later in this chapter. Finally, the last section of the chapter introduces Ediff, an alternate and powerful way to compare and resolve differences between multiple files or versions.
12.8.3 Retrieving Old Revisions
You can use the command C-x v ~(for vc-version-other-window) to retrieve any saved revision of a file. The revision is retrieved into a work file with the same name as your file, except for a suffix that identifies its revision number (the suffix is actually a dot, followed by a tilde, followed by the revision number, followed by another tilde). So you can retrieve several revisions, and they won't step on each other. This command is useful when you want to eyeball the entire old version of a file, as opposed to just its changes from previous versions or its differences from later ones.
The version suffix format is very close to what Emacs generates for saved versions if you set the global Emacs Lisp variable version-control(which VC has made pretty much obsolete). For example, if you're visiting a file named foo.html
and you retrieve version 1.3 by typing C-x v ~ 1 . 3 Enter, you will now be visiting a file named foo.html.~1.3~
(and because it ends with a tilde, Dired's command to flag backup files will mark it, as discussed in Chapter 5 Chapter 5. Emacs as a Work Environment Many of the everyday things you do from a command prompt can be done from within Emacs. You can execute commands, work with directories, and print files—all without leaving Emacs. Changing tasks is as simple as jumping between buffers. What's important about this? Of course, it's nice to be able to move between tasks easily. What's even more important is that you have the same editing environment no matter what you're doing: you can use all of the Emacs editing commands to work on a file, give shell commands, then start up Dired, the directory editor, to do some file maintenance. It is simple to move text from one window to another. You can execute a command and then use Emacs commands to cut and paste the results into a file. If you're trying to compile a program and keep getting error messages, you can save the interactive session as a file and confer with someone about the problem. Despite the many advantages of modern window systems, Emacs often provides the best way to integrate the many kinds of work you do daily. Much of the information in this chapter involves integration between Emacs and the operating system. Emacs is most commonly a Unix editor, so forgive us for a bias in that direction. But we are happy to report that for users of GNU Emacs on other platforms, integration with the operating system is still available; you can use shell mode to run commands and can edit directories with Dired. There's no reason to leave Emacs no matter what your platform is.
).
12.8.4 Viewing Change Histories
If you use C-x v l(for vc-print-log) on a registered file, VC pops up a buffer containing that file's change history. This command is most useful for viewing the change comments associated with each revision.
12.8.5 Registering a File
Normally, registering a file for version control with C-x v v(for vc-next-action) with a nonconcurrent version control system also checks out an editable copy. Occasionally it's useful to be able to just register a file without checking it out. The command C-x v i(for vc-register) does this. With modern concurrent version control systems, this distinction is fading away.
Читать дальше