subversionをコマンドで使う練習その4
今回は二人のユーザが同一のファイルの、同一の場所を更新したことを想定する。
まずは「hoge」ユーザと、「foo」ユーザが「names.txt」を以下のように修正したものとする。
hoge$ cat names.txt taro sato jiro saburo siro goro rokuro shichiro foo$ cat names.txt taro yamamoto jiro saburo siro goro rokuro shichiro
二人とも1行目に修正を加えた。
まずは、「hoge」ユーザがコミットする。
hoge$ svn commit -m "last name is sato" 送信しています names.txt ファイルのデータを送信中です. リビジョン 6 をコミットしました。
続いて、「foo」ユーザがコミット
foo$ svn commit -m "last name is yamamoto" 送信しています names.txt svn: コミットに失敗しました (詳しい理由は以下のとおりです): svn: Out of date: '/hoge_prj/trunk/names.txt' in transaction '8'
案の定失敗。
まずはリポジトリに登録してある最新の変更点をローカルに反映させる。
foo$ svn update C names.txt リビジョン 6 に更新しました。
「C」が表示され、最新の状態が反映された。この「C」は、リポジトリの変更点と
ローカルの変更点をマージしようとしたときに、競合が発生したことを示す。
最新の状態になったので、前回のノリで、ローカルのファイルを再度コミットしてみる。
foo$ svn commit -m "last name is yamamoto" svn: コミットに失敗しました (詳しい理由は以下のとおりです): svn: コミットを中止しています: '/home/foo/work/hoge_prj/names.txt' がまだ衝突しています
てな感じで、また失敗した。ファイルの中身を確認してみる。
foo$ cat names.txt <<<<<<< .mine taro yamamoto ======= taro sato >>>>>>> .r6 jiro saburo siro goro rokuro shichiro
のようになっている。自分が変更した内容と、リポジトリ内の変更点が記述されている。
競合ってのは、発生したら機械的に解決できないもので、結局のところ、どの変更が正しいのかを
人が判断することでしか、解決できない。
なので、今回の場合は「foo」と「r6(リビジョン6)の変更者」が話し合って、どちらが正しいのかを
話し合って決めてもらうしかない。
じゃあ、リビジョン6には誰が変更したのかをログをみて調べてみる。
foo$ svn log -r6 names.txt ------------------------------------------------------------------------ r6 | hoge | 2006-11-26 22:17:46 +0900 (日, 26 11月 2006) | 1 line last name is sato ------------------------------------------------------------------------
「log」コマンドで「-r6」をつけることで、リビジョン6のコミット情報を調べることができる。
ここで、「hoge」が変更したことがわかるので、後は「foo」「hoge」でどのように変更するのか
話し合ってもらう。
話し合った結果、「foo」の内容が正しい内容で、あることがわかったので「foo」が「names.txt」を
修正する。
foo$ cat names.txt <<<<<<< .mine taro yamamoto ======= taro sato >>>>>>> .r6 jiro saburo siro goro rokuro shichiro ↓マーカーとかを削除 foo$ cat names.txt taro yamamoto jiro saburo siro goro rokuro shichiro
修正が完了したら、リポジトリに競合が解決したことを通知する必要がある。
foo$ svn resolved names.txt 'names.txt' の衝突状態を解消しました
と表示されたので、心置きなく、「foo」の内容をコミットする。
foo$ svn commit -m "last name is yamamoto" 送信しています names.txt ファイルのデータを送信中です. リビジョン 7 をコミットしました。
無事コミット完了。
今回はここまで。
subversionをコマンドで使う練習その4
今回は二人のユーザが同一のファイルの、同一の場所を更新したことを想定する。
まずは「hoge」ユーザと、「foo」ユーザが「names.txt」を以下のように修正したものとする。
hoge$ cat names.txt taro sato jiro saburo siro goro rokuro shichiro foo$ cat names.txt taro yamamoto jiro saburo siro goro rokuro shichiro
二人とも1行目に修正を加えた。
まずは、「hoge」ユーザがコミットする。
hoge$ svn commit -m "last name is sato" 送信しています names.txt ファイルのデータを送信中です. リビジョン 6 をコミットしました。
続いて、「foo」ユーザがコミット
foo$ svn commit -m "last name is yamamoto" 送信しています names.txt svn: コミットに失敗しました (詳しい理由は以下のとおりです): svn: Out of date: '/hoge_prj/trunk/names.txt' in transaction '8'
案の定失敗。
まずはリポジトリに登録してある最新の変更点をローカルに反映させる。
foo$ svn update C names.txt リビジョン 6 に更新しました。
「C」が表示され、最新の状態が反映された。この「C」は、リポジトリの変更点と
ローカルの変更点をマージしようとしたときに、競合が発生したことを示す。
最新の状態になったので、前回のノリで、ローカルのファイルを再度コミットしてみる。
foo$ svn commit -m "last name is yamamoto" svn: コミットに失敗しました (詳しい理由は以下のとおりです): svn: コミットを中止しています: '/home/foo/work/hoge_prj/names.txt' がまだ衝突しています
てな感じで、また失敗した。ファイルの中身を確認してみる。
foo$ cat names.txt <<<<<<< .mine taro yamamoto ======= taro sato >>>>>>> .r6 jiro saburo siro goro rokuro shichiro
のようになっている。自分が変更した内容と、リポジトリ内の変更点が記述されている。
競合ってのは、発生したら機械的に解決できないもので、結局のところ、どの変更が正しいのかを
人が判断することでしか、解決できない。
なので、今回の場合は「foo」と「r6(リビジョン6)の変更者」が話し合って、どちらが正しいのかを
話し合って決めてもらうしかない。
じゃあ、リビジョン6には誰が変更したのかをログをみて調べてみる。
foo$ svn log -r6 names.txt ------------------------------------------------------------------------ r6 | hoge | 2006-11-26 22:17:46 +0900 (日, 26 11月 2006) | 1 line last name is sato ------------------------------------------------------------------------
「log」コマンドで「-r6」をつけることで、リビジョン6のコミット情報を調べることができる。
ここで、「hoge」が変更したことがわかるので、後は「foo」「hoge」でどのように変更するのか
話し合ってもらう。
話し合った結果、「foo」の内容が正しい内容で、あることがわかったので「foo」が「names.txt」を
修正する。
foo$ cat names.txt <<<<<<< .mine taro yamamoto ======= taro sato >>>>>>> .r6 jiro saburo siro goro rokuro shichiro ↓マーカーとかを削除 foo$ cat names.txt taro yamamoto jiro saburo siro goro rokuro shichiro
修正が完了したら、リポジトリに競合が解決したことを通知する必要がある。
foo$ svn resolved names.txt 'names.txt' の衝突状態を解消しました
と表示されたので、心置きなく、「foo」の内容をコミットする。
foo$ svn commit -m "last name is yamamoto" 送信しています names.txt ファイルのデータを送信中です. リビジョン 7 をコミットしました。
無事コミット完了。
今回はここまで。