SVN 分支

  • 分支

    分支创造了另一条发展线。当有人希望开发过程分叉到两个不同的方向时,这很有用。让我们假设您已经发布了版本1.0的产品,您可能想要创建新的分支,以便可以将2.0的开发与1.0的错误修复分开。在本节中,我们将看到如何创建,遍历和合并分支。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@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很好奇Jreey在他的他的分支所做的事情。
    
    [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实现了“sort”操作。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]$