{"id":18518077,"url":"https://github.com/cyotek/svngitmigrate","last_synced_at":"2025-04-09T08:31:22.627Z","repository":{"id":148117952,"uuid":"323453396","full_name":"cyotek/SvnGitMigrate","owner":"cyotek","description":"Simple tool to aid in doing partial migrations of an SVN repository to Git","archived":false,"fork":false,"pushed_at":"2024-12-27T16:31:57.000Z","size":565,"stargazers_count":6,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T03:43:54.641Z","etag":null,"topics":["csharp","git","svn","svn2git"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cyotek.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-21T21:37:19.000Z","updated_at":"2024-05-23T03:42:42.000Z","dependencies_parsed_at":"2023-05-19T04:45:37.309Z","dependency_job_id":null,"html_url":"https://github.com/cyotek/SvnGitMigrate","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyotek%2FSvnGitMigrate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyotek%2FSvnGitMigrate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyotek%2FSvnGitMigrate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyotek%2FSvnGitMigrate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cyotek","download_url":"https://codeload.github.com/cyotek/SvnGitMigrate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248003084,"owners_count":21031723,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","git","svn","svn2git"],"created_at":"2024-11-06T17:11:28.232Z","updated_at":"2025-04-09T08:31:22.619Z","avatar_url":"https://github.com/cyotek.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cyotek Svn2Git Migration Utility\n\nThis repository hosts a naive utility for creating a Git\nrepository from an existing SVN folder, making it useful for\nbreaking a mono SVN Repository into smaller Git repositories.\n\n\u003e This tool is a work in progress that I did for breaking up my\n\u003e own repository. It may not work for all cases, for example if\n\u003e root folders were renamed or moved.\n\u003e\n\u003e It has only received limited testing and is provided AS-IS\n\n## How does it work?\n\nIn the simplest fashion possible - you give it a location in\nSVN, it will enumerate the revisions in that location and will\ncheck each one out in reverse order and check them into a Git\nrepository with the appropriate date, author and log\ninformation. That is it, nothing fancy.\n\nThe code is a little messy, I did start to break it up into more\nreusable and testable components but this work is ongoing.\n\n## Selecting Revisions\n\n![Selecting revisions][step1]\n\n* Enter the URL of the _remote_ SVN path you want to migrate.\n  This will then list all revisions associated with that\n  location\n* Select the revisions you wish to migrate\n\n## Mapping Authors\n\n![Entering author mappings][step2]\n\nSVN uses a simple name for attribution, but Git requires a name\nand email address pair. The Author Mapping tab will list any\ndetected authors for the selected revisions, for each author\nensure there is a name and email address in the pattern\n`svn_name = git_name \u003cgit_email\u003e`.\n\n## Inclusions and Exclusions\n\n![Defining exclusions][step3]\n\nIf there are files you want to exclude from the new repository\n(for example a scratch program full of credentials that should\nnever have been committed to begin with!), you can configure a\nset of include or exclude patterns to manage which files will be\ncopied from each SVN checkout to the Git repository.\n\nEnter glob patterns in either the inclusion or exclusion fields,\nor both. Files will only be included if they are both included\nand not excluded. If the includes field is blank, then all files\nare included. If the excludes field is blank, then no files will\nbe excluded.\n\nFor example, if you had a folder named `/src/Scratch` in your\nrepository which you didn't want migrated, then you could enter\nthe glob `/**/Scratch` to the exclusion list.\n\n\u003e Don't use backslashes in globs, the migration tool will\n\u003e automatically handle conversion from Windows paths.\n\n## Selecting the Git Repository\n\n![Selecting the Git Repository][step4]\n\nEnter the local folder where the Git repository will be located.\n\nIf you are creating a new repository, ensure the folder is empty\nthe **Use existing repository** option is unchecked.\n\nIf you want to append the commits to an existing repository,\nensure the folder points to the existing repository and check\nthe **Use existing repository option**. This can be useful if you\nare having to build a Git repository from multiple sources, e.g.\nif a root folder was renamed or moved.\n\n## Preview\n\n![Generating an optional preview][step5]\n\nClick the **Preview** button to display a simplified preview.\nThis will scan the revisions and test changed files against\ninclusion and exclusion patterns, then print a list of all\nmatched files. This can be very useful to make sure you have\nyour patterns set right, and also to review file lists in case\nyou see something that needs adding to the exclusions.\n\n\u003e Note that this isn't bullet proof, for example in my testing\n\u003e it didn't show a large number of files from an initial\n\u003e migration into SVN from SourceSafe.\n\n## Migrate\n\n![Selecting the Git Repository][step6]\n\nClick the **Migrate** button to start the process. For each\nselected revision, this tool will check that out, sync the\ncontents with the Git repository (honoring include/exclude\nrules), then perform a commit.\n\n[step1]: res/step1.png\n[step2]: res/step2.png\n[step3]: res/step3.png\n[step4]: res/step4.png\n[step5]: res/step5.png\n[step6]: res/step6.png\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyotek%2Fsvngitmigrate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcyotek%2Fsvngitmigrate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyotek%2Fsvngitmigrate/lists"}