StGit教程_CN

  • 格式:pdf
  • 大小:250.68 KB
  • 文档页数:12

下载文档原格式

  / 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

原文: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合并到其他补丁中。

相关主题