注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学习笔记

正确的方法如同学习书法,开始的时候要临摹,临摹好了然后创造自己的风格。

 
 
 

日志

 
 

[SCM笔记]Quilt Tutoria  

2011-09-16 14:33:34|  分类: SCM |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

quilt的使用

        可以从的网站下载源码安装:http://download.savannah.gnu.org/releases/quilt/

        0.46版的quilt有29个子命令。

        掌握quilt的关键是了解使用quilt的流程。使用quilt时,我们会在一个完整的源代码树里工作。只要我们在源代码树里使用了quilt命令,quilt就会在源代码树的根目录建立两个特殊目录:patches和.pc。quilt在patches目录保存它管理的所有补丁。quilt用.pc目录保存自己的内部工作状态,用户不需要了解这个目录。

        patches/series文件记录了quilt当前管理的补丁。补丁按照加入的顺序排列,早加入的补丁在前。quilt用堆栈的概念管理补丁的应用。

[SCM笔记]Quilt Tutoria - Fantity Wei - FootPrints

        

        我们在应用补丁A前,必须先应用所有早于补丁A的补丁。所以,patches/series中的补丁总是从上向下应用。例如:上图中,补丁1到补丁5是已经应用的补丁。我们可以将已应用的补丁想象成一个向下生长的堆栈,栈顶就是已应用的最新补丁。应用补丁就是将补丁入栈,撤销补丁就是将补丁出栈。

        我们在源代码树中作任何修改前,必须用"quilt add"命令将要修改的文件与一个补丁联系起来。在完成修改后,用"quilt refresh"命令将修改保存到已联系的补丁。

 

 

1. 准备工作

        新建一个目录和在这个目录里新建三个文件,用ls显示如下:

$ ls

char.c  float.c  int.c

        它们的内容如下:

$ cat -n int.c  <--------参数n表示在内容前带行号

     1 #include <stdio.h>

     2 int main(void)

     3 {

     4  int x;

     5  return 0;

     6 }

$ cat -n float.c

     1 #include <stdio.h>

     2 int main(void)

     3 {

     4  float f;

     5  return 0;

     6 }    

$ cat -n char.c

     1 #include <stdio.h>

     2 int main(void)

     3 {

     4  char ch;

     5  return 0;

     6 }

 

2. 相关命令

2.1 new

        新建一个补丁文件:

$ quilt new int-1.diff

Patch int-1.diff is now on top

        quilt会创建必要的文件夹:

$ ls -a

.  ..  char.c  float.c  int.c  patches  .pc

 

2.2 top

        使用命令“top”来显示堆栈的最顶层补丁:

$ quilt top

int-1.diff

 

2.3 series

        使用命令“series”来显示堆栈中可利用的补丁。补丁文件存在pathes目录:

$ quilt series

int-1.diff

 

2.4 add

        关联堆栈的最顶层补丁-int-1.diff到int.c中。

$ quilt add int.c

File int.c added to patch int-1.diff

 

2.5 edit

        命令“edit”用来在quilt中编辑文件:

$ quilt edit int.c

File int.c is already in patch int-1.diff

        (在语句"int x"后添加注释“/*integer*/”)

 

2.6 refresh

        命令“refresh”用来更新补丁:

$ quilt refresh

Refreshed patch int-1.diff

        现在补丁更新完了,你可以查看补丁:

$ cat patches/int-1.diff

Index: quilt/int.c

===================================================================

--- quilt.orig/int.c 2011-09-14 18:28:57.000000000 +0800

+++ quilt/int.c 2011-09-14 18:33:31.000000000 +0800

@@ -1,6 +1,6 @@

 #include <stdio.h>

 int main(void)

 {

- int x;

+ int x;   /*integer*/

  return 0;

 }

 

2.7 对float.c重复2.1-2.6的命令

        创建一个新补丁:

$ quilt new float-2.diff

Patch float-2.diff is now on top

        现在堆栈顶层的补丁是:

$ quilt top

float-2.diff

        堆栈现在包含的补丁是:(堆栈是向下生长的)

$ quilt series

int-1.diff

float-2.diff

        你可以简单的使用quilt编辑一个文件,它会自动地与最顶层的补丁进行关联。

$ quilt edit float.c

(Add "#include <math.h>" after "#include <stdio.h>")

File float.c added to patch float-2.diff

$ quilt refresh

Refreshed patch float-2.diff

        补丁float-2.diff现在已经更新了,你可以查看它:

$ cat patches/float-2.diff

Index: quilt/float.c

===================================================================

--- quilt.orig/float.c 2011-09-15 09:59:48.000000000 +0800

+++ quilt/float.c 2011-09-15 09:59:59.000000000 +0800

@@ -1,4 +1,5 @@

 #include <stdio.h>

+#include <math.h>

 int main(void)

 {

  float f;

  

2.8 对char.c重复2.1-2.6的命令

        创建一个新补丁:

$ quilt new char-3.diff

Patch char-3.diff is now on top

        现在堆栈顶层的补丁是:

$ quilt top

char-3.diff

        堆栈现在包含的补丁是:

$ quilt series

int-1.diff

float-2.diff

char-3.diff

        你可以简单的使用quilt编辑一个文件,它会自动地与最顶层的补丁进行关联。

$ quilt edit char.c

(Add "#include <string.h>" after "#include <stdio.h>", and add a comment "/*character*/" to the end of the line "char ch;")

File char.c added to patch char-3.diff

$ quilt refresh

Refreshed patch char-3.diff

补丁char-3.diff现在已经更新了,你可以查看它:

$ cat patches/char-3.diff

Index: quilt/char.c

===================================================================

--- quilt.orig/char.c 2011-09-15 10:08:45.000000000 +0800

+++ quilt/char.c 2011-09-15 10:10:56.000000000 +0800

@@ -1,6 +1,7 @@

 #include <stdio.h>

+#include <string.h>

 int main(void)

 {

- char ch;

+ char ch;/*character*/

  return 0;

 }

 

2.9 pop

        指令“pop”用来撤销所打的补丁,恢复到给定补丁名(但不包括)为止。

$ quilt pop float-2

Removing patch char-3.diff

Restoring char.c

 

Now at patch float-2.diff

        现在,char.c已经恢复:

$ cat char.c

#include <stdio.h>

int main(void)

{

 char ch;

 return 0;

}

        现在新的栈顶是:

$ quilt top

float-2.diff

        堆栈现在还包含的补丁是:

$ quilt series

int-1.diff

float-2.diff

char-3.diff

 

2.10 applied

        使用“applied”指令来查看已经应用的补丁列表:

$ quilt applied

int-1.diff

float-2.diff

 

2.11 unapplied

        使用“unapplied”指令来查看未应用的补丁列表:

$ quilt unapplied

char-3.diff

 

2.12 previous

        可以使用“previous”来显示一个补丁的上一个补丁:

$ quilt previous float-2.diff

int-1.diff

 

2.13 next

        可以使用“next”来显示一个补丁的下一个补丁:

$ quilt next

char-3.diff

 

2.14 files

        使用“files”不带参数来显示与栈顶补丁关联的文件列表,或带参数显示相应补丁的关联文件:

$ quilt file

float.c

$ quilt files int-1.diff

int.c

       

2.15 pathches

        使用“pathches”来显示与给定文件关联关联的补丁列表:

$ quilt patches int.c

int-1.diff

 

2.16 push

        使用“push”来应用直到且包含给定补丁所有补丁:      

$ quilt push char-3.diff

Applying patch char-3.diff

patching file char.c

 

Now at patch char-3.diff

$ quilt refresh

Refreshed patch char-3.diff

 

$ quilt top

char-3.diff

 

        更新的文件为:

$ cat char.c

#include <stdio.h>

#include <string.h>

int main(void)

{

 char ch;/*character*/

 return 0;

}

 

2.17 grep

        命令“grep”用来在指定的源文件中查找字符串(跳过补丁文件,quilt的meta-info):

$ quilt grep int

char.c:int main(void)

int.c:int main(void)

int.c: int x;   /*integer*/

float.c:int main(void)

 

2.18 delete

        我们将要“delete”补丁char-3.diff

$ quilt pop float-2.diff

Removing patch char-3.diff

Restoring char.c

 

Now at patch float-2.diff

$ cat char.c

#include <stdio.h>

int main(void)

{

 char ch;

 return 0;

}

$ quilt top

float-2.diff

$ quilt series

int-1.diff

float-2.diff

char-3.diff

$ quilt delete char-3

Removed patch char-3.diff

$ cat char.c

#include <stdio.h>

int main(void)

{

 char ch;

 return 0;

}

$ quilt top

float-2.diff

$ quilt series

int-1.diff

float-2.diff

        但补丁文件仍然存在在patches目录中:

$ ls patches/

char-3.diff  float-2.diff  int-1.diff  series

 

2.19 fork

        命令“fork”用来复制顶层补丁,以便它能用于分支项:

$ quilt fork

Fork of patch float-2.diff created as float-3.diff

        旧的和新复制的补丁都存在pathes目录下:

$ ls patches/

char-3.diff  float-2.diff  float-3.diff  int-1.diff  series

$ quilt top

float-3.diff

$ quilt series

int-1.diff

float-3.diff

$ quilt edit float.c

(Add a comment "/*floating*/" to the line "float f;")

File float.c is already in patch float-3.diff

$ quilt refresh

Refreshed patch float-3.diff

$ cat patches/float-3.diff

Index: quilt/float.c

===================================================================

--- quilt.orig/float.c 2011-09-15 09:59:48.000000000 +0800

+++ quilt/float.c 2011-09-16 12:24:01.000000000 +0800

@@ -1,6 +1,7 @@

 #include <stdio.h>

+#include <math.h>

 int main(void)

 {

- float f;

+ float f;/*floating*/

  return 0;

 }

 

2.20 remove

        命令“remove”用来移除文件的关联补丁:

$ quilt remove -P float-3.diff float.c

File float.c removed from patch float-3.diff

$ quilt refresh

Nothing in patch float-3.diff

$ cat float.c

#include <stdio.h>

int main(void)

{

 float f;

 return 0;

}

 

2.21 清理

        清理:

$ quilt pop int-1.diff -f

Removing patch float-3.diff

Now at patch int-1.diff

$ cat float.c

#include <stdio.h>

int main(void)

{

 float f;

 return 0;

}

$ quilt top

int-1.diff

$ quilt series

int-1.diff

float-3.diff

$ quilt delete float-3

Removed patch float-3.diff

$ quilt series

int-1.diff

$ quilt remove int.c

File int.c removed from patch int-1.diff

$ cat int.c

#include <stdio.h>

int main(void)

{

 int x;

 return 0;

}

$ quilt refresh

Nothing in patch int-1.diff

$ quilt pop -f

Patch int-1.diff appears to be empty, removing

 

No patches applied

$ quilt delete int-1

Removed patch int-1.diff

 

References

1. www.shakthimaan.com/downloads/glv/quilt-tutorial/quilt-doc.pdf

2. http://blog.csdn.net/fmddlmyy/article/details/2140097

  评论这张
 
阅读(2286)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017