Svn-fix-mistakes

提供:Dev Guides
移動先:案内検索

SVN-間違いを修正

_Jerry_が誤って_array.c_ファイルを変更し、コンパイルエラーが発生しているとします。 今、彼は変更を破棄したいと考えています。 この状況では、「元に戻す」操作が役立ちます。 元に戻す操作は、ファイルまたはディレクトリへのローカル変更を取り消し、競合状態を解決します。

[jerry@CentOS trunk]$ svn status

上記のコマンドは次の結果を生成します。

M       array.c

次のように配列を作成してみましょう。

[jerry@CentOS trunk]$ make array

上記のコマンドは次の結果を生成します。

cc     array.c   -o array
array.c: In function ‘main’:
array.c:26: error: ‘n’ undeclared (first use in this function)
array.c:26: error: (Each undeclared identifier is reported only once
array.c:26: error: for each function it appears in.)
array.c:34: error: ‘arr’ undeclared (first use in this function)
make: ** *[array] Error 1

_Jerry_は、_array.c_ファイルで「元に戻す」操作を実行します。

[jerry@CentOS trunk]$ svn revert array.c
Reverted 'array.c'

[jerry@CentOS trunk]$ svn status
[jerry@CentOS trunk]$

次に、コードをコンパイルします。

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

復帰操作の後、彼の作業コピーは元の状態に戻ります。 元に戻す操作では、1つのファイルとディレクトリ全体を元に戻すことができます。 ディレクトリを元に戻すには、以下に示すように-Rオプションを使用します。

[jerry@CentOS project_repo]$ pwd
/home/jerry/project_repo

[jerry@CentOS project_repo]$ svn revert -R trunk

これまで、作業コピーに加えられた変更を元に戻す方法を見てきました。 しかし、コミットされたリビジョンを元に戻したい場合はどうでしょう! バージョン管理システムツールでは、リポジトリから履歴を削除できません。 履歴のみを追加できます。 リポジトリからファイルを削除しても発生します。 古いリビジョンを元に戻すには、古いリビジョンで行われた変更をすべて元に戻し、新しいリビジョンをコミットする必要があります。 これは逆マージと呼ばれます。

Jerryが線形検索操作のコードを追加すると仮定します。 確認後、彼は変更をコミットします。

[jerry@CentOS trunk]$ svn diff
Index: array.c
===================================================================
--- array.c   (revision 21)
+++ array.c   (working copy)
@@ -2,6 +2,16 @@

 #define MAX 16

+int linear_search(int* arr, int n, int key)
+{
+   int i;

+   for (i = 0; i < n; ++i)
+      if (arr[i] == key)
+         return i;
+   return -1;
+}

 void bubble_sort(int *arr, int n)
 {
    int i, j, temp, flag = 1;

[jerry@CentOS trunk]$ svn status
?       array
M       array.c

[jerry@CentOS trunk]$ svn commit -m "Added code for linear search"
Sending        trunk/array.c
Transmitting file data .
Committed revision 22.

ジェリーはトムが何をしているのか興味があります。 そこで、彼はSubversionログメッセージをチェックします。

[jerry@CentOS trunk]$ svn log

上記のコマンドは、次の結果を生成します。

------------------------------------------------------------------------
r5 | tom   | 2013-08-24 17:15:28 +0530 (Sat, 24 Aug 2013) | 1 line

Add binary search operation
------------------------------------------------------------------------
r4 | jerry | 2013-08-18 20:43:25 +0530 (Sun, 18 Aug 2013) | 1 line

Add function to accept input and to display array contents

ログメッセージを表示した後、ジェリーは自分が重大な間違いをしたことに気付きます。 トムはすでにバイナリ検索操作を実装しているため、線形検索よりも優れています。彼のコードは冗長であり、ジェリーは変更を前のリビジョンに戻す必要があります。 そのため、まずリポジトリの現在のリビジョンを見つけます。 現在、リポジトリはリビジョン22にあり、以前のリビジョンに戻す必要があります。 リビジョン21。

[jerry@CentOS trunk]$ svn up
At revision 22.

[jerry@CentOS trunk]$ svn merge -r 22:21 array.c
--- Reverse-merging r22 into 'array.c':
U    array.c

[jerry@CentOS trunk]$ svn commit -m "Reverted to revision 21"
Sending        trunk/array.c
Transmitting file data .
Committed revision 23.