15

我正在处理本地 git 存储库,我需要将本地 git 推送到现有的svn 存储库中。我的 git 存储库是纯本地 git 存储库,它不是使用git svn clone.

如何将此本地 git repo 导入 svn?

最好我希望将 git 历史记录导入 SVN。

目前 SVN 存储库的结构如下:

https://svnrepohost
           /branches
           /tags
           /trunk
                  /projectA
                  /projectB
                  /newProject

我需要的是将我的 git 存储库导入到https://svnrepohost/trunk/newProject上面,假设newProject文件夹是空的。

4

4 回答 4

28

我终于通过以下步骤解决了这个问题:

  1. 在要导入的 svn 中设置适当的项目文件夹,例如http://svnrepo/svn/trunk/newProject

  2. 创建一个新的 git-svn 存储库

    git svn 克隆http://svnrepo/svn/trunk/newProject

  3. 将我们要作为远程导入的 git 存储库添加到的git-svn 存储库

    git remote add origin ../original-git-repo

  4. 从 original-git-repo 中提取所有数据

    git pull origin master --allow-unrelated-histories

  5. 针对 svn 重新定位本地存储库

    git svn 变基

  6. 将更改提交到 svn

    git svn dcommit

  7. 清理遥控器

    git远程删除原点

于 2012-07-03T23:58:35.683 回答
1

最简单的方法是只svn import使用 Git 目录。然而,这会丢失你的 Git 提交历史。

首先,通过在 Subversion 配置文件中.git设置来确保目录不会被导入。global-ignores打开你的文件(在 Windows 上~/.subversion/config会这样),找到开始部分,然后在下面添加一行,如下所示:C:\Users\username\.subversion\config[miscellany]

global-ignores = .git

(如果您已经有一行前面global-ignores =没有 a #,那么只需添加.git到该行的末尾。)

接下来,运行以下命令:

svn import <path-to-local-git-repository> https://svnrepohost/trunk/newProject

这应该将本地 Git 存储库的内容复制到您想要的服务器上。

于 2012-06-27T14:20:45.810 回答
0

您可以使用SubGit

$ svnadmin create repo.svn
$ subgit configure repo.svn                                                                                                                                                              

...                                                                                                                                                                           

            CONFIGURATION SUCCESSFUL                                                                                                                                                                                   

            Adjust '/tmp/repo.svn/conf/subgit.conf' file                                                                                                                                                               
            and then run                                                                                                                                                                                               
                subgit install "repo.svn"                                                                                                                                                                              
            to complete SubGit installation.
$ nano repo.svn/conf/subgit.conf #edit to set git.default.repository=path/to/your/bare/git/repository
$ subgit install repo.svn

我还建议您创建 Git 存储库的裸克隆并指定它的路径(在 git.default.repository 中)而不是原始存储库。IE

$ git clone --bare path/to/your/original/repository path/to/your/bare/git/repository

在“subgit install”命令之后,存储库(repo.svn 和 repo.git)将持续同步(由 Git 中的 pre-receive 钩子触发 [从推送到裸存储库开始] 并在 SVN 中预先提交)。要停止同步,您可以运行

$ subgit uninstall repo.svn
于 2012-06-22T10:43:30.047 回答
0
  • git svn 克隆http://svnrepo/svn/trunk/newProject
  • git remote add origin ../original-git-repo
  • git 获取原点
  • git checkout -b lmaster remotes/origin/master
  • git rebase 大师
  • git svn 变基
  • git svn dcommit
于 2017-10-27T01:41:31.397 回答