トップ(最新)

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

◇ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。
◇ 2GB 無料のオンラインストレージサービス Dropbox に次のリンク先から登録すると今なら 250MB プラス! → Dropbox


[ 11月28日全て ]

Related term


この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.052754s / load averages: 0.41, 0.35, 0.27
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)