Gitではタイムスタンプ(Timestamp)を保持しないらしいです。
今回、Gitでタイムスタンプをコミット時に変更する方法を調べてみました。
Gitではタイムスタンプを持たない
Subversionでは、
use-commit-times=true
というのがあって、コミット時のタイムスタンプを利用できます。
一方、Gitでは、調べる限りタイムスタンプを保持していないので、このようなオプションは存在しないらしいです。
ただ、
$ git log
では履歴を表示出来るので、なんとかスクリプトを作って対応してみたいと思います。
Git Bash文字化け対策
Git Bashでは日本語が文字化けするので、まず文字化け対策をします。
(1) Git Bashでlsコマンドの日本語文字化け対策
以下の方法は、
にもまとめました。
Git Bashを立ち入力して、以下のコマンドを順番に入力することで、ホームディレクトリに.bashrcを作成します。
(Git Bashの画面で)
$ cd ~
$ touch .bashrc
その後、上記で作成したファイル
.bashrc に ls のエイリアスを記述しました。
(ファイル .bashrc に以下を記述)
alias ls=’ls –show-control-chars’
(2) Git Bashの日本語設定
Git Bashを立ち上げて、以下のように入力します。
(Git Bashの画面で)
$ git config –global core.quotepath false
これでもまだ問題があって、
$ git archive master -o aaa.zip
とかすると、zipファイルの中の日本語ファイルは文字化けするようです。
TortoiseGitではzipファイルにアーカイブするので、日本語は文字化けしてしまいます。
この対策はよくわからないので、取りあえずは、zipファイルにarchiveしないようにします。
Gitリポジトリのタイムスタンプを設定するシェルスクリプト
$ git clone
を実行した直下のフォルダにて以下のシェルスクリプトを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash # # Set timestamp of all files to original one in this repository git config --global core.quotepath false for FILE in $(git ls-files); do TIME=$(git log --pretty=format:%ci -n1 $FILE) echo $TIME'\t'$FILE STAMP=$(date -d "$TIME" +"%y%m%d%H%M.%S") touch -t $STAMP $FILE done |
$ git ls-files
$ git log –pretty=format:%ci -n1
で、そのファイルのコミット日付を取得しています。
まとめ
Gitの内部仕様としてタイムスタンプを保持しないのは理解するとしても、コマンドラインからデフォルトでこれぐらいのオプション用意して欲しいなぁ。
Gitについてのおすすめの本
↓Gitについてのおすすめの本はコチラ
コメント