Ruby 如何将版本历史从Serena维度导出到Git?

Ruby 如何将版本历史从Serena维度导出到Git?,ruby,git,serena,Ruby,Git,Serena,我在Serena Dimensions有一个存储库;我需要将它迁移到Github。我发现我需要使用git fast import,但我面临的问题是Serena Dimensions repo的元数据。如何从Serena维度导出元数据 注意:我已经更新了下面的答案,如果您觉得有用,请向上投票。这是ruby脚本 #!/usr/bin/env ruby $stdout.binmode $author = "" $date = "" require 'spreadsheet' book = Spre

我在Serena Dimensions有一个存储库;我需要将它迁移到Github。我发现我需要使用git fast import,但我面临的问题是Serena Dimensions repo的元数据。如何从Serena维度导出元数据

注意:我已经更新了下面的答案,如果您觉得有用,请向上投票。

这是ruby脚本

#!/usr/bin/env ruby

$stdout.binmode
$author = ""
$date = ""

require 'spreadsheet'
book = Spreadsheet.open('Metadata.xls')
sheet1 = book.worksheet('Sheet1') # can use an index or worksheet name
sheet1.each 1 do |row|
break if row[2].nil? # if first cell empty
    $author = row[2] + " <email@domain.com>"
break if row[5].nil?
    $date = row[5]
#puts row.join(',') # looks like it calls "to_s" on each cell's Value
end

$marks = []
def convert_dir_to_mark(dir)
if !$marks.include?(dir)
    $marks << dir
end
($marks.index(dir)+1).to_s
end


def convert_dir_to_date(dir)
if dir == 'current'
    return Time.now().to_i
else
    dir = dir.gsub('back_', '')
    (year, month, day) = dir.split('_')
    return Time.local(year, month, day).to_i
end
end

def export_data(string)
print "data #{string.size}\n#{string}"
end

def inline_data(file, code='M', mode='644')
content = File.read(file)
puts "#{code} #{mode} inline #{file}"
export_data(content)
end

def print_export(dir, last_mark)
date = convert_dir_to_date(dir)
mark = convert_dir_to_mark(dir)

puts 'commit refs/heads/master'
puts "mark :#{mark}"
puts "committer #{ $author } #{ date } -0700"
export_data("imported from #{dir}")
puts "from :#{last_mark}" if last_mark

puts 'deleteall'
Dir.glob("**/*").each do |file|
    next if !File.file?(file)
    inline_data(file)
end
mark
end


# Loop through the directories
last_mark = nil
Dir.chdir(ARGV[0]) do
Dir.glob("*").each do |dir|
    next if File.file?(dir)

    # move into the target directory
    Dir.chdir(dir) do
        last_mark = print_export(dir, last_mark)
    end
end
end
#/usr/bin/env ruby
$stdout.binmode
$author=“”
$date=“”
需要“电子表格”
book=Spreadsheet.open('Metadata.xls')
sheet1=book。工作表(“sheet1”)#可以使用索引或工作表名称
表1.每行1个do|
如果行[2]为空,则中断?#如果第一个单元格为空
$author=行[2]+“”
如果第[5]行为空,则中断。是否为零?
$date=行[5]
#放置行。join(“,”)#看起来像是对每个单元格的值调用“to_s”
结束
$marks=[]
def将_dir_转换为_标记(dir)
如果$标记。包括?(目录)

$marks还有另一种方法可以做到这一点——使用Git-SVN和CM-SVN桥。 使用这种方法,您应该能够使用git客户端访问Dimensions服务器。
有关详细信息,请查看此链接:
此外,Serena论坛上的这个帖子可能会很有用:

更新

14.3.3中有一个新特性,使操作更简单

  • 尺寸CM Git连接器
  • 尺寸CM Git连接器

这次迁移成功了吗?从中吸取的教训值得分享吗?谢谢,我成功地迁移了存储库。请确保您正确获取了有关以前作者和提交日期的信息,否则您将需要多次执行迁移。您好@sameer您在历史记录(示例)中是否还有此信息要共享?我相信深入到维度和git fast import这两个方面需要一些时间,呵呵:)您是否保存了提交和分支的历史记录?提前谢谢。@IliaShakitko示例代码太长了,所以将其作为答案发布。如果有帮助,请将问题向上投票,并将答案标记为正确答案。@Sameer,您是如何生成Metadata.xls的?我有Dimensions客户端,但无法确定如何导出数据。不幸的是,指向CM 14.2新功能的链接(不再)起作用了。是的,看起来该页面消失了。但从那时起,新的可能性出现了,例如,CM Git连接器可以用于这一目的。