感谢@stuart让我走上正轨。我使用的过程有点冗长,但我认为我有正确的结果。
首先,我创建了一个包含SVN链接到我的标签“父”文件夹(那些包含版本编号的标签。)我处理该文件创建另一个包含路径包含在每个那些父母的文件:
#!/usr/bin/python
import os
f = open('parents')
parentPaths = [x.strip('\n') for x in f.readlines()]
f.close()
for parentPath in parentPaths:
escapedPath = parentPath.replace('\\','\\\\').replace('/', '\\/').replace('&', '\\&')
c = "svn ls '" + parentPath + "' | sed -e 's/\\(.*\\)/" + escapedPath + "\\/\\1/' >> paths"
os.system(c)
接下来我SVN版本号为每个使用该脚本的路径:
#!/usr/bin/python
import os
f = open('paths')
ps = [ x.strip('\n') for x in f.readlines() ]
f.close()
for p in ps:
branchName = p.replace("svn://myrepo/tags/", "").strip(" ").rstrip("/\n").replace("/", "-").replace(" ", "-").replace(")", "").replace("(", "").lower()
eBN = branchName.replace("\\", "\\\\").replace("/", "\\/").replace("&", "\\&")
c = "svn log '" + p + "' --stop-on-copy -l 1 -v | grep -E '\\(from .*:[0-9]+\\)$' | sed -e 's/.*(from .*:\\([0-9]*\\))$/\\1/' >> revs/" + eBN
os.system(c)
一个标签可能包含几个SVN的日志修订条目,所以我被改写的上述输出到一个名为单个文件转速.out:
#!/usr/bin/python
import os
o = open('revs.out', 'w')
for filename in os.listdir('revs') :
f = open('revs/' + filename)
l = [ x.strip('\n') for x in f.readlines() ]
f.close()
o.write("{0} {1}\n".format(max(l), filename))
o.close()
这包含,例如:
4073 myproject-version-1.12.44
6982 myproject-version-1.13.9
下位变得有点棘手。大部分标签都在主干上,我得到了git的承诺裁判对于那些像这样(在一个git回购运行):
#!/usr/bin/python
import os
f = open('../svn/revs.out')
revs = [ x.strip('\n').split(' ') for x in f.readlines() ]
f.close()
for rev in revs:
r = rev[0]
n = rev[1]
c = "git log --all --grep '[email protected]" + r + " ' --pretty=format:%H | sed -e 's/\\(.*\\)/git tag " + n + " \\1\\n/' >> ~/src/svn/genTags.sh"
os.system(c)
其他变量从树枝制成,或由夹在树干层次,或在'标签'层次结构中创建新文件夹时创建的空标签。这些情况我几乎是手动处理的。
此时的结果是一个本身会创建git标签的脚本。这里是摘录:
git tag project1-1.2.0.2 86e0f47f37ee28a3b16be26e4ab81a39a24015aa
git tag project2-1.1.0.2 9cefabc1e8e66e974bb3d987a1089027535c8562
git tag project2-1.1.0.8 1d3e9abe6f4ec440806d32ed60ae80a2568778eb
然后我运行脚本来创建标签。
非常感谢您指点我正确的方向。有大约450个标签生成,我不得不想出一个脚本化的解决方案,并且我已经添加了一个答案的细节。 – RobH 2012-01-04 11:06:27