Каковы использование 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>
на уровне файла.
Ответы
Ответ 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, о которой я просил.