nDiki

2006年11月28日 (火)

Subversion で間違えてディレクトリをごっそり消してコミットしてしまった時

今日のプロジェクト成果物とりまとめを前に昨日、メンバの1人が trunk 直下の2年半分のファイルが入っているプロジェクトディレクトリをなぜか削除してコミット。

朝きたら過去のリビジョンをエクスポートして再度追加して戻したとかで、全部履歴が切れてしまっていた。作業ディレクトリも全部入れ替わり。

こういう時は過去のリビジョンからの copy をすべし。

  • 履歴が維持される
  • 属性などもコピーされる
  • 他のチェックアウト済み作業ディレクトリへの影響もなし

といった点で優れている。

作業ディレクトリを使って消したディレクトリを戻す

 svn copy --revision R URL .
 svn commit -m "Resurrected dir1 from revision R"

ここで R は間違えて消してコミットしたリビジョンの1つ前のリビジョン。 URL は削除したディレクトリの URL

実行例:

 # テスト用ディレクトリを作る
 mkdir /tmp/svntest
 mkdir /tmp/svntest/work

 # テスト用リポジトリを作る
 svnadmin create /tmp/svntest/repos --fs-type fsfs

 # テスト用作業ディレクトリでファイルを作成
 cd /tmp/svntest/work
 mkdir trunk branches tags
 svn import . file:///tmp/svntest/repos --message 'Initial repository layout.'
 rm -r branches tags trunk
 svn checkout file:///tmp/svntest/repos/trunk
 cd trunk
 svn mkdir dir1
 echo test1 > dir1/test1.txt
 echo test2 > dir1/test2.txt
 svn add dir1/test1.txt dir1/test2.txt
 svn commit -m "Add dir1"
 echo test3 > dir1/test2.txt
 svn commit -m "Update dir1/test2.txt"

 # 消してコミットしてしまう!!!
 svn remove dir1
 svn update
 svn commit -m "remove dir1"

 # 元に戻す
 svn copy --revision 3 file:///tmp/svntest/repos/trunk/dir1 .
 svn commit -m "Resurrected dir1 from revision 3"

リポジトリ上で直接戻す

 svn copy --revision R URL1 URL2

ここで R は間違えて消してコミットしたリビジョンの1つ前のリビジョン。 URL1 は削除したディレクトリの URLURL2 はその親ディレクトリの URL

実行例:

 # テスト用ディレクトリを作る
 mkdir /tmp/svntest
 mkdir /tmp/svntest/work

 # テスト用リポジトリを作る
 svnadmin create /tmp/svntest/repos --fs-type fsfs

 # テスト用作業ディレクトリでファイルを作成
 cd /tmp/svntest/work
 mkdir trunk branches tags
 svn import . file:///tmp/svntest/repos --message 'Initial repository layout.'
 rm -r branches tags trunk
 svn checkout file:///tmp/svntest/repos/trunk
 cd trunk
 svn mkdir dir1
 echo test1 > dir1/test1.txt
 echo test2 > dir1/test2.txt
 svn add dir1/test1.txt dir1/test2.txt
 svn commit -m "Add dir1"
 echo test3 > dir1/test2.txt
 svn commit -m "Update dir1/test2.txt"

 # 消してコミットしてしまう!!!
 svn remove dir1
 svn update
 svn commit -m "remove dir1"

 # 元に戻す

 svn copy --revision 3 file:///tmp/svntest/repos/trunk/dir1 \
   file:///tmp/svntest/repos/trunk -m "Resurrected dir1 from revision 3"
 svn update
スポンサード リンク
[ 11月28日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.104719s / load averages: 0.44, 0.50, 0.50
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker