Source Control Migration from Accurev to Git (.net)

Currently we have a big project, about 10GB (including dlls), probably around 5GB without dlls, in Accurev and it is really slow to get / up / promote etc…

We are thinking of migrating to GIT, but biggest problem is it is a big monolith plus the way it is structured, we have one DEPOT for all projects. We have a LIBRARY folder where all the projects are built to, instead of the bin folder, so libraries references could be shared. Every library is built to that LIBRARY folder, and all inter project references are referencing the dlls in the LIBRARY folder.

  • How to partially stage a file with LibGit2Sharp?
  • Integrating GIT into Hudson
  • When to start versioning/stop using project references
  • How to fetch change from Git using LibGit2Sharp?
  • Handle multiple components in one or several Git repos?
  • Windows Phone 8 app doesn't run on emulator when is under git control
  • How can we start to chunk out the project and migrate to GIT? I was thinking of setting up an internal NUGET SERVER and NUGET-ting the current common libraries first, put them on GIT…then slowly migrate others over, splitting projects per repo, not a single repo (depot) like now.

    Any suggestions?

  • Apache and git-http-backend
  • What's the jgit equivalent for “git merge-base --fork-point branchA branchB”
  • Git: merge two repositories one over the other
  • Git: How to get files between specific revisions
  • Git removing upstream from local repository
  • amending a single file in a past commit in git
  • One Solution collect form web for “Source Control Migration from Accurev to Git (.net)”

    You could use the script I wrote, ac2git, to convert your repo to git but it might take a while.

    After the conversion you could use the git filter-branch --subdirectory-filter to separate the converted monolith git repo into per project git repos.

    It should work but it will probably be slow.

    Alternatively, if you’re up for it, you could modify my script to do what you want. You would just need to make sure that it runs the accurev pop command only on the directories that you’re interested in while it is converting the repo which would make it quicker per project but the same speed over all.

    Edit:

    If you decide that you want to only convert a single folder at a time it would be trivial for you to hard code the script to do what you want. All you need to do is modify all the calls to accurev.pop() (of which there is only one in the AccuRev2Git.TryPop() function) and add another argument to the call specifying which folder you wish to populate.

    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
    
    Git Baby is a git and github fan, let's start git clone.