我的团队维护着大量基于PHP / MySQL的软件,该软件当前使用svn进行版本控制。
我现在将其移植到git,但这对我们的更新过程造成了问题,我不确定如何解决。
我们的项目有一个自动更新程序,可以将本地安装从svn存储库更新到最新版本,它基本上使用def subset_sum(numbers, target, partial=[], partial_sum=0):
if partial_sum == target:
#print("partial_sum")
#print(target)
yield partial
if partial_sum >= target:
return
#print(*enumerate(numbers))
print(*partial)
for i, n in enumerate(numbers):
#print(i)
remaining = numbers[i + 1:]
yield from subset_sum(remaining, target, partial + [n], partial_sum + n)
list(subset_sum([1, 2, 3, 7, 7, 9, 10], 10))
以及其他一些无关的操作。我已经将其移植到svn update
等上,这很容易。
困难在于我们的数据库结构/数据修补。
现在,如果开发人员需要更新数据库架构或对现有数据库进行任何形式的操作以使其更新,则可以创建补丁文件。提交时,此修补程序文件已手动编号,与 next svn修订版本号一致。因此,如果要提交包含补丁程序的更新,请检查svn日志中的最新修订号,例如104,然后将补丁程序命名为“ patch_105”。然后,自动更新程序将运行git pull
,并应用它发现的比上次安装的版本新的任何补丁。
流程如下:
现在移动到git会带来一个问题,因为git无法在修订版号上运行,因此顺序修补系统无法以这种方式工作。我知道我们可以通过运行svn update
来大致获得内部版本号,但是使用分支等意味着我不确定是否可以保证下一个内部版本号是什么。
也许可以通过补丁文件的提交哈希来命名补丁文件,但是更新程序无法轻松了解补丁程序的序列以及2个不同版本之间需要应用的内容。我们也许可以存储已经运行的内容,但是通常需要运行补丁才能提交它们,所以这可能也不够。
总而言之,您的项目中是否有与此类似的更新过程?如果是这样,您如何处理此问题?我应该以一种完全不同的方式来思考这个问题吗?
谢谢!