0

SVNで保護されたコードを以前のバージョンに戻す必要があり、それを大幅に変更しました。変更されたバージョンをSVNにコミットしたいのですが、コミットしようとすると、SVNから最初に更新する必要があると通知されます。やりたくない。

SVNからの更新なしで、ローカルバージョン(作業コピー)が新しい現在の正しいバージョンであることを指定することは可能ですか?

4

3 に答える 3

1

HEADトランクまたはブランチ以外で変更をコミットすることはできません。これは、すべてのバージョン管理システムで試行されます。そうしないと、保持したい変更を上書きしてしまうことになります。

できることは 2 つあります。

  1. 頭を上げて最新のリビジョンに更新してください。Subversion は変更を上書きしませんが、代わりに可能な場所を更新するだけです。いくつかの競合が発生する可能性があります。それはすべて、変更したコードがどれだけ古いかによって異なります。たとえば、現在のリビジョンは 12,001 で、リビジョン 11,980 をチェックアウトしました。これがサーバー上にあり、デバッグしていたからです。2 つのファイルでいくつかの小さな問題を修正しました。最新のリビジョンに更新すると、作業していたファイルも含めてすべてのファイルが更新されますが、作業していたファイルの領域は更新されません。おそらく、これは私が本当にやりたいことです。(もちろん、更新したら徹底的にテストしてください!)。
  2. リビジョンに基づいて新しいブランチを作成します。Subversion はこれをミリ秒で実行できます。次に、その新しいブランチで変更をコミットします。

もう一度、リビジョン 11,980 をチェックアウトし、最新のリビジョンが 12,0001 であるとします。

$ svn co -r 11980 http://path/to/my/project workdir
$ cd workdir
...a bunch of changes
$ svn commit -m"My changes"
SVN Error: you need to update first...
$ svn copy -r11900 http://path/to/my/project@11900 http://path/to/branches/my_branch/project

これで、ブランチとして取り組んでいたもののベースができました。ここで、そのブランチに切り替えます。

$ svn switch http://path/to/branches/my_branch/project

私の作業ディレクトリは、私が取り組んでいた古いリビジョンに基づいた新しいブランチにあります。私の変更はすべて、スイッチで変更されていません。問題なく変更をコミットできるようになりました。

$ svn commit -m"My changes"
$ It worked!

ここで、必要に応じて、変更を元のプロジェクトにマージできます。

$ svn co http://path/to/my/project workdir2
$ cd workdir2
$ svn merge http://path/to/branches/my_branch/project
于 2013-03-04T22:48:47.640 に答える
1

答えはsvn up --accept mine-full

于 2013-03-04T21:25:32.607 に答える
0

1) 最終的なコード ベースのバックアップを、ハードディスクの別の場所に作成します。
2) 更新を行う
3) SVN からすべてを削除する
4) バックアップ ドライブからすべてのコード ベースをコピーして貼り付ける
5) コミットする

また

それが役立つ場合は、クリーンアップを実行できますが、そうは思いません...

于 2013-03-04T19:28:07.837 に答える