Подтвердить что ты не робот

Каковы использование svn-копии?

Пример:

$ svn copy foo.txt bar.txt  
A    bar.txt
  • Когда вы будете использовать эту технику и почему?
  • Будет ли эта команда (взята из svn "red book" ) создает копию <foo.txt>, сохраняя при этом историю ее совместного использования с <bar.txt>?
  • Если я изменяю <bar.txt>, что произойдет с <foo.txt>?

Каковы эквиваленты этого в других современных системах (Clearcase, Accurev, Perforce)?

Позвольте мне подчеркнуть то, что я ищу:
Разве это разветвление на уровне файлов?
Что произойдет, если вы используете его в одной ветки, т.е. Создадите копию файла и начните изменять этот новый файл. все в той же ветке?
Я понимаю, что он также используется для пометки, но меня интересует то, что можно ожидать при выполнении <svn copy> на уровне файла.

4b9b3361

Ответ 1

Помимо разветвления/тегирования, вы также можете использовать его, когда вы разбиваете файл на два. В этом случае оба новых файла будут иметь историю, и вы сможете просмотреть код до разделения.

BTW: одна из немногих функций, которые имеет SVN, но Git не делает (Git будет пытаться угадать происхождение кода после факта, особенно если вы добавляете команды -C в команды).

Ответ 2

Когда вы будете использовать эту технику и почему?

Создавать теги, а также создавать ветки, хотя обычно вы должны использовать их в каталоге, а не в одном файле. Тег - это копия одного или нескольких файлов, которые вы сохраняете для удобства, но никогда не меняетесь снова. Ветвь - это копия одного или нескольких файлов, которая затем эволюционирует отдельно от оригинала

Будет ли эта команда создавать копию foo.txt, сохраняя историю ее совместного использования с bar.txt?

Не совсем, история foo.txt будет эффективно скопирована в историю bar.txt, затем в истории bar.txt появится дополнительная запись, указывающая, что она была скопирована из foo.txt, и после этого они независимы. Таким образом, история до точки копии идентична/разделена.

Если я изменяю bar.txt, что произойдет с foo.txt?

Ничего, они полностью разделены. Но позже вы можете объединить изменения от одного к другому.

Ответ 3

Это немного необычное использование, но я считаю, что иногда мне приходится делить исходный файл на два отдельных файла - например, если он содержит два набора несвязанных функций, и я использую svn copy для этого. Затем я изменяю оба файла и удаляю несоответствующие биты из каждого. Таким образом, оба новых файла сохраняют историю изменений для соответствующих битов.

Ответ 4

Каковы эквиваленты этого в другие современные системы (Clearcase, Accurev, Perforce)?

git заметит, что файл одинаковый на обычной копии и показывает его как копию.

Ответ 5

Я использую этот метод, когда создаю новый файл, и хочу скопировать леса (в настоящее время я использую Perforce, но использую Subversion). Изменение копии не повлияет на другой файл.

Ответ 6

Филиал не является первоклассным гражданином в Subversion, поскольку он "реализован" как каталог.

Следовательно, svn copy допускает вид ветки файла в пределах той же ветки (каталога). Вы можете позже слить обратно скопированный файл в первый. Но это плохо подходит для всего одного файла, как указано в этот поток

Эквивалент в ClearCase был бы правилом выбора, например

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

Однако в этом представлении, сделанном для разветвления файла, вы увидите только один foo.txt за раз (либо в myBranch, либо если он выгружен, в myBranchForCopy). Нет реальной "копии", это тот же самый элемент. Любое слияние было бы между:

Ответ 7

svn copy пригодится после того, как я случайно удалил файл. Обратитесь к anwer с благодарностью question, о которой я просил.