LoginSignup
21
23

More than 3 years have passed since last update.

ファイルのタイムスタンプをコミット日時に合わせる

Last updated at Posted at 2016-08-01

svnの場合は、 use-commit-time = true でコミットされた時間にファイルのmtimeを合わせることができる。

ここに記載する内容もほぼ全て、以下のページに記載されている。

gitの場合はそういうオプションはないので、スクリプトでサクッと対応することになるが、公式wikiのサンプルスクリプト(perl)に記載があるわりに、それ自体がバージョン管理されていないという矛盾。(wikiなのでページ自体はバージョン管理されているけど…。このサンプルばかりを集めたリポジトリはない。ひょっとしてgit自体に含まれているかと思ったけれど、そんなことはなかった。)

あと、他のツールのサポートスクリプトとして収録されていることも多いみたいで、メジャーなところでは、rsyncサポートスクリプトとして収録されている

そのため、上記wikiの記載をコピペするか、rsyncのサポートスクリプトを利用するか、というのが手っ取り早い。

rsync付属の「git-set-file-times」の導入方法

既にrsyncがパッケージで導入されている場合など

rsyncがインストールされていれば、以下の手順で導入できるんじゃね、という。

コピー -> 展開 -> 実行権限付与
cp -a /usr/share/doc/rsync/scripts/git-set-file-times.gz /usr/bin/
gzip -d /usr/bin/git-set-file-times.gz
chmod +x /usr/bin/git-set-file-times
  • パッケージ由来なので、/usr/bin に入れるのが良いかな、と。
  • ※ ソースコンパイルなどでそのままインストールしてるなら、 /usr/local/share の場合が多い。

Gitで取ってくる場合

git用のスクリプトなんだからgitで取得すれば良いよね、という。

git clone -> コピー -> 削除
git clone git://git.samba.org/rsync.git
cd ./rsync
./support/git-set-file-times
cp -a ./support/git-set-file-times /usr/local/bin/
cd ../
rm -fr ./rsync
  • 別途導入してるんだから、 /usr/local/bin かな、と。

curlで取ってくる場合

curlで放り込んで実行権限付与
curl -kLJR 'https://git.samba.org/?p=rsync.git;a=blob_plain;f=support/git-set-file-times' -o /usr/local/bin/git-set-file-times && chmod +x /usr/local/bin/git-set-file-times

rsync付属の「git-set-file-times」を導入したときの問題。

以下のページで解説されている修正が、rsync版には適用されていない…。

もう何年も前の修正なのに…。

結論

wiki掲載のサンプルをコピペするのがベスト。

どこかに公式的なファイルを置いて欲しい…。
あるいは、rsyncレベルのどこでも入ってるようなメジャーなツールで、上記の最新版を収録したものはないものか。

「コピペがベスト」だと、自動化しづらい…。

Gitのコミットのタイムスタンプについて

追記@￰2017-04-03

rsync版と、git公式wiki掲載版とで分岐進化をしてしまっているようなので、自前でマージした。
https://gist.github.com/mAster-rAdio/642fff6acb79b7a587fb3bce7ee1c9ef

追記@￰2021-03-12

21
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
23