web-dev-qa-db-ja.com

svn copyの用途は何ですか?

例:

$ svn copy foo.txt bar.txt  
A    bar.txt
  • この手法をいつ使用しますか、またその理由は何ですか。
  • このコマンド(svnの「レッドブック」から取得)は、<foo.txt>と共有される履歴を保持しながら、<bar.txt>のコピーを作成しますか?
  • <bar.txt>を変更すると、<foo.txt>はどうなりますか?

他の最新のシステム(Clearcase、Accurev、Perforce)でこれに相当するものは何ですか?

私が探しているポイントを強調しましょう:
この種の分岐はファイルレベルですか?
同じブランチで使用するとどうなりますか。つまり、ファイルのコピーを作成してから、その新しいファイルの変更を開始します。すべて同じブランチにありますか?
タグ付けにも使用されることは理解していますが、興味深いのは、ファイルレベルで<svn copy>を実行するときに何を期待するかです。

27
nav.jdwdw

分岐/タグ付けの他に、ファイルを2つに分割するときにも使用できます。この場合、両方の新しいファイルに履歴があり、分割前にコードを確認できます。

ところで:これはSVNが持っている数少ない機能の1つですが、Gitは持っていません(Gitは、特にコマンドに-Cを追加した場合、事後にコードの起源を推測しようとします)。

37
Kornel

この手法をいつ使用しますか、またその理由は何ですか。

タグを作成し、ブランチを作成するため。ただし、通常は単一のファイルではなくディレクトリで使用します。タグは1つ以上のファイルのコピーであり、便宜上保持しますが、二度と変更することはありません。ブランチは1つ以上のファイルのコピーであり、元のファイルとは別に展開されます

このコマンドは、foo.txtと共有される履歴を保持しながら、bar.txtのコピーを作成しますか?

完全ではありませんが、foo.txtの履歴は事実上bar.txtの履歴にコピーされ、bar.txtの履歴に追加のエントリが表示され、foo.txtからコピーされたことを示します。その後、それらは独立しています。したがって、コピーの時点までの履歴は同一/共有されます。

bar.txtを変更すると、foo.txtはどうなりますか?

何も、それらは完全に分離しています。ただし、後で変更を一方から他方にマージすることができます。

23
Steve Jessop

これは少し珍しい使用法ですが、ソースファイルを2つの別々のファイルに分割する必要がある場合があります。たとえば、関連のない機能が2セット含まれている場合、svncopyを使用してこれを行います。次に、両方のファイルを変更し、それぞれから不適切なビットを削除します。このようにして、両方の新しいファイルは、関連するビットの改訂履歴を保持します。

10
Simon Howard

他の最新のシステム(Clearcase、Accurev、Perforce)でこれに相当するものは何ですか?

gitは、ファイルがプレーンコピーでも同じであることに気付き、コピーとして表示します。

8
Dustin

svn copyは、誤ってファイルを削除した後に役立ちました。 anwer を参照してください question 私が尋ねました。

1

新しいファイルを作成するときにこの手法を使用し、スキャフォールディングをコピーしたいと思います(現在、Perforceを使用していますが、以前はSubversionを使用していました)。コピーを変更しても、他のファイルには影響しません。

1
Michael Bobick

Branchはディレクトリとして「実装」されているため、Subversionの第一級市民ではありません。

したがって、_svn copy_は、同じブランチ(ディレクトリ)内のファイルのブランチの種類を許可します。後で、コピーしたファイルを最初のファイルにマージして戻すことができます。しかし、このスレッド で述べたように、これは1つのファイルには適していません

ClearCaseで同等のものは、次のような選択ルールになります。

_element * .../myBranchForCopy/LATEST
element /myPath/myFile /main/myBranch/LATEST -mkbranch myBranchForCopy
_

ただし、ファイルを分岐するために作成されたこのビューでは、一度に1つの_foo.txt_のみが表示されます(myBranch内、またはチェックアウトされている場合はmyBranchForCopy内)。実際の「コピー」はなく、同じ要素です。マージは次の間になります。

  • _foo.txt@@/main/myBranch/myBranchForCopy/LATEST_
    そして
  • _foo.txt@@/main/myBranch/LATEST_
1
VonC