Существуют ли системы контроля версий, позволяющие навсегда удалять файлы? - PullRequest
7 голосов
/ 27 января 2009

Мне нужно сохранить в версии несколько больших файлов (несколько гигов).

Мне не нужно, и я не могу сохранить в версии все версии файлов. Я хочу иметь возможность удалить из моей версии больших файлов VCS в какой-то момент.

Файлы, которые я хочу сохранить под контролем версий, - это большие ZIP-файлы или ISO-образы. Эти файлы могут содержать исполняемое программное обеспечение или данные (сейсмические данные, изображения SAR, данные GNSS), и они предоставляются поставщиком программного обеспечения моей компании.

Какую систему управления версиями я могу использовать?

Ответы [ 11 ]

8 голосов
/ 27 января 2009

В CVS вы можете сделать это, удалив файлы из репозитория. Subversion позволяет это, выгружая содержимое репо и фильтруя его, чтобы удалить файлы (это немного громоздко). Для этого у Perforce есть команда obliterate. Многие из более новых распределенных VCS усложняют использование хеш-кодов повсюду, и тот факт, что ваше хранилище может быть реплицировано в другом месте, также усложняет ситуацию. Hg имеет команду strip (часть расширения Mq), Git также может сделать это, я думаю.

4 голосов
/ 28 января 2009

Почему-то у меня складывается впечатление, что вам вообще не следует использовать систему контроля версий. Как было сказано ранее, то, что вы пытаетесь сделать, идет вразрез со всем, для чего вам в первую очередь нужна система контроля версий.

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

4 голосов
/ 27 января 2009

Perforce, как правило, позволяет размещать файлы двумя способами: только в виде ревизии заголовка (то есть у вас будет только одна копия) или во всех ревизиях. В Perforce есть команда облитера уровня администратора, которую можно использовать для удаления ревизий. Вы можете запросить список файлов, возможно, по дате или количеству ревизий, и указать ревизии для команды облитерации. Как следует из названия, облитерация навсегда удаляет ревизии из базы данных, поэтому я всегда генерирую скрипты для этого и проверяю их перед запуском. Если команда облитерации НЕ выполняется с флагом -Y, ​​она сгенерирует список того, что будет стерто, также очень полезно.

4 голосов
/ 27 января 2009

Я не думаю, что есть какая-либо система контроля версий, которая позволяет вам делать это регулярно, потому что это идет вразрез со всеми системами контроля версий.

3 голосов
/ 27 января 2009

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

В этой статье MSDN .

содержится дополнительная информация.
1 голос
/ 30 марта 2010

Я думаю, что вы говорите о чем-то вроде "корзины" AlienBrain, не так ли? Возможность удалить некоторые ревизии из контроля версий. Если вы хотите уничтожить предмет, он обычно называется «уничтожить» и поддерживается рядом систем. Ведра, AFAIK поддерживаются:

1 голос
/ 29 января 2009

Мне кажется, что вам нужна интеллектуальная система резервного копирования, а не контроль версий.

Я использую SyncBackSE ; он позволяет сохранить ряд предыдущих версий, а также может выполнять такие действия, как «игнорировать все файлы, измененные более 30 дней назад».

Это одна из немногих платных программ, которые я использую. Я думаю, что стоит проверить.

1 голос
/ 27 января 2009

Некоторые распределенные системы контроля версий позволяют создавать «контрольные точки», которые позволяют вам использовать эту версию как базовую ревизию и защищают вас от извлечения всей истории перед контрольной точкой при каждой проверке. Таким образом, вы можете удалить большие файлы, создать контрольную точку и извлечь / клонировать репозиторий из этой контрольной точки в новый каталог. Тогда у вас есть новый небольшой репозиторий, но без истории до контрольной точки. Если вам не нужна эта история, вы можете записать старый репозиторий на CD и использовать новый, частичный с этого момента.

Я тестировал только в даркс , и там это работает, но YMMV в зависимости от системы контроля версий и вариантов использования.

1 голос
/ 27 января 2009

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

Например, если у вас зафиксирован файл 1Gig, измените его часть и подтвердите снова, только измененная часть будет сохранена в системе контроля версий.
Не будет использоваться 2Gigs (исходный и новый файл), а будет только 1Gig + sizeOfChanges.

Есть только один недостаток: если вы храните файлы, которые изменяют весь свой контент от ревизии к ревизии, это также может привести к обратным результатам, поскольку изменения занимают почти столько же места, что и оригинальная версия. Архивные файлы являются примером таких файлов, где только небольшое изменение (реального) содержимого может привести к полностью измененному содержимому архивного файла.

Я бы посоветовал протестировать несколько систем управления версиями самостоятельно, с учетом ваших конкретных потребностей и среды и отслеживать каждую на стороне сервера, как меняются требования к хранилищу для каждой системы.

0 голосов
/ 21 мая 2010

Ископаемый позволяет вам сделать это с помощью механизма "избегания". Однако ископаемое, являющееся распределенным SCM, означает, что это не влияет на все хранилища (по очевидным причинам).

...