SVN - Когда вы помечаете рабочую копию, это все еще дешевая копия?

Используя Subversion, в моей рабочей копии я делаю небольшую модификацию (обновляю номер версии). Затем я хотел бы пометить свою рабочую копию. Будет ли этот тег по-прежнему дешевой копией с модификацией или SVN будет дублировать файлы? Я бы не хотел, чтобы мой репозиторий сильно увеличивался в размерах, потому что я пытаюсь сохранить изменение номера версии.

Причина, по которой я спрашиваю о создании тега, содержащего модификацию, а не о фиксации, а затем пометке, связана с моим сервером сборки. Сервер сборки создает CCNetLabel, который я использую для обновления номеров версий моих проектов (AssemblyInfo.cs). Когда сборка успешна, создается тег. Когда я использую ForceBuild, тег основан на рабочей копии, которая будет содержать измененный номер версии. Я хочу, чтобы тег содержал соответствующий номер версии.

примечание: спорно, создаю ли я ветку или тег, однако SVN не делает различий между ними.


person mcdon    schedule 07.03.2010    source источник


Ответы (4)


По-разному. Если ваша рабочая копия обновлена ​​(все узлы имеют одинаковую ревизию), это так же дешево, как пометка из репозитория.

Для каждого файла/каталога (или фактически поддерева) с ревизией, отличной от родительской, будут добавлены дополнительные данные. И если у вас есть локальные модификации, будет добавлено еще больше данных.

Но это все еще разумно дешево: он не дублирует файлы, которые уже находятся в репозитории.

person Bert Huijben    schedule 07.03.2010
comment
Отлично, меня беспокоило, что он может дублировать все файлы. Похоже, что пометка рабочей копии будет едва ли больше, чем пометка ветки на сервере. Теперь, если бы я мог сказать Cruise Control .net всегда помечать мою рабочую копию.... groups.google.com/group/ccnet-devel/browse_thread/thread/ - person mcdon; 09.03.2010
comment
если у меня есть каталог A в моей рабочей копии, и я помечаю это. Я так понимаю это будет дешевая копия в репозитории. Однако позже я удаляю A из своего рабочего каталога. Что будет с дешевой копией? Будет ли он по-прежнему доступен? - person Jus12; 17.02.2011

Из описания подрывной деятельности

  • Ветвление и пометка являются дешевыми (с постоянным временем) операциями. Нет никаких причин для того, чтобы эти операции были дорогими, поэтому они не являются дорогими. И ветки, и теги реализованы с точки зрения базовой операции «копирования». Копия занимает небольшой постоянный объем пространства. Любая копия — это тег; и если вы начинаете коммитить копию, то это тоже ветка. (Это устраняет «маркировку точек ветвления» CVS, удаляя различие, которое делало метки точек ветвления необходимыми в первую очередь.)

Примечание! Я только что заметил, что Subversion перемещена в проектную организацию Apache.

person epatel    schedule 07.03.2010

Довольно устаревший пост, но стоит упомянуть всем, кто посещает, что ответ, в котором говорится, что вы можете только пометить данные, которые уже были переданы в репозиторий ..., не совсем точен (по крайней мере, не сейчас).

Вы можете пометить рабочую копию, которая может содержать смешанные версии и даже переключаемые каталоги, а также локальные модификации.

Что касается дешевизны, да, она все равно должна быть дешевой, так как Subversion будет разветвляться за вас, а затем накладывать изменения вашей рабочей копии на репозиторий, экономя как можно больше места.

person Rob    schedule 17.08.2011

Создание тега или ветки в subversion обходится очень дешево. Файлы не будут скопированы. Все, что происходит, это то, что будет создана новая ревизия, содержимое которой в основном просто содержит указатель на то, откуда был скопирован тег. Это будет одинаковый размер для тега проекта с одним маленьким файлом или для одного с миллионом больших.

Когда вы говорите «пометить мою рабочую копию», вы имеете в виду «пометить мою рабочую ветку»? Вы можете пометить только те данные, которые уже были где-то зафиксированы в репозитории, а не ваши локальные незафиксированные изменения.

person Thilo    schedule 07.03.2010
comment
Я имею в виду пометить мою рабочую копию. Процесс будет таким: обновление svn, обновление номера версии в рабочей копии, создание тега из рабочей копии. Цель состоит в том, чтобы сохранить обновленную информацию о версии в теге (ветка плюс модификация для номера версии). - person mcdon; 09.03.2010