Позволяет ли какая-либо система контроля версий, такая как SVN, Git или Mercurial, «сохранять последнюю версию», но не ревизии?(например, для двоичных файлов) - PullRequest
10 голосов
/ 14 июня 2010

В наших файлах проекта, если есть бинарные файлы, такие как .doc, .xls, .jpg, и мы решили не сохранять свои прошлые ревизии (достаточно сохранить только последнюю версию), есть ли способ сказатьSVN, Git, или Mercurial, или какой-либо другой инструмент, чтобы пропустить ревизии для этих файлов или для конкретной папки?

Скажем, есть файл .doc 4 МБ, который мне нужно проверить сотни раз, но яна самом деле не особо заботятся о его прошлых версиях.Таким образом, если система хранит 100 ревизий, это уже 400 МБ ... проверка 300 раз означает 1,2 ГБ для 1 файла, и это не хорошо.Только последняя версия хороша, так что каждый может синхронизироваться с ней.Кроме того, я не хочу, чтобы другие люди проверяли проект и должны были проверить 20 ГБ материала.(Git и Mercurial сохранят все ревизии в локальном репозитории каждого человека?)

Ответы [ 10 ]

17 голосов
/ 14 июня 2010

Обратите внимание, что это не совсем ответ.

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

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

Например, в Mercurial я попытался сделать следующее: сначала я скачал спецификацию языка C # 3.0в виде файла слова из этого URL: http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc

Затем я отправил это в свежий репозиторий Mercurial.Размер до фиксации (пустой репозиторий) составлял 80 байт, размер файла на диске - 2,387,968 байт, а репозитория после фиксации - 2,973,696 байт.Обратите внимание, что файл теперь эффективно сохраняется дважды, один раз в моей рабочей копии (той, которую я могу редактировать), и один раз в моем хранилище как часть моего начального коммита.

Затем я открыл файл и изменил всевхождения 3.0 с 4.0 (без кавычек) и все вхождения C# с VB и сохраненные.Затем я передал новую версию с однобуквенным комментарием.Размер репозитория после коммита теперь составляет 3.497.984 байта.Разница составляет 512 КБ (в хранилище задействована некоторая порция, поэтому размер равен точному 512 КБ.)

Если я снова открою файл, измените только титульную страницу VB обратно на C #, сохраните иПри повторной фиксации размер репозитория увеличивается на 276 КБ, до 3.780.608 байт.

Как видите, изменения не фиксируют полную копию файла, но предоставленные различия не заключаются влибо диапазон «10 КБ».

Предположим, что средний размер каждого различий, для одного только этого файла, будет несколько промежуточным, скажем, в среднем до 50% между двумя значениями.Это означает, что в этот файл было внесено 300 изменений, что в среднем составляет 394 КБ и составляет 115 МБ. Это не много

Я предлагаю следующее:

  • Хватит дешевизны, дисковое пространство дешевое, по сравнению с головной болью, которую вы будете иметькогда кто-то говорит: «Мне бы очень хотелось знать, как выглядел этот файл на прошлой неделе, прежде чем вы его испортили».
4 голосов
/ 14 июня 2010

Быстрая проверка цен на жесткие диски приводит к тому, что 1 терабайт (ТБ) внутреннего диска стоит около 75 долларов США каждый.Используя вашу математику, это 250 000 копий вашего файла размером 4 МБ, или 0,0003 долл. США за копию.Типичные накладные расходы для программиста на час составляют около 100 долларов.

Что стоит дороже: сохранить все версии этого файла или заплатить программисту за воссоздание более старой версии, если вам когда-нибудь понадобится эта копия снова?

3 голосов
/ 14 июля 2010

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

Это Visual Sourcesafe.Установите флажок «хранить только последнюю версию» в файле, и он перестанет хранить историю.

Если вам нужна эта функция с приличным SCM, я бы рекомендовал вообще не помещать файл в SCM, а хранить егов другом месте, например, в решении для управления документами или даже просто в общей файловой системе.

3 голосов
/ 14 июня 2010

Это не работа для VCS, а для файловой системы, как сказал Кен.

Однако, если вам действительно нужна такая «функция», вы можете использовать механизм hooks , чтобы удалить из истории предыдущие (скажем, старше 3 коммитов) версии файла.

2 голосов
/ 31 мая 2013

Perforce может сделать это за вас.

Проверить типы файлов:

+ S Сохраняется только ревизия головы. Старые ревизии удаляются из хранилища после отправкиновые редакции.Полезно для исполняемых файлов или файлов .obj.

-or-

+ Sn Сохраняются только самые последние n ревизий, где n - это число от 1 до 10 или 16, 32, 64, 128, 256 или 512. Старые версии удаляются из хранилища после отправки более чем n новых версий или если вы измените n + существующего файла + Sn на число, меньшее его текущего значения.Подробнее см. Справочник команд.

2 голосов
/ 14 июня 2010

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

менеджер хранилища (который является более продвинутым решением, чем простой общий путь в файловой системе) - это то, что вы ищете.
(Например, Nexus Sonatype , чтобы упомянуть только один)

1 голос
/ 21 февраля 2011

Почему бы не использовать SVN для двоичных файлов и DVCSS для всех исходных файлов? Таким образом, вы сохраняете все ревизии на стороне сервера, но только одну копию на стороне клиента. А для других источников вы получаете преимущество наличия реальной VCS.

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

1 голос
/ 14 июня 2010

В общем, нет: VCS предназначен для хранения всей истории.Однако не все потеряно на космическом фронте;все системы, которые вы назвали, будут хранить бинарные различия для каждой ревизии, а не полную копию всего файла.Это означает, что требуемое пространство часто будет намного меньше.

1 голос
/ 14 июня 2010

Основная ответственность систем контроля версий - вести историю изменений, поэтому я не думаю, что это возможно. Зачем использовать контроль версий, если вам нужна только последняя версия?

0 голосов
/ 14 июля 2010

Если все, что вам нужно - это синхронизировать файлы между компьютерами, используйте Dropbox .

Если вы используете контроль версий, посмотрите, что написал Лассе В. Карлсен, дисковое пространство дешево.

...