ファイルの自動バージョン管理の落とし穴?
-
19-09-2019 - |
質問
ファイル管理システムに取り組んでおり、次のような自動バージョン管理を組み込みたいと考えています。 ベイツナンバリング 同名のファイルが存在する場合。ファイル名と拡張子の間に「-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)
}
正規表現パターンを使用して、バージョン管理が存在するかどうかを確認したいと考えています。
私の質問は次のとおりです。
- このような番号付けシステムを使用すると、どのような潜在的な問題が発生するのでしょうか?
- そして、ファイル名のバージョン管理に対処するための代替手段は何でしょうか?
私はこれを一括インポート システムにするつもりなので、必要がない場合でもユーザーに一意のファイル名を与えるよう要求したくありません。また、他のバージョン管理スキームの選択を含めるオプションもあります。私のシステムにはタグがあるため、ファイル名の重要性は低下していますが、それでもある程度の重要性はあると思います。
解決
過去に私はいつもちょうどmktime関数の結果にタックしている()は、ファイル拡張子の前に(とファイル名がすでにシステム上に存在する場合)。現在のバージョン番号を解析する必要はありません、あなたが最初に来て、それが作成されたときにどれ伝えることができるので、あなたも素敵なタイムスタンプがファイル名に追加されます。あなたが他の誰かが、サーバー上のまったく同じ秒で同じ名前のファイルを保存可能性が心配されている場合は、保存する前に含まれるタイムスタンプを持つファイルを確認することができます。それが本当に懸念される場合は、おそらく数まで、同様にあなたのシステムで同じことを行う必要があり、その名前のファイルが既に存在するかどうかを確認するためにもう一度チェックします。
のタイムスタンプは、はるかに低い誰かがすでにインスタンスのバージョン番号、bob_1.jpgに比べbob_321235678.jpgに似た何かをという名前のファイルをアップロードされているという利点もあります。
このすべて1つの没落は、あなたがそのデータを定期的にないシステムで使用中のファイルを探して解析することもできますので、あなたは、多かれ少なかれ同じですが、異なる名前であるファイルの束で終わることができています。
他のヒント
の代替アプローチの
私は透明のバックエンドとしてSubversionの真バージョン管理システムを模索し提案することができますか?
あなたはその上のコミットとを自動化するためのsvnのフックを使用することができます。多分これはシンプルでより堅牢になります。