svn如何将svn创建代码仓库库移动到另一个服务器

迁移前的准备
需要迁移的本地 SVN 工作目录。
电脑安装了 Git 版本控制工具。
1. 创建空的 Coding 项目仓库
在 Coding 上创建一个没有任何文件的仓库,作为 SVN 项目迁移到 Coding 的仓库容器。
如不清楚该如何执行此操作,请查阅创建仓库文档:
2. 获得原 SVN 仓库使用的作者名字列表
在 SVN 中,每一个人提交时都需要在系统中有一个用户,它会被记录在提交信息内。这些信息的格式和内容与 Git 默认的格式和内容略有差别,为了矫正这些差别,我们需要去获得原 SVN 仓库使用的作者名字列表信息并做格式改动。
进入到 SVN 项目工作目录中,执行:
$ svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" &"$2"&"}' | sort -u & authors-transform.txt
该命令会去获取原 SVN 仓库内的日志,转化为正确的格式,去除重复的用户信息之后再保存到当前目录下的 authors-transform.txt 文件中。
为了验证该步骤的正确,我们可以查看 authors-transform.txt 的文件内容,它应该为以下格式的内容:
schacon = Scott Chacon &schacon&
selse = Someo Nelse &selse&
由于 SVN 仅可以获取到使用者的用户名,但是在 Git 中,我们往往需要给使用者设置邮箱,那么我们可以将 authors-transform.txt 内的内容改为:
schacon = Scott Chacon &&
selse = Someo Nelse &&
3. 利用 git svn 克隆 SVN 仓库
新建一个目录作为 Git 项目的容器,并进入到该目录中,执行下面的命令:
$ git svn clone SVNRepoURL --no-metadata -A authors-transform.txt -T trunk -b branches -t tags
SVNRepoURL:为 SVN 远程仓库地址,请用你的 SVN 远程仓库地址替换掉它,并确保该链接可以正常使用。
--no-metadata:让原 SVN 项目日志中的内容更符合 Git 的格式规范,且去掉了SVN ID、URL此类无用信息。
-A authors-transform.txt:指定作者列表信息。默认在当前目录获取,假如当前目录中不存在,请将在[2. 获得原 SVN 仓库使用的作者名字列表]中所产出的 authors-transform.txt 移动到当前目录下。
-T trunk -b branches -t tags:告诉 Git, SVN 仓库遵循基本的分支与标签惯例。 如果你命名了不同的主干、分支或标签,可以修改这些参数,比如下面这个例子:
-T yourTrunkName -b yourBranchesName -t yourTagsName
假如原 SVN 项目文件较多或体积较大,那么该过程会持续较长时间。
4. 转化 svn:ignore 至 .gitignore
在 Git 项目容器下执行以下命令:
$ git svn show-ignore & .gitignore
$ git add .gitignore
$ git commit -m 'your commit message'
该命令会根据原 SVN 项目中的忽略项,生成对应的 .gitignore 文件,并提交。
5. 更改分支和标签的引用地址
在 Git 项目容器下执行
$ git show-ref
将会输出类似以下的分支和标签引用列表:
13b431f8ec6ababaf9f410dbcbd96 refs/heads/master
a520bc7df9f3a148947a refs/remotes/origin/branch1
1a2c0b78cd8ac28d4bee5d36d03c refs/remotes/origin/branch2
240fce8938ffef6a41ea6cf2a981 refs/remotes/origin/branch2@9
bd13cee28c6235dabee5 refs/remotes/origin/tags/tag1
6fe356bfb0fe697f5db76c9 refs/remotes/origin/tags/tag2
第一步,我们需要清理 git svn 命令设置的不合符 Git 日常使用的引用。 首先移动标签,这样它们就是标签而不是奇怪的远程引用,然后再移动剩余的分支这样它们就是本地的了。
为了将标签变为合适的 Git 标签,运行:
$ cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
$ rm -Rf .git/refs/remotes/origin/tags
这会使原来在 remotes/origin/tags/ 里的远程分支引用变成真正的(轻量)标签。
接下来,将 refs/remotes 下剩余的引用移动为本地分支:
$ cp -Rf .git/refs/remotes/* .git/refs/heads/
$ rm -Rf .git/refs/remotes
6. 推送至 Coding 仓库中
下面是一个为你的本地项目添加远程仓库地址的例子:
$ git remote add origin git@git.coding.net:bertieHuang/svn.git
你可以在迁移目的仓库页面找到该远程地址,复制并替换掉例子中的 git@git.coding.net:bertieHuang/svn.git:
在完成了添加远程仓库的操作之后,我们需要将所有的分支和标签都推送至 Coding 仓库中,执行:
$ git push origin --all
$ git push origin --tags
假如原 SVN 项目文件较多或体积较大,那么该过程会持续较长时间。
7. 检验迁移结果
在推送完成之后,进入迁移至 Coding 的项目中,刷新页面,即可看到迁移后的效果,同时,你也可以通过下图的方式校验:17:33 提问
在一台服务器上如何将一个仓库下的项目移动到另外一个仓库下
在一台服务器上任何将一个仓库下的项目移动到另外一个仓库下,包括所有的版本日志。
使用tortoisesvn小乌龟只能在自己的仓库随便拖动项目的位置,但是从自己的仓库拖到另外一个仓库就不可以了。大神帮帮忙,在线等急
按赞数排序
建议使用switch功能。
本地的代码可以用locate切换位置。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
注意文件名要准确
svnadmin dump /data/svn/UEI & reposdumpfile
2,移动库到目标文件:scp命令,cercure CRT,Xshell,远程桌面本地盘共享等方式。
3,svnadmin load d:\uei\svn\UEI\ reposdumpfile
#windows下注意反斜线方向。UEI目录需要先执行svnadmin
1). 从原地址克隆一份裸版本库,比如原本托管于 GitHub。git clone –bare git://github.com/username/project.git
–bare 创建的克隆版本库都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库。2). 然后到新的 Git 服务器上创建一个新项目,比如 GitCafe。3). 以镜像推送的方式上传代码到 GitCafe 服务器上。
最近刚开发完一个canteen模块,在github上有一个独立的仓库。现在需求是要增加一个大模块project,将原先的canteen模块迁移到大模块project中。首先你得有管理员身份,在github上新建一个仓库,比如叫project。用 git clone project的托管地址将project下载到本地2.1 如果不需要保留原先canteen仓库的提交记录,我们可以直接将本地的cant...
需求:一台机子,多个项目,项目之间用户独立不可以相互访问文件
思路:在机子上设置多个代码仓库,用不同的端口号加一区分
首先安装SVN,我这里使用的是TortoiseSVN
首先创建多个SVN代码仓库,具体操作是,创建一个空的文件夹,【右键】-》TortoiseSVN-》【在此创建版本库】,有多少个项目就创建多少个这样的文件夹,创建好的效果如下
之后进入到这些刚刚创建好的文
PHP文件上传至另一台服务器
分类: 基础编程
11:00 624人阅读 评论(0) 收藏 举报
phpfileserveruserlogin服务器
PHP程序上传文件时,想指定上传到另一台服务器。
move_uploaded_file这个方法第二个参数指定的存放路径需要和php程序文件一个服务器,没办法指定其他服务器的地址,本人才疏学浅,哪位大哥会的还请赐教下。
将已有的项目转移到组织的仓库中
[root@node2 /]#
scp /hadoop-1.2/conf/*
root@192.168.192.131:/hadoop-1.2/conf/
当svn版本库的服务器坏掉时,依据此文档,可以把你的版本库迁移到另一个版本库上。
#!/bin/bash#需求:将A机器中以tmp后缀结尾的文件移动到B机器#A机器平台的接入相关信息
FTP_HOST=192.168.2.231
FTP_PORT=21
FTP_USER=bobo
FTP_UPWD=123#A机器文件存放目录
LOCAL_DIR=/home/epayftp/channel#A机器日志目录
LOG_HOME=/home/epayftp/channel#B机器临时文件
scp /home/slavel.hadoop/文档/id_rsa
root@SY-002:/home/hadoopscp 文件路径
root@ip:第二台服务器的路径404 Not Found
The requested URL /q/2420 was not found on this server.博客分类:
首先,VisualSVN Server Manager,包含两个路径,一个是安装路径,例如本机:C:\Program Files\VisualSVN Server,一个是库路径,例如本机:C:\Repositories,其中,Repositories中包括各项目文件及项目信息文件,重要的项目信息文件有authz和htpasswd,authz是目录访问权限控制文件,htpasswd是VisualSVN Server Manager用户和密码记录文件
现,对VisualSVN Server Manager进行迁移,方法如下:
方法一:直接迁移Repositories目录
例如:原服务器A,VisualSVN Server Manager现服务器B,VisualSVN Server Manager
步骤:1、拷贝A上Repositories文件夹到B上2、打开B上VisualSVN Server Manager3、右击Repositories,所有任务中选择import existing repository4、选择步骤1中的项目文件夹进行导入,直到所有项目导入完成5、替换authz和htpasswd文件,使得服务器B上VisualSVN Server Manager中的用户及用户权限跟之前的一致
方法二:使用svnadmin对VisualSVN进行项目迁移
导出1& 启动命令行cmd2& 运行%VISUALSVN_SERVER%\bin\svnadmin dump PATH-TO-REPO & PATH-TO-DUMPPATH-TO-REPO - SVN 项目仓库目录PATH-TO-DUMP - 导出SVN项目仓库dump目录文件名
导入1& 启动 VisualSVN Manager 创建一个空的仓库, Start -& All Programs & VisualSVN ;右击"Repositories"节点选择 "select Create New Repository" 创建一个空的仓库;注意不要选择"Create default structure (trunk, branches, tags)".
2& 导入已保存的dump文件%VISUALSVN_SERVER%\bin\svnadmin load PATH-TO-NEW-REPO & PATH-TO-DUMPPATH-TO-NEW-REPO - SVN 项目仓库目录PATH-TO-DUMP - 已保存的SVN项目仓库dump文件
%VISUALSVN_SERVER%是VisualSVN安装目录环境变量, 默认安装后会创建此环境变量.
如不存在直接进去VisualSVN安装目录下bin目录执行svnadmin即可.
第二种方法没有第一种方便,导出的dump文件不含用户。
如果库较大,导出的dump文件比第一种直接拷大很多,导入的时候也很慢
建议使用第一种方法,简单,快速。
浏览: 1434489 次
来自: 北京
楼主。使用分布式session后,能解决freemarker无 ...
代码报异常啊
mysql的注释符号“-- ”,“#”,“/**/”要加上吗? ...
Thanks for sharing!
多谢楼主分享!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客访问: 2141417
博文数量: 420
博客积分: 3010
博客等级: 中校
技术积分: 7424
注册时间:
学习是一种信仰。
分类: 项目管理 04:06:22
以下是subversion官方推荐的备份方式。
关闭所有运行的进程,并确认没有程序在访问存储库(如 httpd、svnserve 或本地用户在直接访问)。
备份svn存储库
svnadmin dump /home/workhome/svn/repository | gzip > ~/repository-backup.gz
#不压缩备份
svnadmin dump /home/workhome/svn/repository > ~/repository-backup.svn
恢复svn存储库
#建立新的svn存储库
svnadmin create /home/workhome/svn/newrepository
#确认成功与否
ls -l /home/workhome/svn/newrepository
#导入存储库数据
svnadmin load /home/workhome/svn/newrepository < ~/repository-backup.svn
SVN数据库迁移方法一
称之为SVN全库操作,或称SVN全局备份并恢复,版本库数据的移植:svnadmin dump、svnadmin load
$svnadmin dump repos > dumpfile //将指定的版本库导出成文件dumpfile
$svnadmin create newrepos
$svnadmin load newrepos < dumpfile
&SVN数据库迁移方法二
增量备份或批次备份,批次恢复,特定reversion导出:
$svnadmin dump repos –r 23 >rev-23.dumpfile //将version23导出
$svnadmin dump repos –r 100:200 >rev-100-200.dumpfile //将version100~200导出
批次导出:对比较大的库可以批次导出,便于备份
$svnadmin dump repos –r 0:0.dumpfile
$svnadmin dump repos –r
--incremental >.dumpfile
$svnadmin dump repos –r
--incremental >.dumpfile
批次导入,将这几个备份文件装载到一个新的版本库中
$svnadmin load newrepos < 0-1000.dumpfile
$svnadmin load newrepos < .dumpfile
$svnadmin load newrepos < .dumpfile
SVN数据库迁移方法三
导出后,在导入时对库做分库整理或其它整理操作过滤版本库历史:
假设有一个包含三个项目的版本库: calc,calendar,和 spreadsheet。它们在版本库中的布局如下:
&branches/
&calendar/
&branches/
&spreadsheet/
&branches/
现在要把这三个项目转移到三个独立的版本库中。首先,转储整个版本库:
$ svnadmin dump /path/to/repos > repos-dumpfile
* Dumped revision 0.
&* Dumped revision 1.
&* Dumped revision 2.
* Dumped revision 3.
& 然后,将转储文件三次送入过滤器,每次仅保留一个顶级目录,就可以得到三个转储文件:
$ cat repos-dumpfile | svndumpfilter include calc > calc-dumpfile
$ cat repos-dumpfile | svndumpfilter include calendar > cal-dumpfile
$ cat repos-dumpfile | svndumpfilter include spreadsheet > ss-dumpfile
现在你必须要作出一个决定了。这三个转储文件中,每个都可以用来创建一个可用的版本库,不过它们保留了原版本库的精确路径结构。也就是说,虽然项目calc现在独占了一个版本库,但版本库中还保留着名为calc的顶级目录。如果希望trunk、tags和branches这三个目录直接位于版本库的根路径下,你可能需要编辑转储文件,调整Node-path和Copyfrom-path头参数,将路径calc/删除。同时,你还要删除转储数据中创建calc目录的部分。一般来说,就是如下的一些内容:
&Node-path: calc
&Node-action: add
&Node-kind: dir
&Content-length: 0
如果你打算通过手工编辑转储文件来移除一个顶级目录,注意不要让你的编辑器将换行符转换为本地格式(比如将\r\n转换为\n)。否则文件的内容就与所需的格式不相符,这个转储文件也就失效了。
剩下的工作就是创建三个新的版本库,然后将三个转储文件分别导入:
svnadmin load calc < calc-dumpfile
$ svna svnadmin load calendar < cal-dumpfile
$ svnadmi svnadmin load spreadsheet < ss-dumpfile
svndumpfilter的两个子命令都可以通过选项设定如何处理“空”修订版本。如果某个指定的修订版本仅包含路径的更改,过滤器就会将它删除,因为当前为空的修订版本通常是无用的甚至是让人讨厌的。为了让用户有选择的处理这些修订版本,svndumpfilter提供了以下命令行选项:
--drop-empty-revs
不生成任何空修订版本,忽略它们。
--renumber-revs
如果空修订版本被剔除(通过使用--drop-empty-revs选项),依次修改其它修订版本的编号,确保编号序列是连续的。
--preserve-revprops
如果空修订版本被保留,保持这些空修订版本的属性(日志信息,作者,日期,自定义属性,等等)。如果不设定这个选项,空修订版本将仅保留初始时间戳,以及一个自动生成的日志信息,表明此修订版本由svndumpfilter处理过。
尽管svndumpfilter十分有用,能节省大量的时间,但它却是把不折不扣的双刃剑。首先,这个工具对路径语义极为敏感。仔细检查转储文件中的路径是不是以斜线开头。也许Node-path和Copyfrom-path这两个头参数对你有些帮助。
Node-path: spreadsheet/Makefile
如果这些路径以斜线开头,那么你传递给svndumpfilter include和svndumpfilter exclude的路径也必须以斜线开头(反之亦然)。如果因为某些原因转储文件中的路径没有统一使用或不使用斜线开头,也许需要修正这些路径,统一使用斜线开头或不使用斜线开头。
此外,复制操作生成的路径也会带来麻烦。Subversion支持在版本库中进行复制操作,也就是复制一个存在的路径,生成一个新的路径。问题是,svndumpfilter保留的某个文件或目录可能是由某个svndumpfilter排除的文件或目录复制而来的。也就是说,为了确保转储数据的完整性,svndumpfilter需要切断这些复制自被排除路径的文件与源文件的关系,还要将这些文件的内容以新建的方式添加到转储数据中。但是由于Subversion版本库转储文件格式中仅包含了修订版本的更改信息,因此源文件的内容基本上无法获得。如果你不能确定版本库中是否存在类似的情况,最好重新考虑一下到底保留/排除哪些路径。
备份环境注意点:
&1、确保没有其他进程访问版本库,关闭apache、svnserve服务
&2、成为版本库的管理员,如果以其他身份还原版本库,可能会改变版本库文件的访问权限,导致在恢复后依旧无法访问
&3、svnadmin recover /path/to/repos
&4、重新启动服务进程
SVN数据库整理方法
不经过dump,load操作,实现SVN数据库整理操作,先设计好调整后的目录, 然后打开版本库, 选中要调整或转移的文件(文件夹)-->右键拖住,不要松手-->然后将要转移的文件(文件夹)拖至目标文件夹-->松手-->选择move items to here-->完成
每经过这样的调整,大家都会担心历史记录是否还会存在, TortoiseSVN在默认情况下, 是不会显示出来的,需要将一个选项去除.
如此可实现基于库的调整操作,但事事不是尽如人意的,这样的一次操作下来,revision会增长好多。
我的想法是:
停止当前SVN服务,将当前的SVN库直接进行整理,就像整理存储在电脑中的文件夹一样,然后开启SVN服务,即时显示调整后的效果,哈哈..是不是有点异想天开,其实我也觉得这是不太可能的,除非使用工具访问,否则SVN库不是显示可见的,希望以后啥配置管理工具可以让管理员有这样的权限.
一、在迁出服务器执行:
> csvn stop
Stopping CSVN Console...
Waiting for CSVN Console to exit...
Waiting for CSVN Console to exit...
Stopped CSVN Console.
> csvn-httpd stop
Stopping Subversion Edge Apache Server:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& done
> svnadmin dump /home/svn/csvn/data/repositories/camp | gzip >camp_dumpfile_.gz
* Dumped revision 4495.
* Dumped revision 4496.
camp& camp_dumpfile_.gz& cpst& csvn& csvn-httpd& docm
二、在迁入服务器执行:
取迁出服务器上导出的文件camp_dumpfile_.gz;
> svnadmin create /home/csvn/data/repositories/newcamp
> gzip -d camp_dumpfile_.gz
> svnadmin load /home/csvn/data/repositories/newcamp < camp_dumpfile_
<<< Started new transaction, based on original revision 4495
&&&& * editing path : trunk/site/campost/src/dsp/frmDomItemMod.mcpp ... done.
&&&& * editing path : trunk/site/campost/src/dsp/frmIntItemMod.mcpp ... done.
------- Committed revision 4495 >>>
<<< Started new transaction, based on original revision 4496
&&&& * editing path : trunk/site/campost/src/dsp/frmDspInterCloseDisp.mcpp ... done.
------- Committed revision 4496 >>>
> csvn start
Starting CSVN Console......
CSVN Console started
Waiting for application to initialize (this may take a minute)...............................................
CSVN Console is ready at
> csvn-httpd start
Starting Subversion Edge Apache Server:&&&&&&&&&&&&
阅读(27563) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 svn一个仓库多个项目 的文章

 

随机推荐