SVN - Ramificazione
L'operazione di filiale crea un'altra linea di sviluppo. È utile quando qualcuno vuole che il processo di sviluppo si sposti in due direzioni diverse. Supponiamo che tu abbia rilasciato un prodotto della versione 1.0, potresti voler creare un nuovo ramo in modo che lo sviluppo della 2.0 possa essere tenuto separato dalle correzioni dei bug 1.0.
In questa sezione vedremo come creare, attraversare e unire i rami. Jerry non è felice a causa del conflitto, quindi decide di creare un nuovo ramo privato.
[[email protected] project_repo]$ ls
branches tags trunk
[[email protected] project_repo]$ svn copy trunk branches/jerry_branch
A branches/jerry_branch
[[email protected] project_repo]$ svn status
A + branches/jerry_branch
[[email protected] project_repo]$ svn commit -m "Jerry's private branch"
Adding branches/jerry_branch
Adding branches/jerry_branch/README
Committed revision 9.
[[email protected] project_repo]$
Ora Jerry sta lavorando nella sua filiale privata. Aggiunge l'operazione di ordinamento per l'array. Il codice modificato di Jerry ha questo aspetto.
[[email protected] project_repo]$ cd branches/jerry_branch/
[[email protected] jerry_branch]$ cat array.c
Il comando precedente produrrà il seguente risultato.
#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 compila e testa il suo codice ed è pronto a eseguire il commit delle modifiche.
[[email protected] jerry_branch]$ make array
cc array.c -o array
[[email protected] jerry_branch]$ ./array
Il comando precedente produrrà il seguente risultato.
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|
[[email protected] jerry_branch]$ svn status
? array
M array.c
[[email protected] jerry_branch]$ svn commit -m "Added sort operation"
Sending jerry_branch/array.c
Transmitting file data .
Committed revision 10.
Nel frattempo, nel bagagliaio, Tom decide di implementare l'operazione di ricerca. Tom aggiunge il codice per l'operazione di ricerca e il suo codice ha questo aspetto.
[[email protected] trunk]$ svn diff
Il comando precedente produrrà il seguente risultato.
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;
}
Dopo la revisione, conferma le modifiche.
[[email protected] trunk]$ svn status
? array
M array.c
[[email protected] trunk]$ svn commit -m "Added search operation"
Sending trunk/array.c
Transmitting file data .
Committed revision 11.
Ma Tom è curioso di sapere cosa ha fatto Jerry nel suo ramo privato.
[[email protected] trunk]$ cd ../branches/
[[email protected] branches]$ svn up
A jerry_branch
A jerry_branch/array.c
A jerry_branch/README
[[email protected] branches]$ svn log
------------------------------------------------------------------------
r9 | jerry | 2013-08-27 21:56:51 +0530 (Tue, 27 Aug 2013) | 1 line
Added sort operation
------------------------------------------------------------------------
Visualizzando il messaggio di registro di Subversion, Tom ha scoperto che Jerry ha implementato l'operazione di "ordinamento". Tom ha implementato l'operazione di ricerca utilizzando l'algoritmo di ricerca binario, si aspetta sempre i dati in ordine ordinato. Ma cosa succede se l'utente fornisce i dati in un ordine non ordinato? In quella situazione, l'operazione di ricerca binaria fallirà. Quindi decide di prendere il codice di Jerry per ordinare i dati prima dell'operazione di ricerca. Quindi chiede a Subversion di unire il codice dal ramo di Jerry in trunk.
[[email protected] trunk]$ pwd
/home/tom/project_repo/trunk
[[email protected] trunk]$ svn merge ../branches/jerry_branch/
--- Merging r9 through r11 into '.':
U array.c
Dopo l'unione, array.c avrà questo aspetto.
[[email protected] trunk]$ cat array.c
Il comando precedente produrrà il seguente risultato.
#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;
}
Dopo la compilazione e il test, Tom salva le modifiche nel repository.
[[email protected] trunk]$ make array
cc array.c -o array
[[email protected] 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
[[email protected] trunk]$ svn commit -m "Merge changes from Jerry's code"
Sending trunk
Sending trunk/array.c
Transmitting file data .
Committed revision 12.
[[email protected] trunk]$