SVNの提出記録を保持するように要求する
1.アカウント対応
- SVNのログレコード:
r2 | lisi | 2014-12-12 15:11:59 +0800 (五, 12 12月 2014) | 1 line
ssss
- gitログレコード:
Author: zhangsan <[email protected]>
Date: Thu Jan 16 11:28:30 2020 +0800
初始化意见反馈模块
commit 938ef83245f699c5c016b98ce454cffba3ce8eff
svnとgitのログレコードを比較すると、svnはアカウントのみを使用して送信レコードを表示し、gitはアカウントを使用するだけでなく、メールボックスを使用して確認していることがわかります。したがって、svnからgitへの移行では、それに応じて2つを変換する必要があります。
その方法は、svnアカウントをエクスポートしてから、svnアカウントを等号の左側にあるsvnアカウントに変換し、GitLabアカウントと等号の右側にあるメールボックス情報に変換します。zhangsan=zhangsan <[email protected]>
このような情報はファイルに記録されます。 1行。ログ情報にのみ焦点を当てているため、ログレコードのアカウントのみをエクスポートし、これらのアカウントを操作します。次のコマンドは、アカウント通信のエクスポートを完了します。
svn log SVN项目的url -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2"="$2" <"$2"@example.com>"}' | sort -u > 记录账号对应关系的文件路径
以下では、アカウントの対応をファイルsvn2git.txtにエクスポートします。
~/Desktop$ svn log http://10.69.10.15:8080/svn/ai_project | awk -F '|' '/^r/ { sub(" ","",$2); sub(" $","",$2); print $2"="$2" <"$2"@example.com>"}' | sort -u > svn2gitlab.txt
コマンドの説明:
- http://10.69.10.15:8080/svn/ai_project:svnログのエクスポート
- エクスポートされたログは、パイプライン '|'を介してawkコマンドに渡されます
- awkの処理単位は1行であるため、awkはデータの各行を「|」で除算し、結果の2番目の項目はアカウント名です。Subはアカウント名からスペースと$記号を削除し、最終的にアカウント番号を出力します。アカウント番号は、並べ替えのためにパイプライン「|」を介してsortコマンドに渡され、最終的に結果はファイルsvn2gitlab.txtに保存されます
2.git-svn pull SVNプロジェクト
git-svnを使用してSVNプロジェクトをプルします。
-
git - SVNをダウンロードしてインストールし、次のことができhttp://fr2.rpmfind.net/linux/rpm2html/search.phpのgit - SVNを検索し、ダウンロードして、彼らのプラットフォームに応じてインストールすることを選択。もちろん、ubuntuが使用できるように、ソースを使用してインストールすることもできます:sudo apt-get install git-svn
-
コマンドを実行し
git svn clone "SVN项目url" --no-metadata --authors-file="账号对应关系文件" 自定义项目名
、プロジェクトをプルし、アカウント通信ファイルを使用してsvn提出レコードをgit提出レコードに変換します。通常のsvnチェックアウト:
~/Desktop/H/ai_project$ ls -a . app gradle local.properties key.sign proguard-project.txt .svn .. build.gradle .gradle main.iml pda_svn.iml settings.gradle
git svnを使用してプルします。
~/Desktop/TestSVN2Git/ai_project$ ls -a . app .git .gradle main.iml pda_svn.iml settings.gradle .. build.gradle gradle local.properties key.sign proguard-project.txt
上記の比較からわかるように、に
.svn
変換されます.git
、
例:
~/Desktop/TestSVN2Git$ git svn clone http://10.69.10.15:8080/svn/ai_project --no-metadata --authors-file=../svn2gitlab.txt ai_project
3.プロジェクトをGitLabに送信します
Git-svnでプルされたプロジェクトディレクトリに切り替えます。
- プロジェクトのユーザー情報を構成する
git config --local user.name "GitLab用户名"
git config --local user.email "GitLab邮箱"
など:
~/Desktop/TestSVN2Git/ai_project$ git config --local user.name "Administrator"
~/Desktop/TestSVN2Git/ai_project$ git config --local user.email "[email protected]"
-
GitLab Webページで作成するか、GitLab APIを使用して空のウェアハウスを作成します。「ローカルgitウェアハウスからリモートgitウェアハウスへの移行」を参照してください。
最後に、空の倉庫のgitアドレスを取得します。http://10.69.10.13/android/aiproject.git
-
ローカル倉庫を新しいリモート倉庫に関連付ける
git remote add origin GitLab项目的git地址
~/Desktop/TestSVN2Git/ai_project$ git remote add origin http://10.69.10.13/android/aiproject.git
-
プッシュリモコン
git push -u origin master
~/Desktop/TestSVN2Git/ai_project$ git push -u origin master
3番目のステップでの完了は、ローカルgitリポジトリをリモートgitリポジトリに移行する際の問題です。
追記:
svnがgitを移行するとき、大まかに言うと、git svnはプロジェクトをプルするときにアカウント対応ファイルを使用してsvn提出レコードをgit提出レコードにプルし、それを新しいプロジェクトにプッシュします。