1

私の SVN リポジトリには、さまざまなプロジェクト用の複数のフォルダーが含まれています。「デスクトップ プログラム」「iOS アプリ」「Web アプリ」など。すべてのリビジョン エントリはこれらの間で共有されます (1 つのリポジトリの下にあるため)。リビジョン #100 は「iOS アプリ」フォルダーにあり、リビジョン #101 は「Web 」フォルダーにあります。アプリのフォルダなど)。

私が望むのは、これらのフォルダーの1 つだけで以前のバージョンにロールバックすることです。通常、これは「リバース」SVN マージで行われます。SVN の仕事は、すべての履歴を追跡することです。しかし、私はそれを望んでいません。リビジョン #5 以降、「iOS アプリ」に 20 件のコミットがあるとします。これらを履歴から削除し、その特定のフォルダーをリビジョン #5 に戻したいと考えています。これらの 20 件のコミットは「決して起こらなかった」ため、二度とチェックすることはできません。これは可能ですか?

私はSVNとやり取りしている2つの異なるマシンを持っています。VisualSVN を搭載した Windows PC と、ターミナル レベルで Subversion を搭載した Mac。どちらかの解決策に感謝します。

4

2 に答える 2

2

クライアント側からは、これを行う方法はまったくありません。コマンドライン、Tortoise、またはその他のクライアントに関係なく。

リポジトリを所有するサーバー アカウントにアクセスできる場合は、その可能性がありますが、非常に複雑で、重要な手作業が必要になる場合があります。

大まかに、次の手順です。

  • リポジトリ UUID を取得します - svn info http://svnserver/svn/repo- UUID 行を参照してください
  • svn リポジトリをダンプします。svnadmin dump /path/to/repo > repo.dump
  • ダンプファイルを編集してコミットを除外します

    a)それを開いてvi、不要なコミットを削除します

    b)またはsvndumpfilterコマンドを使用してパスでフィルタリングします

  • 新しいリポジトリを作成し、変更したリポジトリをそこにインポートします。

    svnadmin create /path/to/repo2

    svnadmin load < repo.dump

    svnadmin setuuid /path/to/repo2 THE_ORIGINAL_UUID

ここで、repo2 が正常に機能し、期待どおりのコンテンツがあることを確認します。その場合は、削除repoして名前を変更できますrepo2-> repo.

ダンプファイルを手動で変更すると、非常にエラーが発生しやすく、多くの場合、これらのエラーを発見するのが非常に困難になる可能性があることに注意してください。通常、このようなことをするのは悪い考えです。

于 2012-11-10T00:46:51.637 に答える
1

私が望むのは、これらのフォルダーの 1 つだけで以前のバージョンにロールバックすることです。通常、これは「リバース」SVN マージで行われます

ひどい... WCツリーの一部を以前のリビジョンに戻すには、次のことを行う必要があります(この変更されたWCcd SUBTREE-ROOT & svn up -r REVNOをWCルートからコミットすると、部分的にロールバックされたツリーでリポジトリに新しいリビジョンが作成されます)

これらの 20 件のコミットは「決して起こらなかった」ため、二度とチェックすることはできません。

SCM でだまされて書き換えられた歴史はBAD IDEAです。Subversion の履歴は不変です。@petr-kozelka が書いたように、svnadmin ツールとアクセス レベルを使用して履歴を変更する必要があります。

于 2012-11-10T00:57:52.920 に答える