【问题标题】:How to switch existing Intellij IDEA projects from SVN to Git SVN如何将现有 Intellij IDEA 项目从 SVN 切换到 Git SVN
【发布时间】:2011-10-27 12:05:29
【问题描述】:

我目前有与 SVN 存储库相关联的现有 Intellij IDEA 项目。我正在考虑将这些项目切换为使用 Git SVN,因为当我没有连接到 SVN 存储库时,我发现需要有一个本地版本控制系统。

由于 Intellij IDEA 不提供 Git SVN 桥,我从命令行运行以下命令将 SVN 存储库克隆到 Git:-

git svn clone --stdlayout --username myuser http://svnrepo/myproject -A authors.txt myproject

克隆 SVN 存储库后,我使用 Intellij IDEA 打开基于 Git 的项目。此时,Intellij IDEA 抱怨缺少版本控制目录。我发现 Intellij IDEA 仍然记得旧的 SVN 配置。由于项目现在包含 .git 目录而不是 .svn 目录,因此 Intellij IDEA 会感到困惑,它现在不知道如何连接到任何存储库。

对我有用的唯一解决方法是执行以下操作:-

  • 在 SVN 存储库中创建一个全新的项目(空项目)。
  • 执行“git svn clone”。
  • 使用 Intellij 创建项目。
  • 此时,Intellij IDEA 检测到 .git 目录并提示我是否将新创建的文件添加到 Git 中。
  • 将所有内容从基于 SVN 的项目复制到基于 Git 的项目。

也就是说,我不能在一台机器上的这个 Intellij IDEA 项目上运行 Git,同时在另一台机器上的这个 Intellij IDEA 项目上使用 SVN。两台机器都必须使用 Git,否则 Intellij IDEA 将无法提交到版本控制存储库。我对此很好,我可以在我所有的机器上使用 Git。但是,我试图找到一种方法,不为我现有的所有基于 SVN 的项目创建全新的基于 Git 的项目。这非常繁琐,因为我现在有很多 SVN 项目需要使用 Git 来运行。

有没有更好的解决方案让我使用 Intellij IDEA 将我的 SVN 项目切换到 Git?

谢谢。

【问题讨论】:

    标签: git svn intellij-idea git-svn


    【解决方案1】:

    您可以从File | Settings | Version Control 中为当前项目选择版本控制系统。该设置存储在其中一个项目文件 (.idea/vcs.xml) 中,因此如果您不将该文件提交给版本控制,您可以在不同的机器上使用不同的版本控制系统。

    【讨论】:

    • 谢谢。我添加了 Git,然后以 vcs.xml 中的方式离开了 SVN。这似乎让我可以在一台机器上使用 Git,在另一台机器上使用 SVN。
    • Android Studio 1.2.2 没有设置 |项目设置。我可以通过在设置 | 下删除带有 Subversion 的条目来删除 SVN。版本控制。这将其更改为 和菜单项 VCS |启用版本控制集成然后可用。我用它来启用 Git。这也改变了 .idea/vcs.xml。
    • 不再有“项目设置”,所有设置都在同一个对话框中。但答案仍然有效。
    【解决方案2】:

    您可以使用版本控制设置对话框中的 VCS 下拉菜单

    【讨论】:

      【解决方案3】:

      顺便说一句,您可以在 IntelliJ Idea 中使用内置的 Git 支持。将SubGit 安装到您的 Subversion 存储库中,并像往常一样使用创建的 Git 存储库,即根本没有 git-svn。

      SubGit 在服务器端工作,并在每次传入修改时同步 Subversion 和 Git 存储库。

      【讨论】:

      • 我真的很想使用 SubGit(我不介意为此付费),但是我们的存储库,就像那里的许多存储库一样,是一个遗留存储库,其中有很多 SubGit 无法处理的奇怪之处(外部的旧提交,过去奇怪的分支策略等)。其中一些是我们近年来修复的,但很多无法修复或没有成本理由来修复。
      • @Quartz 从我们的经验来看,总是与旧的和丑陋的 Subversion 存储库有关,无论是通过转储/加载周期修复它,还是在将其导入 Git 时删除一些旧版本。请随时通过 support@subgit.com 与我们联系,并描述您的 Subversion 存储库的所有丑陋之处 :) 我们将尝试为您的特定情况提出可能的解决方案;我们还可以更改我们计划在不久的将来实施的功能的优先级。
      【解决方案4】:

      对于基于文件的项目,您可以设置 smudge 过滤器。

      在 .git/info/attributes(或 .gitattributes)中添加以下行:

      /*.ipr   filter=vcs
      

      然后运行以下命令(我将本地脚本存储在 ~/bin 中,但你可以将它们放在任何地方):

      git config --global filter.vcs.smudge /path/to/filter-vcs-git
      git config --global filter.vcs.clean /path/to/filter-vcs-svn
      

      我的 filter-vcs-git(涂抹 vcsDirectoryMappings mapping 行以使用 git):

      #!/bin/bash
      sed 's/vcs="svn"/vcs="Git"/'
      

      我的 filter-vcs-svn(清理 vcsDirectoryMappings mapping 行以使用 svn):

      #!/bin/bash
      sed 's/vcs="Git"/vcs="svn"/'
      

      这仅适用于带有 sed 的 *NIX 系统。但是您也应该能够在 Windows 上执行此操作,方法是安装 sed 并编写一个 .bat 脚本来执行与上述 shell 脚本相同的操作。过滤器只是从标准输入中获取文件过滤它并将过滤后的文件吐出到标准输出。

      下次签出 .ipr 文件时,它将被过滤为使用 git,当您添加它 (git add *.ipr) 时,它将被清理,以便提交的文件使用 svn。这似乎可以与所有 git 工具(如 git diff)一起干净地工作,这些工具被认为在那条线上没有任何变化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-07
        • 1970-01-01
        • 2020-04-06
        • 1970-01-01
        • 1970-01-01
        • 2011-11-04
        相关资源
        最近更新 更多