- SVN 教程
- SVN - 首页
- SVN - 基本概念
- SVN - 环境设置
- SVN - 生命周期
- SVN - 检出过程
- SVN - 执行更改
- SVN - 检阅更改
- SVN - 更新过程
- SVN - 修复错误
- SVN - 解决冲突
- SVN - 标签
- SVN - 分支
- SVN 实用资源
- SVN - 快速指南
- SVN - 实用资源
- SVN - 讨论
SVN - 分支
分支操作创建另一个开发版本。当有人希望将开发过程一分为二时,此功能很有用。假设你已经发布了 1.0 版本的产品,你可能希望创建一个新分支,以便 2.0 的开发可以与 1.0 的错误修复分开。
在本节中,我们将了解如何创建、遍历和合并分支。杰瑞对冲突感到不高兴,所以他决定创建一个新私有分支。
[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@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@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@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@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 的日志消息,汤姆发现杰瑞实现了“排序”操作。汤姆使用二分查找算法实现了搜索操作,它总是希望数据按排序顺序。但是,如果用户提供的的是未排序顺序的数据呢?在这种情况下,二分查找操作将失败。因此,他决定使用杰瑞的代码在执行搜索操作之前对数据进行排序。所以他要求 Subversion 将杰瑞分支中的代码合并到主干中。
[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@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]$
广告