Bash 修复覆盖的svn文本库等
我的情况是,我使用gitHub来管理我从使用svn的开源项目中提取的回购协议的更改 一切都很好,直到我意识到在使用Bash 修复覆盖的svn文本库等,bash,svn,unix,Bash,Svn,Unix,我的情况是,我使用gitHub来管理我从使用svn的开源项目中提取的回购协议的更改 一切都很好,直到我意识到在使用sed更改内容时,我已经更改了svn跟踪文件。要手动修复的问题太多了 我基本上有一个大的规模 我需要这些东西完好无损,所以我想我会做以下事情: 创建基于原始svn的代码的新本地工作副本 递归删除此树中所有非“.svn”文件夹。也就是说,我的项目树中只有“.svn”文件夹及其内容 递归删除“gitHub”树中的所有“.svn”文件夹 跨“.svn”文件夹复制到“gitHub”树 三个问
sed
更改内容时,我已经更改了svn跟踪文件。要手动修复的问题太多了
我基本上有一个大的规模
我需要这些东西完好无损,所以我想我会做以下事情:
- 这样做明智吗
- 如果没有,有没有关于如何恢复svn的建议
- 如果在正确的轨道上,我如何实现步骤2?即,递归地 是否删除“.svn”文件夹以外的所有内容?我发现了很多东西 在谷歌上做第三步,但这是那些翻转
find-svn-exec some_command“{}”+
查找所有Subversion元数据文件夹并对其运行命令。将some_命令
替换为执行递归恢复到上一个已知工作状态所需的任何git命令
另一个选项是在最后一个已知的工作状态下创建分支。从该分支开始,合并除元数据文件夹更改之外的所有更改。根据元数据被破坏的时间长短,这可能是一种更简单的方法
还要注意,如果您使用的是Subversion 1.7,这会更容易一些,因为每个工作副本只有一个.svn
文件夹,而不是每个目录一个。在这种情况下,使用find
可能有点过分
如果需要删除“
.svn
”文件夹以外的所有内容,请尝试命令查找$folder-键入f | grep-v'.svn'| xargs rm-f
。这将删除当前目录(递归到子目录)中路径中没有“.svn”的所有文件。发现我最初提出的方法效果很好
采取的步骤
- 创建与“gitrepos”等效的“svnrepos”以具有两个子系统 保存实际回购和原始文件集的目录:
mkdir/home/build/REPOS/svnrepos&&mkdir/home/build/REPOS/svnrepos/REPOS&&mkdir/home/build/REPOS/svnrepos/files
- 创建本地svn回购:
cd/home/build/REPOS/svnrepos/REPOS&&svnadmin创建项目名称
- 抓取原始的源文件。这将被称为“项目名称”:
cd/home/build/REPOS/svnrepos/files&&wgethttp://site.net/project_name.tar.gz &&tar-xzf项目名称.tar.gz
- 将原始源文件导入新的本地repo:
svn导入/home/build/REPOS/svnrepos/files/project\u namefile:///home/build/REPOS/svnrepos/repos/project_name -m“项目名称的初始导入”
- 重命名现有的“GIT_Project”文件夹,因为我们将使用此名称作为 临时svn工作文件夹:
cd/home/build/REPOS/gitrepos&&mv GIT\u项目GIT\u项目GIT\u GIT
- 创建新的“GIT_项目”文件夹,并将svn repo签出到以下位置:
mkdir GIT_项目和svn公司file:///home/build/REPOS/svnrepos/repos/project_name /主页/构建/回购/gitrepos/GIT_项目
- 递归删除新临时svn工作文件夹中的每个文件 它不在“.svn”目录树下。离开文件夹结构 完整的:
cd/home/build/REPOS/gitrepos/GIT\u项目&&find-键入f | grep-v'.svn'| xargs rm-f
- 递归删除原始git版本中的每个“.svn”文件夹 文件夹:
cd/home/build/REPOS/gitrepos/GIT\u Project\u GIT&&rm-rf
find-键入d-name.svn`
- 从截断的临时svn工作文件夹创建tar文件:
cd/home/build/REPOS/gitrepos&&tar-czf svn.tgz GIT_项目
- 删除临时svn工作文件夹:
rm-fr GIT_项目
- 将git版本文件夹重命名回其原始名称:
mv GIT\u项目\u GIT GIT\u项目
- 解压缩截断的临时svn工作文件夹tar文件以添加 已将“.svn”文件夹和内容更新到git版本文件夹:
tar-xzkf svn.tgz
- 获取git版本文件夹的svn状态。它将显示已删除
前缀为“?”的文件或文件夹以及缺少前缀为“”的文件或文件夹 a'!'前缀将列表保存到外部文件,并使用“查找和删除” 替换,将其分别更改为“svn添加”和“svn删除”。 请记住跳过不应添加到的文件和文件夹 svn:
cd GIT\u项目和svn状态
- 使用修改后的svn状态输出更新svn:
svn add fileORfolder_1&&svn add fileORfolder_2…&&svn添加文件或文件夹
svn delete fileORfolder_1&&svn delete fileORfolder_2…&&svn删除文件或文件夹
svn commit-m“重新调整svn和git”
谢谢,但不幸的是,我不能按照建议的路线走。我已尝试按照链接页面中的建议复制某些实例的元数据,这似乎有效。因此,对于执行步骤2的任何建议,我们都将不胜感激。@Dayo-请注意,“似乎有效”和“似乎有效”之间有一个非常重要的区别