如何将Serena Dimensions的版本历史导出到Git?

5
我有一个存储库在Serena Dimensions中,需要将其迁移到Github。我已经想到使用git-fast-import,但我面临的问题是Serena Dimensions存储库的元数据。如何从Serena dimensions导出元数据?
注意:我已经更新了下面的答案,请在有用的情况下投票支持。
2个回答

4

以下是 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

我把我的Dimensions元数据导出到一个名为'Metadata.xls'的电子表格中。然后通过运行脚本从中读取数据并导入Git。


你成功地完成了这个迁移吗?有什么值得分享的经验教训吗?谢谢。 - A_Di-Matteo
是的,我成功地迁移了代码库。确保你正确获取之前作者和提交日期的信息,否则你将需要多次进行迁移。 - tRuEsAtM
@Sameer,你是如何生成Metadata.xls的?我有Dimensions客户端,但一直无法弄清楚如何导出数据。 - BPaasch
@BPaasch 有成功了吗? - tRuEsAtM
@Sameer,一点也不。我能够登录到Web客户端,但没有找到任何下载文件夹、项目或流元数据的选项。 - BPaasch
显示剩余5条评论

3
还有另一种方法可以实现这个——使用 Git SVN 和 CM SVN Bridge。采用这种方法,您应该能够使用 git 客户端访问 Dimensions 服务器。
请查看此链接以获取详细信息: CM 14.2 新功能:使用 Git 客户端访问 CM 服务器
此外,Serena 论坛上的这个主题可能会有所帮助: 将 Dimension 存储库迁移到 git

更新

在 14.3.3 中有一个新功能,可以更加简单地实现。


1
很遗憾,CM 14.2新特性的链接不再有效。 - Juergen
是的,看起来那个页面已经消失了。 但是现在出现了新的可能性,例如Dimensions CM Git Connector可以用于这些目的。 https://www.serenacentral.com/blogs/entry/dimensions-cm-git-connector-getting-started-tutorial http://help.serena.com/doc_center/cm/ver1433/dmcm_git_connector_guide.pdf - Chupik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接