Подводные камни автоматического управления версиями файлов?

StackOverflow https://stackoverflow.com/questions/1323260

Вопрос

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

$basename = pathinfo($filename, PATHINFO_BASENAME);
$fname = pathinfo($filename, PATHINFO_FILENAME);

 while (filenameExists($basename)) {
     //look for existing -vnnnn (at end of file name)
     if (versioningExists($fname)) {       
         //roll number ahead, set bates number
     } else {
         //start bates numbering at 1    
     }
     //insert bates version number (str_pad)
 }

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

Мои вопросы таковы:

  • Каковы потенциальные проблемы при использовании подобной системы нумерации?
  • И какие существуют альтернативы для работы с управлением версиями имен файлов?

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

Это было полезно?

Решение

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

Временная метка имеет дополнительное преимущество: она снижает вероятность того, что кто-то загрузит файл, имя которого уже похоже на номер вашей версии, например bob_321235678.jpg, по сравнению с bob_1.jpg.

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

Другие советы

Альтернативный подход
Могу ли я предложить изучить настоящую систему управления версиями, такую как subversion, в качестве прозрачного бэкэнда?Вы могли бы использовать svn-хукеры для автоматизации коммитов и так далее.Возможно, это было бы проще и надежнее.

Тот самый Глава "Автоверсия", посвященная подрывной деятельности документ может стать хорошей отправной точкой для этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top