例:
$ svn copy foo.txt bar.txt
A bar.txt
<foo.txt>
と共有される履歴を保持しながら、<bar.txt>
のコピーを作成しますか?<bar.txt>
を変更すると、<foo.txt>
はどうなりますか?他の最新のシステム(Clearcase、Accurev、Perforce)でこれに相当するものは何ですか?
私が探しているポイントを強調しましょう:
この種の分岐はファイルレベルですか?
同じブランチで使用するとどうなりますか。つまり、ファイルのコピーを作成してから、その新しいファイルの変更を開始します。すべて同じブランチにありますか?
タグ付けにも使用されることは理解していますが、興味深いのは、ファイルレベルで<svn copy>
を実行するときに何を期待するかです。
分岐/タグ付けの他に、ファイルを2つに分割するときにも使用できます。この場合、両方の新しいファイルに履歴があり、分割前にコードを確認できます。
ところで:これはSVNが持っている数少ない機能の1つですが、Gitは持っていません(Gitは、特にコマンドに-C
を追加した場合、事後にコードの起源を推測しようとします)。
この手法をいつ使用しますか、またその理由は何ですか。
タグを作成し、ブランチを作成するため。ただし、通常は単一のファイルではなくディレクトリで使用します。タグは1つ以上のファイルのコピーであり、便宜上保持しますが、二度と変更することはありません。ブランチは1つ以上のファイルのコピーであり、元のファイルとは別に展開されます
このコマンドは、
foo.txt
と共有される履歴を保持しながら、bar.txt
のコピーを作成しますか?
完全ではありませんが、foo.txt
の履歴は事実上bar.txt
の履歴にコピーされ、bar.txt
の履歴に追加のエントリが表示され、foo.txt
からコピーされたことを示します。その後、それらは独立しています。したがって、コピーの時点までの履歴は同一/共有されます。
bar.txt
を変更すると、foo.txt
はどうなりますか?
何も、それらは完全に分離しています。ただし、後で変更を一方から他方にマージすることができます。
これは少し珍しい使用法ですが、ソースファイルを2つの別々のファイルに分割する必要がある場合があります。たとえば、関連のない機能が2セット含まれている場合、svncopyを使用してこれを行います。次に、両方のファイルを変更し、それぞれから不適切なビットを削除します。このようにして、両方の新しいファイルは、関連するビットの改訂履歴を保持します。
他の最新のシステム(Clearcase、Accurev、Perforce)でこれに相当するものは何ですか?
gitは、ファイルがプレーンコピーでも同じであることに気付き、コピーとして表示します。
新しいファイルを作成するときにこの手法を使用し、スキャフォールディングをコピーしたいと思います(現在、Perforceを使用していますが、以前はSubversionを使用していました)。コピーを変更しても、他のファイルには影響しません。
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
_