代码之家  ›  专栏  ›  技术社区  ›  jjclarkson Andy Rose

自动文件版本控制的陷阱?

  •  0
  • jjclarkson Andy Rose  · 技术社区  · 15 年前

    bates numbering 如果存在同名文件。我想在文件名和扩展名之间插入一个“-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)
     }
    

    我的问题是:

    • 使用这样的编号系统有哪些潜在问题?
    • 处理文件名版本控制有哪些替代方案?

    2 回复  |  直到 15 年前
        1
  •  1
  •   catfarm    15 年前

    在过去,我总是在文件扩展名之前加上mktime()的结果(当系统上已经存在该文件名时)。不需要解析当前的版本号,您还可以在文件名中添加一个很好的时间戳,这样您就可以知道哪一个是最先出现的,以及它是何时创建的。如果您担心其他人可能会在服务器上的同一秒保存同一命名文件,则可以在保存之前检查包含时间戳的文件。如果这确实是一个问题,您可能也应该对您的系统执行相同的操作,增加数字,然后再次检查是否已经存在具有该名称的文件。

    所有这一切的一个缺点是,您可能会得到一堆或多或少相同但名称不同的文件,因此您可能希望定期解析这些数据,查找系统中未使用的文件。

        2
  •  0
  •   drAlberT    15 年前

    替代方法
    我是否可以建议探索一个真正的版本控制系统,将subversion作为一个透明的后端? 您可以使用svn钩子来自动化提交等等。也许这会更简单、更健壮。

    这个 "Autoversioning" chapter on the subversion doc可能是一个很好的起点。