Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 修复覆盖的svn文本库等_Bash_Svn_Unix - Fatal编程技术网

Bash 修复覆盖的svn文本库等

Bash 修复覆盖的svn文本库等,bash,svn,unix,Bash,Svn,Unix,我的情况是,我使用gitHub来管理我从使用svn的开源项目中提取的回购协议的更改 一切都很好,直到我意识到在使用sed更改内容时,我已经更改了svn跟踪文件。要手动修复的问题太多了 我基本上有一个大的规模 我需要这些东西完好无损,所以我想我会做以下事情: 创建基于原始svn的代码的新本地工作副本 递归删除此树中所有非“.svn”文件夹。也就是说,我的项目树中只有“.svn”文件夹及其内容 递归删除“gitHub”树中的所有“.svn”文件夹 跨“.svn”文件夹复制到“gitHub”树 三个问

我的情况是,我使用gitHub来管理我从使用svn的开源项目中提取的回购协议的更改

一切都很好,直到我意识到在使用
sed
更改内容时,我已经更改了svn跟踪文件。要手动修复的问题太多了

我基本上有一个大的规模

我需要这些东西完好无损,所以我想我会做以下事情:

  • 创建基于原始svn的代码的新本地工作副本
  • 递归删除此树中所有非“.svn”文件夹。也就是说,我的项目树中只有“.svn”文件夹及其内容
  • 递归删除“gitHub”树中的所有“.svn”文件夹
  • 跨“.svn”文件夹复制到“gitHub”树
  • 三个问题:

    • 这样做明智吗
    • 如果没有,有没有关于如何恢复svn的建议
    • 如果在正确的轨道上,我如何实现步骤2?即,递归地 是否删除“.svn”文件夹以外的所有内容?我发现了很多东西 在谷歌上做第三步,但这是那些翻转

    通常,不要在目录之间复制Subversion元数据文件夹。这样做很容易陷入麻烦

    相反,请尝试创建一个脚本,该脚本将还原对Subversion元数据所做的更改。您可以使用命令
    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-请注意,“似乎有效”和“似乎有效”之间有一个非常重要的区别