目前我们有一个大项目,大约10GB(包括dll),可能大约5GB,没有dll,在Accurev中,获取/升级/推广等都很慢......
我们正在考虑迁移到GIT,但最大的问题是它是一个巨大的整体加上它的结构方式,我们有一个DEPOT用于所有项目。我们有一个LIBRARY文件夹,其中构建了所有项目,而不是bin文件夹,因此可以共享库引用。每个库都构建到该LIBRARY文件夹,并且所有项目间引用都引用LIBRARY文件夹中的dll。
我们如何开始将项目分块并迁移到GIT?我正在考虑建立一个内部NUGET服务器并首先将它们放在当前的公共库中,然后将它们放在GIT上......然后慢慢迁移其他库,每个仓库拆分项目,而不是像现在这样的单个仓库(仓库)。 p>
有什么建议吗?
答案 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