从Accurev到Git的源代码控制迁移(.net)

时间:2015-06-15 06:20:38

标签: .net git version-control accurev

目前我们有一个大项目,大约10GB(包括dll),可能大约5GB,没有dll,在Accurev中,获取/升级/推广等都很慢......

我们正在考虑迁移到GIT,但最大的问题是它是一个巨大的整体加上它的结构方式,我们有一个DEPOT用于所有项目。我们有一个LIBRARY文件夹,其中构建了所有项目,而不是bin文件夹,因此可以共享库引用。每个库都构建到该LIBRARY文件夹,并且所有项目间引用都引用LIBRARY文件夹中的dll。

我们如何开始将项目分块并迁移到GIT?我正在考虑建立一个内部NUGET服务器并首先将它们放在当前的公共库中,然后将它们放在GIT上......然后慢慢迁移其他库,每个仓库拆分项目,而不是像现在这样的单个仓库(仓库)。 p>

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以使用我编写的脚本ac2git将您的repo转换为git,但可能需要一段时间。

转换后,你可以使用git filter-branch --subdirectory-filter将转换后的monolith git repo分成每个项目的git repos。

它应该可以工作,但可能会很慢。

或者,如果你想要它,你可以修改我的脚本来做你想要的。您只需要确保它在您转换回购时对您感兴趣的目录上运行accurev pop命令,这将使每个项目更快,但速度相同。< / p>

修改

如果您决定一次只转换一个文件夹,那么硬编码脚本以执行您想要的操作将是微不足道的。您需要做的就是修改所有对accurev.pop()的调用(AccuRev2Git.TryPop()函数中只有一个),并在调用中添加另一个参数,指定您希望填充的文件夹。

def TryPop(self, streamName, transaction, overwrite=False):
    for i in xrange(0, AccuRev2Git.commandFailureRetryCount):
        # --- Remove this line --- #
        #popResult = accurev.pop(verSpec=streamName, location=self.gitRepo.path, isRecursive=True, isOverride=overwrite, timeSpec=transaction.id, elementList='.')
        # --- And add this instead --- #
        popResult = accurev.pop(verSpec=streamName, location=self.gitRepo.path, isRecursive=True, isOverride=overwrite, timeSpec=transaction.id, elementList='/./<your project folder>')
        # --- End hardcoding hack --- #
        if popResult:
            break
        else:
            self.config.logger.error("accurev pop failed:")
            for message in popResult.messages:
                if message.error is not None and message.error:
                    self.config.logger.error("  {0}".format(message.text))
                else:
                    self.config.logger.info("  {0}".format(message.text))

    return popResult