iOS 怎么把svn中一个svn仓库迁移中的文件迁移到另一个svn仓库迁移中?

15146人阅读
(在进行下面的操作时,请注意备份仓库数据,以免操作出错,损坏数据;同时保证需要迁移的项目,都已经commit,以免丢失修改)
1.首先关闭两台服务器的svn所有服务,比如(apache、svn),(以避免在进行迁移时又有其他的用户访问提交,更新什么的...&&
2.将ServerA上的&项目pro1所在的仓库进行备份,使用命令:
&&&&&&svnadmin&dump&oldrepos&&&reposdumpfile
&&&&&&上面的&oldrepos&表示服务器Server1上需要备份的仓库,如:E:\svn_root\repos1;
&&&&&&&reposdumpfile表示一个中转的文件,文件名随意;
&&&&&&&运行完上面的命名后,文件reposdumpfile就存储了仓库oldrepos的信息和所有项目;
3.如果需要将Server&A上repos1中的所有项目迁移到Server2上,则将reposdumpfile文件直接拷贝到Server2上,然后转到&步骤5;
4.如果我们只需要repos1仓库中的pro1则我们需还要对reposdumpfile文件进行过滤,命令如下:
&&&&&&&svndumpfilter&include&pro1&&&reposdumpfile&&pro1dumpfile
&&&&&&&上面的&include&表示&包含的意思,也就是说,将reposdumpfile中的&pro1&的项目取来放到文件&pro1dumpfile&中;如果使用&exclude&这表示相反的意思,将不是项目pro1的项目存放到文件中去;然后将pro1dumpfile文件拷贝到Server2上;
5.在Server2上运行如下命令,则完成了项目的迁移;
&&&&&&svnadmin&load&newrepos&&&pro1dumpfile
&&&&&&上面的newrepos表示:Server2电脑上的&svn仓库的路径&如:F:\svn_root\repos2;
6.最后打开svn服务,这样就成功的将项目迁移到了其他仓库中
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:596527次
积分:4470
积分:4470
排名:第5876名
原创:114篇
评论:30条
(1)(2)(2)(11)(2)(2)(1)(2)(4)(1)(1)(1)(1)(2)(2)(1)(1)(3)(1)(2)(2)(3)(2)(21)(4)(1)(23)(8)(9)由于磁盘空间满了,所以要把仓库移动到另一个分区里去,下面记录下来整个SVN仓库迁移步骤,供同学们参考学习。先付上官方推荐知道方法。
以下是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仓库迁移步骤1.关掉SVN服务,防止有人提交用kill 命令关掉进程2.使用svnadmin dump 命令导出库, 格式: svnadmin dump /var/svn/repos/log_api/ & /data/svn/bak/log_api.bak3.使用svnadmin create 命令建新库,格式: svnadmin create /data/svn/repos/log_api4.使用svnadmin load 命令导入库,格式: svnadmin load /data/svn/repos/log_api & /data/svn/bak/log_api.bak5.重启SVN服务 svnserve -d -T -r /data/svn/repos如果不用第3步创建新库,直接用第4步导入一个目录会报'format NOT FOND' 的错误
如果本文帮到了您,请分享到朋友圈或推荐给好友!
更多 PHP 相关推荐
网络编程 - 分类栏目如何导入另一个 Git库到现有的Git库并保留提交记录 - 推酷
如何导入另一个 Git库到现有的Git库并保留提交记录
问题描述:
我在本地有两个Git库项目(D1=PC项目&
包含通用项目
,D2=移动项目&
包含通用项目
这两个项目在同一目录下
因为这两个项目使用的通用项目是一样的如数据库访问等
只有显示层(view)不一样而已,因为在之前没有很好的规划而导致出现现在的问题,即如果D1里更改了通用项目的文件
那么D2需要先将D1通用项目的更改先合并过来然后再处理D2项目(防止出现差异导致出现问题),反之也是一样,所以如果通用项目文件经常更新时,我就需要浪费大量的时间在合并这两个Git仓库上
所以要现在要将把这两个库项目合并到一个库里以分支的方式(D1,D2)进行管理(开发PC项目时切换到D1分支,开发移动项目时切换到D2分支)
然后通用项目分别从D1,D2分支迁移出来到新分支Common
进行管理,然后D1和D2删除通用项目文件
现在我如何将一个库合并到另一个库呢(提交记录必须不能丢失)?经过几天的测试终于解决
需要解决的问题:
把D2仓库的所有内容和提交记录合并到D1 仓库中中,然后以分支的方式来管理D2项目
如何从D2仓库和D1仓库迁移出通用项目文件并保留提交记录以后会单独处理
目前的目录结构
& & & |--&
& & & |--&
|-- & D2 &合并D2仓库文件和提交记录到D1,以分支的方式管理
|--& D2.txt
& & & & & &
解决方案:
先看下D1和D2的提交记录
D2仓库的提交记录
D1仓库的提交记录
使用remote加fetch的方法将D2的文件和提交合并到D1
切换到D1 Git仓库
使用“git remote add d2 ../d2”将D2仓库中所有信息以远程仓库的方式添加到D1的新建d2分支里
使用“git fetch --all”获取d2远程仓库的所有信息
切换到D1仓库的主分支master
合并已添加的远程分支d2到你需要的分支
处理合并后的分支,如删除远程分支不需要的分支,整理或精简合并后的提交历史,删除D2项目文件等(GIT会将两个仓库的提交按时间的方式来进行合并)
使用pull直接进行合并
&使用“git pull &远程分支地址”直接合并,应该在新的分支里进行该操作,然后再进行合
处理合并后的分支,如删除远程分支不需要的分支,整理或精简合并后的提交历史,删除D2项目文件等(GIT会将两个仓库的提交按时间的方式来进行合并)
以上两种方式都可以将一个Git仓库的文件和提交合并到另一个Git仓库(Pull更简单点)
因为对git并不是太了解所以并不太清楚这个之间的关系和区别, 有知道的大神或有其他解决方案请告知不胜感激
stackoverflow上有人说可以使用“git-fast-export”来实现,但搞了一二天愣是没有实现
因为之前测试时没有截图所以也忘记错误是什么了,现在也懒的再测试一遍
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致SVN数据迁移:只剩下仓库如何迁移
实验室在前一段时间做数据迁移,在201机器上安装了SVN服务器,把209服务器的数据迁移到201服务器上,于是采用了如下办法:
1. 在201服务器安装SVN Server并建立仓库
2. 把209中的数据CHECKOUT出来,因为都是文档一类的东西,版本信息不重要。所以把CHECKOUT出来的数据再CHECKIN到201中。
3. 把209的SVN卸载
后来他们反馈说有文档丢失,希望恢复原来209的SVN,重做迁移。但是209中只剩下原有的仓库:D:\reps.可以直接用这个仓库信息进行迁移吗?
直接将 209 上的repository 拷贝到 201 上,再将svn服务指向它即可
--- 共有 2 条评论 ---
: 我一直是这么干的,相当好使,而且此法也适用于不同操作系统,曾经多次将 linux下的 repo 拷贝至 win 下,直接用,好使
直接拷贝是可以得是吧?我做个实验看看
svnadmin dump 没见过?
--- 共有 1 条评论 ---
知道,但是没有用这种方法。目前的状况是SVN服务器已经写在,只有一个svn reps。如果重装SVN,可以把这个svn reps关联起来吗?
仓库整个目录直接拿过去就行博客访问: 1873357
博文数量: 478
博客积分: 3010
博客等级: 中校
技术积分: 7222
注册时间:
学习是一种信仰。
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 项目管理
以下是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:&&&&&&&&&&&&
阅读(21114) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。}

我要回帖

更多关于 仓库中宝贝无法上架 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信