Skip to content

Instantly share code, notes, and snippets.

Created August 31, 2015 15:35
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
ローカルファイルのタイムスタンプをコミット時刻にして SVN にコミットするスクリプト。文字コードとユーザー名は適当に修正してください。
# coding: Windows-31J
# svn_committer.rb
username = 'hoge'
list = `svn list -R` {|line| line.strip.chomp('/') }
changesets = {}
Dir.glob("**/{.?,[^.]}*", File::FNM_DOTMATCH).each {|path|
next if %r{\.svn(/.+)?$} =~ path
next if list.include?(path)
next if && Dir.entries(path).size > 2
time = File.mtime(path)
if changesets.key?(time)
changesets[time] << path
changesets[time] = [path]
changesets.keys.sort.each {|time|
puts time.strftime('%F %T %:z')
changesets[time].each {|path|
command = %{svn add "#{path}" --parents -N}
puts command
system command
svn_date = time.getutc.strftime('%FT%T.%6NZ')
command = %{svn commit -m "#{svn_date}" --username "#{username}"}
puts command
system command
exit 1 unless $?.success?
revision = `svn update`.lines.last.scan(/\d+/).first.to_i
command = "svn propset --revprop -r #{revision} svn:date #{svn_date}"
puts command
system command
exit 1 unless $?.success?
Copy link

お客様先で SVN を導入したんだけど、既存ファイルのタイムスタンプを保持したいという要望が多かったので、ローカルファイルのタイムスタンプをコミット日時にするスクリプトを書いてみた。
実行前に、リポジトリの pre-revprop-change を変更して、リビジョンプロパティの変更を許可する必要があります。
あと、TortoiseSVN の「ファイルの更新日時を『最終コミット日時』に設定する」にチェックを入れておくと、チェックアウトしたときにファイルのタイムスタンプがコミット日時になります。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment