2011-10-26 8 views
2

私はいくつかのファイルを初期リビジョン中にsvnリポジトリに追加しました。しかし今、これらのファイルはなくなりました。これはxcode 4.2で直接削除されてしまいました。しかし、彼らはまだsvnに存在し、私はsvnリポジトリを私のローカルプロジェクトバージョンに更新したいと思います。私はsvn rmコマンドを使ってすべてのファイルを削除することができると知っていますが、手動ですべてのファイルを見つけて選択して削除する必要があるため、そのことについて迷惑をかけることになります。それほど苦しい解決策はありませんか?xcodeでローカルファイルを削除した後、プロジェクトをsvnリポジトリと同期させる方法は?

ps。また、ローカルプロジェクトとsvnリポジトリの違いをチェックする方法についてのアドバイスは大歓迎です。現在、私がアップデートを実行している場合、xcodeはローカルコピーが最新であると言っているので、手動でも見つからないファイルを見つけることさえあります。

答えて

4

コマンドラインに入りたくない場合は、svn statusを実行して、削除したファイルを見つけることができます。これらは感嘆符で始まります。ここには、私が最後に手がけたリポジトリの例があります:

$ svn status 
!  subversion/pre-commit-kitchen-sink-hook.html 
!  subversion/svn-watch.html 
!  bludgen/bludgen.html 
!  duplicate-properties-files/fixup.html 
!  cvstools/group.html 
!  cvstools/find-branch-usage.html 
A  cvstools/someprogram.py 
M  cvstools/find-branch-usage.pl 
!  cvstools/scramble.html 
M  cvstools/findNames.pl 

ここでは、プログラムの名前を見つけるだけです。あなたのプログラムの名前にスペースがない場合は、単に[AWK]スクリプトは十分なものでなければならない:

$ svn status | awk '/^!/ {print $2}' 
subversion/pre-commit-kitchen-sink-hook.html 
subversion/svn-watch.html 
bludgen/bludgen.html 
duplicate-properties-files/fixup.html 
cvstools/group.html 
cvstools/find-branch-usage.html 
cvstools/scramble.html 

今、あなたはプログラムのリストを持っていることを、あなたはsvn rmコマンドにxargsを通じてそれを実行できます

$ svn status | awk '/^!/ {print $2}' | xargs svn rm 
D   subversion/pre-commit-kitchen-sink-hook.html 
D   subversion/svn-watch.html 
D   bludgen/bludgen.html 
D   duplicate-properties-files/fixup.html 
D   cvstools/group.html 
D   cvstools/find-branch-usage.html 
D   cvstools/scramble.html 

幸い、MacにはSubversionコマンドラインクライアントが付属しています。これにより、Subversionを使用して手動で削除したファイルが削除され、変更をコミットできます。リポジトリのコピーを最新のコードで更新することができます。いくつかの競合があるかもしれません(後で改訂版の誰かが更新したファイルを削除しました)が、これはかなり管理しやすいはずです。

svn diffを使用すると、現在の作業コピーとリポジトリのHEADリビジョンの違いを調べることができます。残念ながら、--summarizeパラメータは、リポジトリとリポジトリの違いを行う場合にのみ機能します。唯一の本当の問題は、XCodeのは、使用してSubversionクライアントがSubversionコマンドラインクライアントとの互換性があるかどうかである

$ svn diff -rHEAD | grep "^Index:" 
Index: windows-tools/which.pl 
Index: subversion/pre-commit 
Index: subversion/README 
Index: subversion/control.ini 
Index: subversion/pre-commit-kitchen-sink-hook.html 
Index: subversion/svn-watch.html 
Index: cvstools/findNames.pl 
Index: cvstools/group.html 
Index: cvstools/find-branch-usage.html 
Index: cvstools/someprogram.py 
Index: cvstools/find-branch-usage.pl 
Index: cvstools/scramble.html 
Index: bludgen/bludgen.html 
Index: duplicate-properties-files/fixup.html 

:しかし、あなたはIndex:で始まる行を探すためにgrepを使用して、異なるファイルを除外することができます。たとえば、VisualStudio Subversionクライアントは、コマンドラインクライアントが.svnを使用している間にSubversion情報ディレクトリの名前として_svnを使用します。

Xcode Subversionクライアントは、Subversionコマンドラインクライアントのリビジョン1.6.x(さらに以前のリビジョンでも1.4まで)と互換性がありますが、Subversionの最新1.7バージョンでは互換性がありません。

MacのSubversionインストールを改ざんしていない場合は、正常であるはずです。

+0

このような素晴らしいsvnコマンドの使用ガイドをありがとう。それは間違いなく私の問題を解決する方法です。将来的には、xcodeにもっと便利なsvn機能統合があることを願っています:) GL。 – Centurion

1

私はあなたがしようとしている何をすべきかを知ってる唯一の方法は次のとおりです。

  • 後藤ファイル - >ソースコントロール - >リポジトリ
  • あなたのリポジトリを選択しクリックして
  • をコミット
  • フラットビューアイコン(左)をクリック
  • ファイルが見つからない場合は!と表示され、右クリックすると変更を破棄できます。

EDIT - 申し訳ありませんが、私はこの問題を誤解していました。これは不足しているファイルを見つけるのに役立つかもしれませんが、コミットには役に立たないでしょう。私はあなたがそれらをコミットしないで、削除を復元しようとしていたと思っていた。

+0

ありがとうございます。少なくとも、不足しているファイルを見つけ出すには、一握りでなければなりません。 – Centurion

+1

また、不足しているファイルを選択することで、破棄された変更を選択すると、ファイルが見つからないというxcodeの警告が消えます。 – Centurion

+0

はい、ファイルをローカルに復元します。 – HaemEternal

関連する問題