StGit教程_CN
- 格式:pdf
- 大小:250.68 KB
- 文档页数:12
原文:StGit tutorial
翻译:tekkamanninja@
翻译完成时间:2011年12月25日星期日
V1.0
目录
获取帮助 (3)
开始使用 (3)
创建一个补丁 (3)
创建另一个补丁 (4)
更新提交信息 (5)
冲突 (5)
工作流程:开发分支 (7)
工作流程:跟踪分支 (8)
向上游提交补丁 (8)
衍合补丁序列 (9)
当你的补丁被采纳 (9)
导入补丁 (10)
导入一个纯补丁 (10)
一次导入多个补丁 (10)
从一封电子邮件中导入补丁 (10)
导入满载补丁的mailbox文件 (10)
其他需要提及的事项 (11)
撤销操作 (11)
同Git交互 (11)
补丁相关 (11)
模板 (12)
StGit是一个命令行应用程序,提供类似Quilt的功能(比如从一个补丁栈中入栈/出栈补丁),但使用Git代替diff和patch 工具。StGit将他的补丁作为普通的Git提交保存在Git仓库中,并提供一系列命令以各种方式操纵他们。
这个教程假设你已经熟悉Git的基本知识(如分支、提交和冲突)。关于Git的详细信息,请参考git(1)或the Git home page。
获取帮助
获取完整的StGit命令列表:
$ stg help
获取单个StGit子命令的快速帮助:
$ stg help
获取一个StGit子命令的详细帮助:
$ man stg-
(详细文档也可通过HTML 格式获得)
开始使用
StGit不是一个可单独使用的程序——他操作一个已用git init 或git clone创建好的Git仓库。所以请先获取一个这样的仓库;如果你手头没有,试试下面的范例:
$ git clone git://repo.or.cz/stgit.git
$ cd stgit
在创建StGit补丁前,你必须先运行stg init:
$ stg init
这个命令针对当前分支初始化StGit的元数据。(如果还想获得另一分支的StGit补丁,你必须到另一个分支中再次运行stg init。)
注作为快捷指令,stg clone将会在执行git clone后运行stg init。
创建一个补丁
现在准备创建我们的第一个补丁:
$ stg new my-first-patch
这将会创建一个名为my-first-patch的补丁,并且打开一个编辑器让你编辑补丁的提交信息。(如果你没有在命令行中给出补丁名,StGit 将会自动通过提交信息的第一行生成补丁名。)这个补丁是空的,可以通过运行stg show命令看出。
$ stg show
但这不会保持太久!用你中意的文本编辑器打开一个文件(译者注:已被跟踪的文件),做些修改并保存。此时,你的代码树中就有了本地的变更:
$ stg status
M stgit/main.py
然后refresh(刷新)补丁:
$ stg refresh
瞧 - 这个补丁不再是空的:
$ stg show
commit 3de32068c600d40d8af2a9cf1f1c762570ae9610
Author: Audrey U. Thor
Date: Sat Oct 4 16:10:54 2008 +0200
Tell the world that I've made a patch
diff --git a/stgit/main.py b/stgit/main.py
index e324179..6398958 100644
--- a/stgit/main.py
+++ b/stgit/main.py
@@ -171,6 +171,7 @@ def _main():
sys.exit(ret or utils.STGIT_SUCCESS)
def main():
+ print 'My first patch!'
try:
_main()
finally:
(此处假设你已经对类似上面从Git中导出的unified diff(统一diff格式)补丁很熟悉了,但他确实已经很简单了;在这个例子中,我在文件stgit/main.py的171行附近添加了一行print 'My first patch!'代码)
因为这个补丁也是一个常规的Git提交,你也可以通过常规的Git工具,例如gitk,来查看他。
创建另一个补丁
我们想要做另一个改进,所有让我们为此再创建一个新补丁:
$ echo 'Audrey U. Thor' > AUTHORS
$ stg new credit --message 'Give me some credit'
$ stg refresh
注意,我们可以在命令行中提供提交信息,且在运行stg new前后编辑文件都可以。
这么一来,我们就有了两个补丁:
$ stg series –description
+ my-first-patch # This is my first patch
> credit # Give me some credit
stg series从栈底到栈顶列出所有的补丁;+意味着这个补丁已被应用,而> 表示当前(或栈顶)补丁。
如果要在栈顶补丁上做更多修改,我们只需编辑文件并运行stg refresh。但是如果我们想要修改my-first-patch呢?最简单的方法就是pop(出栈)相应的补丁,让my-first-patch变成栈顶补丁:
$ stg pop credit
Checking for changes in the working directory ... done
Popping patch "credit" ... done
Now at patch "my-first-patch"
$ stg series --description
> my-first-patch # This is my first patch
- credit # Give me some credit
stg series表明现在my-first-patch是栈顶补丁,这也意味着如果我们做了修改,stg refresh将会更新这个补丁。
这里的减号表明,补丁没有被应用—这意味着这个补丁被暂时搁置。如果看下AUTHORS文件,你会发现我们原先的修改不见了;且Git工具(例如gitk)也不会显示这个修改,因为他已经被清出了Git历史。但是只需一个简单的stg push命令就可以重载他。
$ stg push credit
Checking for changes in the working directory ... done
Fast-forwarded patch "credit"
Now at patch "credit"
注在使用stg push和stg pop时,你可以忽略补丁名参数。如果你这样做了,你将会分别push(入栈,即应用)下一个未应用的补丁,pop(出栈,即撤销)栈顶补丁。
注最少还有两种方法更新非栈顶补丁。一个是使用stg refresh时带上--patch参数;另一个是创建新补丁,然后用stg squash合并到其他补丁中。