私は友人と一緒にプロジェクトに取り組んでおり、古いバージョンのコードに戻り、それを現在のバージョンに設定したいと考えています。どうすればいいのですか?
vs08で「anksvn」を使っています。
自分の PC に必要なバージョンがありますが、コミットに失敗しています。「コミットに失敗しました。ファイルまたはディレクトリが古くなっています」というメッセージが表示されます。
私のPCにはSubversionクライアントもあります。
基本的には、「逆方向にマージ」する必要があります。現在のバージョンと以前のバージョンの差分を現在のバージョンに適用して(作業コピーが古いバージョンのようになります)、再度コミットします。たとえば、リビジョン 150 (現在) からリビジョン 140 に戻すには:
svn update
svn merge -r 150:140 .
svn commit -m "Rolled back to r140"
Subversion Red Book には、これに関する適切なセクションがあります。
サブバージョン履歴の先頭でのみ、新しい変更をコミットできます。
PC にある適切なコピーで直接何もできない理由は、その.svn
フォルダーが過去のコードであることを認識しているため、コミットする前に更新が必要になるためです。
必要な古いコピーのリビジョン番号を見つけます。
現在のリビジョンを取得するには:
svn info --show-item revision
# or
svn log
または、プロジェクトの古いバージョンを確認するには、次を使用します。
svn update -r <earlier_revision_number>
正しいリビジョン番号が見つかるまで。
適切なリビジョン番号を書き留めます (123
以下の例を想定)。
最新のリビジョンに更新します。
svn update
必要なリビジョンと最新バージョンの間のすべての変更を元に戻します。
svn merge -r HEAD:123 .
svn commit -m "Reverted to revision 123"
(上記のJon Skeetの回答と同じです。)
古いコピーが見つからず、現在 PC にあるファイルをコミットしたい場合:
.svn
適切なバージョンのコピーを作成します (ただし、フォルダーはありません)。
cd ..
rsync -ai --exclude=.svn project/ project-good/
最新バージョンであることを確認します。
cd project
svn update
# or make a fresh checkout
svn checkout <url>
正常なバージョンを作業コピーの上にコピーします。
このコマンドは、適切なコピーにない作業ツリーからファイルをコピーして削除しますが、既存の.svn
フォルダーには影響しません。
cd ..
rsync -ai --exclude=.svn --delete project-good/ project/
rsync がない場合は使用できますcp -a
が、不要なファイルを手動で削除する必要があります。
今持っているものをコミットできるはずです。
cd project
svn commit -m "Reverted to good copy"
この行を使用するだけです
svn update -r yourOldRevesion
以下を使用して、現在のリビジョンを知ることができます。
svn 情報
もう少し古い学校
svn diff -r 150:140 > ../r140.patch
patch -p0 < ../r140.patch
それからいつもの
svn diff
svn commit
これが私がしたことであり、私のために働いたものです。
特定の時間に行った複数のコミットの変更を元に戻し、前のコミット ポイントに移動したいと考えています。
これにより逆マージが実行され、作業コピーの変更が取り消されます。
コードを確認してコミットするだけです。
元に戻したい最上位の階層を右クリック >>Revert
またはRevert to Revision
このページには危険な回答がたくさんあります。SVN バージョン 1.6 以降、 update -r を実行するとツリーの競合が発生する可能性があることに注意してください。これは、ツリーの競合に関する情報をグーグルで検索しているときに、データが失われる可能性のある kafkeresque の悪夢に急速にエスカレートします。
バージョンに戻す正しい方法は次のとおりです。
svn merge -r HEAD:12345 .
12345 はバージョン番号です。ドットを忘れないでください。
プロジェクトを右クリック > 置換 > リビジョンまたは URL > 元に戻す特定のリビジョンを選択します。
ここで、ローカル更新コード バージョンをリポジトリにコミットします。これにより、コード ベースが特定のリビジョンに戻ります。
古いバージョンに同期してコミットします。これでうまくいくはずです。
ここでは、変更を元に戻す方法についても説明します。
以下は私のために働いています。
ローカルでの変更が多く、ローカル コピーの変更を破棄し、SVN の最後の安定バージョンをチェックアウトする必要がありました。
無視されたファイルを含むすべてのファイルのステータスを確認します。
すべての行を grep して、新しく追加されたファイルと無視されたファイルを取得します。
それらを に置き換え//
ます。
およびrm
-rf すべての行。
svn status --no-ignore | grep '^[?I]' | sed "s/^[?I] //" | xargs -I{} rm -rf "{}"