我一直在查看一些SVN - > Git迁移,他们都提到在迁移之前获取正确的用户列表,特别是通过使用命令:
svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq
Run Code Online (Sandbox Code Playgroud)
我可以访问托管单个存储库的Ubuntu服务器(包含9个项目),但本地没有SVN安装.是否可以在服务器上运行该命令以获取用户名列表?目前它只是回报错误:
svn: E155007: '/var/subversion/' is not a working copy
Run Code Online (Sandbox Code Playgroud)
Ric*_*sen 29
将路径作为URL传递到存储库:
svn log -q file:///var/subversion | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您需要按照第一次提交的时间顺序列出作者列表(我发现从svn转换为git时有用一次),您可以执行以下操作:
svn log -q -r 1:HEAD url://to/repo | grep '^r' | awk -F'|' '!x[$2]++{print$2}'
Run Code Online (Sandbox Code Playgroud)
请参阅以下说明将 SVN 存储库转换为 git 存储库
\n\n注意:要仅查看用户列表,请运行行项目 1。
\n\n将 SVN 存储库转换为 GIT 存储库
\n\n1. 检索所有 Subversion 提交者的列表
\n\n $ svn log -q https://svn.example.com/repository_name | awk -F \'|\' \'/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}\' | sort -u > authors-transform.txt\nRun Code Online (Sandbox Code Playgroud)\n\n这将抓取所有日志消息,取出用户名,消除任何重复的用户名,对用户名进行排序并将它们放入“authors-transform.txt\xe2\x80\x9d 文件中。现在编辑文件中的每一行。例如, 转变:
\n\nusername = username <username>\nRun Code Online (Sandbox Code Playgroud)\n\n进入这个:
\n\n username = Firstname Lastname <username@example.com>\nRun Code Online (Sandbox Code Playgroud)\n\n2. 使用 git-svn 克隆 Subversion 存储库
\n\ngit svn clone [SVN repo URL] --no-metadata -A authors-transform.txt --stdlayout ~/temp\nRun Code Online (Sandbox Code Playgroud)\n\n3. 将 svn:ignore 属性转换为 .gitignore \n如果您的 svn 存储库使用 svn:ignore 属性,您可以使用以下命令轻松地将其转换为 .gitignore 文件:
\n\ncd ~/temp\ngit svn show-ignore > .gitignore\ngit add .gitignore\ngit commit -m \'Convert svn:ignore properties to .gitignore.\'\nRun Code Online (Sandbox Code Playgroud)\n\n4. 将存储库推送到裸 git 存储库\n首先,创建一个裸存储库并使其默认分支匹配 svn\xe2\x80\x99s "trunk\xe2\x80\x9d 分支名称。
\n\ngit init --bare ~/new-bare.git\ncd ~/new-bare.git\ngit symbolic-ref HEAD refs/heads/trunk\n\ncd ~/temp\ngit remote add bare ~/new-bare.git\ngit config remote.bare.push \'refs/remotes/*:refs/heads/*\'\ngit push bare\nRun Code Online (Sandbox Code Playgroud)\n\n您现在可以安全地删除 ~/temp 存储库。
\n\n5. 将“trunk”分支重命名为“master” \n您的主开发分支将被命名为“trunk\xe2\x80\x9d”,与 Subversion 中的名称相匹配。您\xe2\x80\x99 将希望将其重命名为 Git\ xe2\x80\x99s 标准“master\xe2\x80\x9d 分支使用:
\n\ncd ~/new-bare.git\ngit branch -m trunk master\nRun Code Online (Sandbox Code Playgroud)\n\n6. 清理分支和标签\ngit-svn 使所有 Subversions 标签在 Git 中变成非常短的分支,格式为“tags/name\xe2\x80\x9d”。您\xe2\x80\x99 将想要转换所有这些分支使用以下命令进入实际的 Git 标签:
\n\ncd ~/new-bare.git\ngit for-each-ref --format=\'%(refname)\' refs/heads/tags |\ncut -d / -f 4 |\nwhile read ref\ndo\n git tag "$ref" "refs/heads/tags/$ref";\n git branch -D "tags/$ref";\ndone\nRun Code Online (Sandbox Code Playgroud)\n\n7. 将裸存储库移动到中央远程存储库\n如何将本地裸存储库移动到 gitolite 存储库的示例:
\n\nmv new-bare.git repository_name.git\ntar czvf repository_name.git.tar.gz repository_name.git/\nscp repository_name.git.tar.gz remote_host:\nssh remote_host\ntar xzvf repository_name.git.tar.gz\nsudo chown -R git:staff repository_name.git/\ncd repository_name.git/\nfind . -type f -exec chmod go= {} \\; # remove group and world permissions\nfind . -type d -exec chmod go= {} \\; # remove group and world permissions\ncd ../\nmv repository_name.git /Users/git/repositories/\nRun Code Online (Sandbox Code Playgroud)\n\n8.克隆新的本地副本
\n\nmv old-svn-copy old-svn-copy.backup\ngit clone git@remote_host:repository_name.git\nRun Code Online (Sandbox Code Playgroud)\n\n列出旧本地 svn 存储库中所有未版本控制的文件,并将它们复制到新的本地 git 存储库:
\n\ncd old-svn-copy.backup\ngit clean -dXn # Using this command because the old copy was a git-svn clone\ncp example-file.txt ../repository_name/ # copy all files and directories from the list that you need in the new local git repository\nRun Code Online (Sandbox Code Playgroud)\n\n您现在可以将本地 svn 副本备份移至垃圾箱。在确定一切正常之前,最好不要清空垃圾箱。
\n\n9. 完成。
\n\n来源在这里
\n| 归档时间: |
|
| 查看次数: |
21525 次 |
| 最近记录: |