转载

SVN分支

 上一篇

分支操作创建另一条线路开发。它是有用的,当有人想开发过程叉成两个不同的方向。让我们假设发布的产品版本1.0中,可能要创建新的分支,所以可以保持独立,发展2.01.0 bug修复。

在本节中,我们将看到如何创建,遍历和合并分支。Jerry 已经沮丧,因为冲突,所以他决定创建新的私有分支。

 [jerry@CentOS project_repo]$ ls branches  tags  trunk  [jerry@CentOS project_repo]$ svn copy trunk branches/jerry_branch A         branches/jerry_branch  [jerry@CentOS project_repo]$ svn status A  +    branches/jerry_branch  [jerry@CentOS project_repo]$ svn commit -m "Jerry's private branch" Adding         branches/jerry_branch Adding         branches/jerry_branch/README  Committed revision 9. [jerry@CentOS project_repo]$  

Jerry 是在他的私人分支工作。他补充说数组的排序操作。Jerry 修改后的代码看起来是这样的。

 [jerry@CentOS project_repo]$ cd branches/jerry_branch/  [jerry@CentOS jerry_branch]$ cat array.c  

上面的命令将产生以下结果

 #include <stdio.h>  #define MAX 16  void bubble_sort(int *arr, int n) {     int i, j, temp, flag = 1;     for (i = 1; i < n && flag == 1; ++i) {       flag = 0;       for (j = 0; j < n - i; ++j) {          if (arr[j] > arr[j + 1]) {             flag       = 1;             temp       = arr[j];             arr[j]      = arr[j + 1];             arr[j + 1] = temp;          }       }    } }  void accept_input(int *arr, int n) {    int i;     for (i = 0; i < n; ++i)       scanf("%d", &arr[i]); }  void display(int *arr, int n) {    int i;     for (i = 0; i < n; ++i)       printf("|%d| ", arr[i]);     printf("/n"); }  int main(void) {    int i, n, key, ret, arr[MAX];     printf("Enter the total number of elements: ");    scanf("%d", &n);     /* Error handling for array overflow */    if (n >MAX) {       fprintf(stderr, "Number of elements must be less than %d/n", MAX);       return 1;    }     printf("Enter the elements/n");    accept_input(arr, n);     printf("Array has following elements/n");    display(arr, n);     printf("Sorted data is/n");    bubble_sort(arr, n);    display(arr, n);     return 0; }

Jerry 编译并测试自己的代码和准备提交他修改的变化。

 [jerry@CentOS jerry_branch]$ make array cc     array.c   -o array  [jerry@CentOS jerry_branch]$ ./array  

上面的命令将产生以下结果

 Enter the total number of elements: 5 Enter the elements 10 -4 2 7  9 Array has following elements |10| |-4| |2| |7| |9|  Sorted data is |-4| |2| |7| |9| |10|   [jerry@CentOS jerry_branch]$ svn status ?       array M       array.c  [jerry@CentOS jerry_branch]$ svn commit -m "Added sort operation" Sending        jerry_branch/array.c Transmitting file data . Committed revision 10. 

同时通过躯干,Tom决定执行搜索操作。Tom搜索操作添加代码,他的代码看起来像这样。

 [tom@CentOS trunk]$ svn diff

上面的命令将产生以下结果

 Index: array.c =================================================================== --- array.c   (revision 10) +++ array.c   (working copy) @@ -2,6 +2,27 @@    #define MAX 16   +int bin_search(int *arr, int n, int key) +{ +   int low, high, mid; + +   low   = 0; +   high   = n - 1; +   mid   = low + (high - low) / 2; + +   while (low <= high) { +      if (arr[mid] == key) +         return mid; +      if (arr[mid] > key) +         high = mid - 1; +      else +         low = mid + 1; +      mid = low + (high - low) / 2; +   } + +   return -1; +} +  void accept_input(int *arr, int n)  {     int i; @@ -22,7 +43,7 @@    int main(void)  { -   int i, n, arr[MAX]; +   int i, n, ret, key, arr[MAX];       printf("Enter the total number of elements: ");     scanf("%d", &n); @@ -39,5 +60,16 @@     printf("Array has following elements/n");     display(arr, n);   +   printf("Enter the element to be searched: "); +   scanf("%d", &key); + +   ret = bin_search(arr, n, key); +   if (ret < 0) { +      fprintf(stderr, "%d element not present in array/n", key); +      return 1; +   } + +   printf("%d element found at location %d/n", key, ret + 1); +     return 0;  } 

审查后,他提交了他修改的变化。

 [tom@CentOS trunk]$ svn status ?       array M       array.c  [tom@CentOS trunk]$ svn commit -m "Added search operation" Sending        trunk/array.c Transmitting file data . Committed revision 11. 

但Tom 好奇为什么 Jerry 一直在做他的私人分支。

 [tom@CentOS trunk]$ cd ../branches/ [tom@CentOS branches]$ svn up A    jerry_branch A    jerry_branch/array.c A    jerry_branch/README  [tom@CentOS branches]$ svn log ------------------------------------------------------------------------ r9 | jerry | 2013-08-27 21:56:51 +0530 (Tue, 27 Aug 2013) | 1 line  Added sort operation ------------------------------------------------------------------------ 

查看Subversion的日志消息,Tom发现,Jerry实现的排序操作。Tom执行搜索操作使用二进制搜索算法,它总是希望数据的排序顺序。但是,如果用户提供的数据,未排序的顺序呢?在这种情况下的二进制搜索操作将失败。于是,他决定采用Jerry 的代码,搜索操作前对数据进行排序。于是,他会要求Subversion的从Jerry的分支到主干合并代码。

 [tom@CentOS trunk]$ pwd /home/tom/project_repo/trunk  [tom@CentOS trunk]$ svn merge ../branches/jerry_branch/ --- Merging r9 through r11 into '.': U    array.c 

合并后array.c的这个样子。

 [tom@CentOS trunk]$ cat array.c 

上面的命令将产生以下结果

 #include <stdio.h>  #define MAX 16  void bubble_sort(int *arr, int n) {    int i, j, temp, flag = 1;     for (i = 1; i < n && flag == 1; ++i) {       flag = 0;       for (j = 0; j < n - i; ++j) {          if (arr[j] > arr[j + 1]) {             flag       = 1;             temp       = arr[j];             arr[j]      = arr[j + 1];             arr[j + 1] = temp;          }       }    } }  int bin_search(int *arr, int n, int key) {    int low, high, mid;     low   = 0;    high   = n - 1;    mid   = low + (high - low) / 2;     while (low <= high) {       if (arr[mid] == key)          return mid;       if (arr[mid] > key)          high = mid - 1;       else          low = mid + 1;       mid = low + (high - low) / 2;    }     return -1; }  void accept_input(int *arr, int n) {    int i;     for (i = 0; i < n; ++i)       scanf("%d", &arr[i]); }  void display(int *arr, int n) {    int i;     for (i = 0; i < n; ++i)       printf("|%d| ", arr[i]);        printf("/n"); }  int main(void) {    int i, n, ret, key, arr[MAX];     printf("Enter the total number of elements: ");    scanf("%d", &n);     /* Error handling for array overflow */    if (n > MAX) {       fprintf(stderr, "Number of elements must be less than %d/n", MAX);       return 1;    }     printf("Enter the elements/n");    accept_input(arr, n);     printf("Array has following elements/n");    display(arr, n);     printf("Sorted data is/n");    bubble_sort(arr, n);    display(arr, n);     printf("Enter the element to be searched: ");    scanf("%d", &key);     ret = bin_search(arr, n, key);    if (ret < 0) {       fprintf(stderr, "%d element not present in array/n", key);       return 1;    }     printf("%d element found at location %d/n", key, ret + 1);     return 0; }

Tom 测试完成后,提交他的修改到版本库。

 [tom@CentOS trunk]$ make array cc     array.c   -o array  [tom@CentOS trunk]$ ./array  Enter the total number of elements: 5 Enter the elements 10 -2 8 15 3 Array has following elements |10| |-2| |8| |15| |3|  Sorted data is |-2| |3| |8| |10| |15|  Enter the element to be searched: -2 -2 element found at location 1  [tom@CentOS trunk]$ svn commit -m "Merge changes from Jerry's code" Sending        trunk Sending        trunk/array.c Transmitting file data . Committed revision 12.  [tom@CentOS trunk]$ 
 上一篇
正文到此结束
Loading...