2

作業中のプロジェクトがあり、バージョン管理にTortoiseSVNを使用しています(最新)。このプロジェクトに携わったことがあるのは私だけです。

しばらく前、私はそのプロジェクトのファイルとフォルダを移動していました。バージョン履歴によると、1つのコミットがいくつかのファイルの移動と削除を担当していました。このような:

PATH                  ACTION       COPY FROM FOLDER
===================================================== 
/some/folder          REPLACING    /some/other/folder
/some/folder/file1    DELETED
/some/folder/file2    DELETED

さて、これは私の側の間違いです。これらの2つのファイルを削除するつもりはありませんでした。これは単なるコピー操作であることが意図されていました。でも心配いりませんよね?結局のところ、これはソース管理です。

しかし今、そこには奇妙さがあります。を/some/folder見ると、file1file2がまだそこにあることがわかります。それだけでなく、それらはまだリビジョン管理下にあるとマークされています。Tortoiseは、それらが私のローカル作業コピーの一部であると完全に信じています。作業コピーで「クリーンアップ」を実行するまで、ファイルの履歴を表示しようとすると、URLが正しくないというエラーも発生しました。

これでファイルの履歴を確認できますが、最後のコミットではファイルが削除されたと表示され、別のコンピューターで更新を実行してもファイルはそこに配置されません。また、これらのファイルへの変更はコミットできません。

WTF?O_o

更新:私が知りたいのは、これがどのように、そしてなぜなったのかということです。フォルダの削除やその場所にある別のフォルダのコピーなど、多くのファイルの名前変更をすべて同じコミットで行ったので、おそらく私自身のせいでした。しかし、それでもそのような混乱を引き起こすことはありません。だから...WAT?

修正に関しては、自分でできると思います。別の作業用コピーをダウンロードして、ファイルを追加し直すだけで、話は終わりです。しかし、この場合、それが何を引き起こしたのか、それをどのように再現するのか、そしておそらくSVNチームにバグを提出する必要があるのか​​を理解したいと思います。:P

4

1 に答える 1

2

なぜこれが起こったのですか?それは答えるのが難しい質問です。しかし、この種のことが TortoiseSVN で頻繁に発生することは知っています。プログラムの問題ではありませんが、通常は人的エラーが原因です。

TortoiseSVN は Windows Explorer のインターフェイスを使用するため、これが問題になる可能性があります。エクスプローラーでは、ボタンを押すだけでファイルの名前変更、ドラッグ アンド ドロップ、および削除を行うことに慣れています。残念ながら、私が Explorer でよく行うことはどれも Subversion では機能しません。

TortoiseSVN では、作業ディレクトリにあるファイルを移動したい場合、TortoiseSVN コンテキスト メニューを使用する必要があります。ファイルの名前を変更したい場合は、TortoiseSVN のコンテキスト メニューに移動する必要があります。これは、私が通常 Explorer と対話する方法の中断であり、非常に忘れがちです。

覚えておかなければならないことの 1 つは、作業コピー自体がすべて同じリビジョンにあるとは限らないということです。異なるフォルダーや異なるファイルでさえ、異なるリビジョンにある可能性があります。参照しているフォルダーがリポジトリ内のリビジョンよりも古いリビジョンである場合、リポジトリに存在しなくなったファイルを簡単に確認できます。

実際、これは私が TortoiseSVN で抱えている別の問題です。TortoiseSVN は、そのような種類の情報を実際に中継するわけではありません。

ちなみに、私は Windows で TortoiseSVN を使用しています。ただし、使用するときに言及した問題を認識しておく必要があります。そうしないと、リポジトリと作業ディレクトリが完全に一致していないことがわかります。

私は TortoiseSVN に付属しているコマンド ライン クライアントを多用しています。コマンド ライン クライアントの方が情報量が多く、簡単に同期を取り戻せます。TortoiseSVN を使用するすべての人に、コマンド ライン クライアントについて学び、TortoiseSVN が道に迷う可能性がある状況で使用することをお勧めします。私のコミットの 90% はコマンド ライン クライアント経由で行われ、コマンド ライン クライアントで多くのsvn statusコマンドを実行しています。TortoiseSVN を抑制していることがわかります。


もう 1 つ: ファイルをコピーして追加し直さないでください。Subversion にとって、これらは関連する履歴のないまったく新しいファイルです。あなたには、前のファイルの続きがあります。数週間のうちに、突然、何かマージが正しくないことに気がついたとき、大笑いするでしょう。

代わりに、ファイルを古いリビジョンから現在の作業ディレクトリにコピーします。

$ svn cp -r30 ^/trunk/my_file@30 .

これにより、リビジョン 30 (このファイルが削除される前の最後のリビジョンであると仮定) が現在の作業コピーにリンクされます。履歴は正しくなり、あなたと Subversion の両方がそのファイルのステータスに同意します。

于 2012-07-30T03:11:23.600 に答える