ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Subversionコミュのコミット時のタイムスタンプ更新の抑止?

  • mixiチェック
  • このエントリーをはてなブックマークに追加

前回のトピに続き...

svnで管理を実施する際、
初期登録(インポート時)に、
すべてのタイムスタンプが、コミット時の時刻になってしまいます。

できれば、ファイルのタイムスタンプを維持したまま
コミットを実施したい...としたら方法はあるのでしょうか??


ご教示いただけたら幸いです。

----------------------------------

たぶん、プロジェクトによっては
すでにリリースの済みのソースなどを
保守・管理するケースがあるはず。

あるとき、急遽SVNを使用して、管理をしてほしい
といわれたらどうしますか?

(開発者としては、何も編集を加えてないのに、
タイムスタンプが更新されたら快く思わないはず..)

コメント(20)


>Amlaidさん

返信ありがとうございます。
上記対応では、

  ○エクスポート/チェックアウトする際のタイムスタンプが、コミットされた時間を維持する

だけに見えますf^^;
仮に、古いファイルで上書きして、コミットした場合、
そのファイルのタイムスタンプは、古いままリポジトリに残りますか?

(少なくとも、私の環境では、できませんでした。...設定漏れ?)




> 2 batayanさん
あまり詳しくないのにコメントしてすみません。
私も先日、タイムスタンプが一律に設定されてしまう事に悩んでいたもんで……。
明日職場で試してみます。
1番コメントはトンチンカンな事を書いているので、削除しました。
use-commit-times をきちんと理解していなかった様です。
> (開発者としては、何も編集を加えてないのに、
> タイムスタンプが更新されたら快く思わないはず..)

何の変化もないのにリビジョンが変わっていたら混乱を招きますが、
個々のワークディレクトリの中のタイムスタンプごときは、どうでもよい無駄情報です。
大事なのはリポジトリーに記録されている情報です。

>sock/vuelaさん

コメントありがとうございます。

>大事なのはリポジトリーに記録されている情報です

とコメントされてますが、
これは、バイナリのことをさしてますか?
タイムスタンプも立派な情報で、
その情報が書き換わるのを快く思わない人もいます。

タイムスタンプなんて、ちょいと小細工すればいくらでも編集可能なのは承知です。
ただ、現実的に
[既存の資産のタイムスタンプがすべて置き換わってしまうから、svnは使用したくない]
という人もいます。

どうでもよい無駄情報ならば、無駄に変更させない
という考えも有りだと思います。

で、svnでそんな方法があったらより便利だなと思って質問させていただきました。
ご教示いただけたら、幸いです。
svnadmin dumpしてみるとわかりますが、
Subversionのリポジトリは個々のファイルのタイムスタンプを覚えていません。
リポジトリが保持する時刻は、コミット時刻のみです。
ですので、Subversion単体で時刻を覚えさせるのは原理的に不可能です。

別の方法としては、独自のsvnコマンドのラッパープログラムを作成し、
以下のような機能を持たせることが考えられます。
・import, add, commitなどの際に、プロパティに時刻を記録(propsetも一緒に実行)
・update, exportなどの際に、プロパティから時刻を復元(propgetした結果をファイル時刻に反映)
もちろん、常にラッパープログラムを使うことが前提になりますし、ちょっと作り込みが必要でしょうが。
> ただ、現実的に
> [既存の資産のタイムスタンプがすべて置き換わってしまうから、svnは使用したくない]
> という人もいます。

そう思うならそれでいいんじゃないですか?
現状の関係者のポリシーとsvnのポリシーが相互に全否定し合っていて、
使えば問題が発生して、使わなければその問題が発生しないのだから、
解決策は絞られているはずですよ。

タイムスタンプを属性としてリビジョン管理の対象にしたら大変。
内容に変化がないのにタイムスタンプという属性値が変化しただけで
commit可能になって新しいリビジョンが割り当てられたら無駄にリビジョンが進むし。
マージしたら「最後にcommitしたときの元ファイルを最後に変更した日時、
すなわちタイムスタンプ」は多次元の情報になってしまうので、
updateした際に妥当な値をローカルに書き込むことができないか、
さもなくばマージ時にコリジョン発生になって
日時情報のマージは手作業でやってもらうことになるか。

svnにタイムスタンプ情報もリビジョン管理させたら運用が大変そうだけど、
それでもそんな需要があるために昔から要求は上がっている。
それらが今のところことごとく却下され続けられている歴史があるので、
当面は期待できないと予想しています。
svn以外を検討してみてはいかがですか?
> svn以外を検討してみてはいかがですか?
まぁ、ポリシーを変えるか、これになりますね。
ただ、要求を満たせるソフトを知りません。
Subversion以外の多くのバージョン管理ソフトも同じでしょう。


以下は、ラッパーをもし作るなら・・・ですが、

> 内容に変化がないのにタイムスタンプという属性値が変化しただけで
> commit可能になって新しいリビジョンが割り当てられたら無駄にリビジョンが進むし。
想像ですが、タイムスタンプが大事ってことは、これでいいと思ってるんでしょう。
ほかのプロパティ(svn;executableとかsvn:mergeinfoとか)の変更時も、内容が変わっていないのにコミットすることになりますし。それらと同列に扱ってるだけと。

> さもなくばマージ時にコリジョン発生になって
> 日時情報のマージは手作業でやってもらうことになるか。
これもあまり細かく考えてないですが、ポリシー次第ではうまくいきそうな気がしますし、
タイムスタンプが大事と考えるなら、マージが発生するような運用はしない気がします(Subversionを単なる便利なファイルストアとみている気がする)。
うまくいかなくても、最悪コリジョンでいいと思います。
結局何をしたいのかだと思いますが…。開発者が快く思うかどうかが優先事項なのであれば、そうすればいいし、subversion を導入して解消したい何かが優先事項なのであれば、そちらを優先で。
「既存の資産のタイムスタンプがすべて置き換わってしまうから、svnは使用したくない」というヒアリングは踏み込みが足りません。タイムスタンプが変わって何が不都合なのかまで聞き出さないと、どうにもならないでしょう。
個人的には、興味本位で何が不都合なのか知りたいところ。
# 私自身は使っていて不都合がないので…。

皆様、返信ありがとうございます。


>Nazyさん

そうですねdumpしてみると
タイムスタンプの情報はないですね...
やはり、本格的にタイムスタンプを維持させるとしたら、
つくりこみが必要になりそうということですね...

ご指摘のとおり、現状のプロジェクトでは
[便利なファイルストア]要素が強いです。
(マージ発生のケースはほぼ、ありません...)

# svn経験者が殆ど皆無で、若干の経験者も
# tag/branchなどを理解してない人だったので,,,
# (僕も人のこといえませんが...)

>sock/vuela さん

本当なら、
[タイムスタンプが気になるなら、svnの
ポリシーとあってないので使用をおススメできません]
とバサッと別案を検討してしまうのが良いと思います。


rcsは存じませんが、cvsは使用しましたが、タイムスタンプの維持はできなかった気がします。

# リポジトリとは別にマスタを用意しておいて(マスタの全量をインポートする)、
# コミットされた資産のみをpostcommitでマスタに反映させて...ということはやったことありますが、
# あまり意味がなかった記憶があります ... (恥)

>Kawaiさん

>タイムスタンプが変わって何が不都合なのか

これがポイントで、周りの人(上司含めて)に
確認したのですが、皆が声をそろえるのが
[なんとなく、嫌だ]なんです。

# この「なんとなく」..というのを聞きだせないとダメなんでしょうね。
(タイムスタンプが変更されてしまうと、バイナリレベルで何か手が入ったのでは?
という疑いをもってしまうのだそうです...逆に、タイムスタンプが一致していると
それはソース/モジュールに何も手を加えられていないという目安になるそうです...
[聞いた瞬間、本当?と疑いをもってしまいましたf^^;])

# ちなみに、僕もsvnではタイムスタンプが維持されないと知ったときはビックリしましたが、
# 実際使用してみると、不都合は殆どありません。
# あまり使ってないようです...


> ご指摘のとおり、現状のプロジェクトでは
> [便利なファイルストア]要素が強いです。
> (マージ発生のケースはほぼ、ありません...)

では、何を求めてsvnを選ぼうとしているのかが謎になりますね。
ひょっとすると要求に合うものは違う種類のシステムかもしれない。
> バイナリレベルで何か手が入ったのでは?

diff 知らない人達なの?

>sock/vuelaさん

要求としては、

?ファイルの変更履歴を管理し、1チーム内で、
資産の登録の際にデグレなどが発生しないようにしたい。
?人的管理だけでは大変なので、何かしらの履歴管理ソフトを導入する。

だと思っています。
(何でsvn?と聞かれると、とても返答に困ります..)

# これだけだと、cvsだろうが、他の履歴管理システムだろうが
# 何でも良いのでは...と思われそうですが...


>HTPさん

もちろん、diffぐらいは知ってるはずです。
単にファイル/モジュールの妥当性をみるときに
まずは、1にタイムスタンプ、2にバイナリとみる人が多く、

タイムスタンプが自分以外の人に変更されるのは、
気持ちが悪いといわれます。
バイナリは管理対象外にしてしまうのは(^^ゞ

冗談はさておき、
新規に登録していくぶんはタイムスタンプは正しい(?)はずなので、
既存の分は我慢してもらえないのですかね?

今までの分はどのようにバージョンを管理していたのでしょう?
リリースしたバージョン毎に、フォルダーにコピーを取っていたとか、
そういう方法ですか?
複数人でリポジトリーを共有する作業に向いてない集団になってますね。
タイムスタンプの変化を知ってファイル内容の変更があったに違いないと直感したり、
タイムスタンプの変化がないことを知ってファイル内容に変化がないはずだと思い込んだり。
その手のおかしな憶測と現実とが一致していることを好み、
その好みに合う環境で暮らすことで
現実がおかしな憶測の妥当性を支持しているかのような幻覚を見て
価値観を強めるような悪循環になっている。

変化があったのか本当のことを知りたければ、
svnやdiff等のツールに問い合わせて真相を直視しなければならないわけで、
記憶の中のタイムスタンプと現在見えるタイムスタンプとを比べて
余計な憶測から変化の有無を予想してはいけないのです。
すなわち各所に散らばるワークディレクトリ上のファイルの
タイムスタンプは役立たずの無駄情報だと認識することがあらかじめ必要。

凝り固まった価値観を破壊するのは手間隙がかかりますよ。
とりあえず既存のファイルはしばらく諦めて、
何か違う新規のファイルに対して最初からsvn管理することから始めてみてはいかが?

>マクセル-323Fさん

>既存の分の我慢

現状のプロジェクトでは、
?一度既存全量をインポート
?インポートした資産を一旦エクスポート
(この時点でタイムスタンプは更新されている)
という行為を実施し、どれも差分ないことを
確認したうえで納得してもらってます(当然ちゃ当然ですが...)。

今までは、まさしくリリースしたバージョン毎に、フォルダーにコピーを取っていました。
これだと、バグが発生した場合、1ファイルだけを修正し差分提供したとしても
そのリリースした時点の全量を持っとく必要があり、とても容量が間に合いません。

その点、svnではリリースした時点のリビジョンを記録しとけば、
復元が簡単なので、とても楽です。
svnはファイルを管理するソフトウェアではなくて、
ディレクトリ以下の全体の変化・差分を集めて管理するソフトウェアなので、
後者を期待して前者を期待しないなら有用ですが、
その前提が違っていたら何かと期待はずれになるのは仕方ないです。

返信が遅れてしまって、申し訳ありません

>sock/vuelaさん

>>複数人でリポジトリーを共有する作業に向いてない...

ご指摘は最もだと思います。
その背景に以前の運用方法などが関係あるのか、
個人のポリシー(固定観念)の問題なのか...
原因を考えるとキリがないと思います。

プロジェクトのポリシーと
バージョン管理システムのポリシーが
マッチするのなら、本当に便利だと思うので、
使用したいと思います。
(すこし落ち着いて考えると、ワーク上のタイムスタンプは
無駄情報であることがわかるんですけどね...)

>ファイルを管理するソフトウェア/ディレクトリ以下の全体の変化・差分を集めて管理するソフトウェア

たしかに、svnは後者ですね...
(この前提は、人によって勘違いしてる人が多数でした...
snv使い始めは、ファイルaのリビジョンとファイルbのリビジョンを別々に管理しろ
などという要望もありました。

ログインすると、残り1件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Subversion 更新情報

Subversionのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング