2008年8月9日星期六

在emacs中使用git(翻译)

 原文地址:http://xtalk.msk.su/~ott/en/writings/emacs-vcs/EmacsGit.html


最近git越来越流行了, 这里就转一篇介绍使用git的文章吧。git在dict.cn的解释是

n. 饭桶,无用的人, a foolish or worthless person


 这样的解释有很强的黑色幽默气质。 呵呵。 它是非常优秀的版本控制软件, 一开始是为linux kernel开发的,后来渐渐被很多项目所使用, 它特别适合分布式开发中的软件版本管理。




我们可以用Emacs中的版本控制包-VC或者DVC来使用git,或者是使用git.el和emacs-git. 前者使用VC和DVC的标准接口,后者实现了一些供开发者完全使用git功能的接口。



git.el 包


安装git.el包




安装git.el非常的简单, 它放在git源文件的contrib/emacs子目录下。 主要进入这个目录运行make命令就可以编译它。 同样你也可以运行make install 来安装它,它默认安装在$HOME/share/emacs/site-lisp下, 当然你也可以通过传参数emacslispdir给make来改变目录, 或者把全部文件copy到emacs目录下。




可以通过在.emacs文件中加入来默认启动它。
(require 'git)

Work with git.el    用git.el来工作


在emacs中首先都是通过执行 git-status 命令, 它会询问用户Git仓库(repository)的目录名,并且分析仓库的状态。 分析状态后, 它会创建一个 *git-status*的buffer, 这个buffer用来在文件上执行git命令。 下面的图片是这个buffer的一个示例(图片的底部是diff命令的输出)。 这个buffer内使用的是git-status-mode, 这个mode里定义了许多命令和对应的快捷键(他们有很多快捷键和PCL-CVS包的快捷键相同)。所有的命令只是在这个mode里面有效。







用户可以在这个buffer内容过方向键来查看文件, 或者用命令 git-next-file(n或者SPC)和 git-prev-file(p键)来查看前一个文件或者后一个。 就像emacs的很多命令一样, 用户可以为他们定义数字前缀来改变命令的行为。


默认的, 所有的命令都在光标所在的文件上执行。 当然, 用户也可以通过选择多个文件来让命令执行在多个文件上。 选择主要通过下面的命令和快捷键来执行:m键(git-mark-file)标 记当前文件并且把光标下移一行;M键(git-mark-all)来标记buffer中的所有文件。取消标记用键u(git-unmark-file)或 者DEL键(git-unmark-file-up),两个键的区别是, 第一个键在取消标记光标所在的文件之后往下移动一样, 而后一个命令则往上移动一行。 取消当前buffer中所有的选择标记通过命令git-unmark-all(M-DEL快捷键)来实现。 你还可以通过git-toggle-all-marks(T键)来反选你现在的选择情况。






就像在PCL-CVS中, 用户可以通过命令git-find-file(回车键或者f)来打开当前光标所在的文件。 用过v键(git-view-file)来查看文件。 如果你遇到冲突以后, 可以通过 git-resolve-file(R键)来解决冲突。




你可以通过 git-add-file 命令(a键),或者 git-remove-file (r键)来像代码库里面添加或者删除一个文件。 如果有的文件你已经不需要了,却不想这个删除命令影响到代码库, 你可以把它们放在忽略文件列表中, 通过 git-ingore-file(i键)来执行。 提交代码通过 c键(git-commit-file), 回滚(reverting)改变通过U键(git-revert-file)。 你可以通过l键(git-log-file)来查看修改日志。




d键是和改变(diff)有关的所有命令的前缀。 他们中最重要的要数 git-diff-file 命令了, 你可以功过=或者 d = 键来调用它。 命令 git-diff-file-base(键 d b)可以用列出当前文件和仓库中的文件的不同的地方。 命令 git-diff-file-idiff (键 d e)可以用emacs中的 idiff 来互动的查看改变。 而命令git-find-file-imerge (键 d E) 允许用户以互动的方式来合并代码。


其他的命令有查看那这个分支(branch)和主分支(main branch)差别 — git-diff-file-merge-head 命令(d h), 在文件合并之间的相关的版本 — git-diff-file-mine 命令 (d m), 刷新git状态buffer的命令 git-refresh-status命令(g键),退出git状态buffer命令 git-status-quit (q),从列表中删除处理过的文件 git-remove-handled 命令 (x), 详细的命令请查看这个mode的帮助(C-h m)。



没有评论: