--- lang: ja-jp breaks: true --- # svn から git への移行 2021-12-18 > ソース SVN リポジトリをローカル Git リポジトリに変換する > https://docs.microsoft.com/ja-jp/azure/devops/repos/git/perform-migration-from-svn-to-git?view=azure-devops > git-svn - Bidirectional operation between a Subversion repository and Git > https://git-scm.com/docs/git-svn > SVN脳患者から見たGit > https://qiita.com/kaityo256/items/81e7951a1ca2706955a4 > コミットはスナップショットであり差分ではない > https://github.blog/jp/2021-01-06-commits-are-snapshots-not-diffs/ # 移行環境を準備する https://gitforwindows.org/ https://tortoisesvn.net/ 「command line client tools」を追加してインストールする。  # すべての Subversion 作成者の一覧を取得する ローカル Subversion チェックアウトのルートからすべての SVN ユーザーの一覧を抽出するには、次の PowerShell コマンドを実行します。 ```shell= svn.exe log --quiet | ? { $_ -notlike '-*' } | % { "{0} = {0} <{0}>" -f ($_ -split ' \| ')[1] } | Select-Object -Unique | Out-File 'authors-transform.txt' ``` 以下のような形式で出力される ```shell= honda = honda <honda> tanaka = tanaka <tanaka> nakamura = nakamura <nakamura> VisualSVN Server = VisualSVN Server <VisualSVN Server> ``` ## git-svn を使用して Subversion リポジトリを複製する ```shell= git svn clone ["SVN repo URL"] --prefix=svn/ --no-metadata --authors-file "authors-transform.txt" --stdlayout c:\mytempdir ``` :::warning 上記、「git svn clone」でも複製できます。が、エラーになった場合に途中から再開できない。init -> fetch で複製すると再開したいリビジョン番号を指定して再開できます。 ::: リポジトリを格納するディレクトリを作成 ```bash= cd /g/svn/git mkdir projectA cd projectA ``` リポジトリを初期化 ```bash= git svn init \ --trunk=projectA/trunk \ --tags=projectA/tags/* \ --branches=projectA/branches/* \ --prefix=svn/ \ https://192.168.xxx.xxx/svn/Reps ``` 設定ファイルを変更 ```bash= vim .git/config ------ [core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true [svn-remote "svn"] url = https://192.168.xxx.xxx/svn/Reps fetch = projectA/trunk:refs/remotes/svn/trunk branches = projectA/branches/*:refs/remotes/svn/branches/* tags = projectA/tags/*:refs/remotes/svn/tags/* ------ ``` :::warning `refs/remotes/svn/~`の部分の `refs/remotes` は必須。`refs`がないと怒られる。`remotes`がないと、`git branch -r`コマンドで表示されなくなる。 ::: フェッチ ```bash= git svn fetch ``` ブランチの確認 ```bash= git branch -a git branch -r ``` ブランチを作成 ```bash= for BRANCH_NAME in $(git branch -r | grep -e '\(branches\|tags\)' | sed -e 's/ svn\///g'); do git branch "$BRANCH_NAME" "svn/$BRANCH_NAME" done; ``` タグの作成 ```bash= for TAG_NAME in $(git branch -r | grep -e '\(tags\)' | sed -e 's/ svn\///g'); do git tag "$TAG_NAME" "svn/$TAG_NAME" done; ``` リモートサーバの設定 ```bash= git remote add origin ssh://192.168.xxxx.aaaa/c/repos/projectA.git ``` リモートサーバにプッシュ ```bash= git push -u origin --all ``` クライアントから確認 ```bash= git clone ssh://192.168.xxxx.aaaa/c/repos/projectA.git ``` ###### tags: `git` `svn` `移行` `git svn`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up