Migración de control de origen de Accurev a Git (.net)

Actualmente tenemos un gran proyecto, de aproximadamente 10 GB (incluidos dlls), probablemente alnetworkingedor de 5 GB sin dlls, en Accurev y es muy lento para upload / upload / promocionar, etc …

Estamos pensando en migrar a GIT, pero el mayor problema es que es un gran monolito, más la forma en que está estructurado, tenemos un DEPÓSITO para todos los proyectos. Tenemos una carpeta LIBRARY en la que se crean todos los proyectos, en lugar de la carpeta bin, por lo que las references de las bibliotecas se pueden compartir. Cada biblioteca está construida en esa carpeta BIBLIOTECA, y todas las references entre proyectos están haciendo reference a los dlls en la carpeta BIBLIOTECA.

¿Cómo podemos comenzar a dividir el proyecto y migrar a GIT? Estaba pensando en configurar un SERVIDOR NUGET interno y NUGET-ting las bibliotecas comunes actuales primero, ponerlas en GIT … luego migrar lentamente otras, dividir proyectos por repository, ni un solo depósito (depósito) como ahora.

¿Alguna sugerencia?

Podrías usar el script que escribí, ac2git , para convertir tu repo a git, pero podría llevar un time.

Después de la conversión, puede usar git filter-branch --subdirectory-filter para separar el monolith git repo convertido en repositorys de proyecto git.

Debería funcionar, pero probablemente será lento.

Alternativamente, si está preparado, puede modificar mi script para hacer lo que quiera. Solo necesita asegurarse de que ejecuta el command accurev pop solo en los directorys que le interesen mientras convierte el repository, lo que lo haría más rápido por proyecto pero con la misma velocidad que todos.

Editar:

Si decides que solo quieres convertir una sola carpeta a la vez, sería trivial codificarla para que haga lo que quieras. Todo lo que necesita hacer es modificar todas las llamadas a accurev.pop() (de las cuales solo hay una en la function AccuRev2Git.TryPop() ) y agregar otro argumento a la llamada especificando qué carpeta desea completar.

 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