将一个独立的Git仓库与另一个与Subversion相关的Git仓库合并:避免在合并时重复

时间:2012-08-28 23:17:31

标签: django git svn

我很高兴在我的本地主机上使用我自己的Git仓库开发一个Django项目。我正在创建分支机构,快乐地投入和合并。路径类似于:

/path/to/git/django/

结构是:

project
├── README
├── REQUIREMENTS
├── __init__.py
├── fabfile.py
├── app1
├── manage.py
├── app2
├── app3
├── app4
└── project

我的开发团队的其余成员仍然使用Subversion,这是一个包含多个项目的巨型仓库。当我在我的localhost上使用它时,我仍在使用Git(通过git-svn)。路径类似于

/path/to/giant-svn-repo/

项目就像这样:

giant-svn-repo
|── project1
|── project2
|── project3
└── project4

当我想使用远程svn repo的最新更改时,我只需要执行git-svn rebase。然后,对于新功能,我创建一个新的分支,开发,提交,签出主,合并分支与主,删除分支,然后最终的git-svn dcommit。凉。一切都运作良好。

这两个存储库(让我们称之为git-django和git-svn)现在完全独立。

现在我想将git-django添加到git-svn repo中作为一个新项目(即在名为 djangoproject 的子目录中)。我使用以下工作流程很好地工作:

  1. cd into git-svn repo
  2. 在git-svn repo中创建一个新分支
  3. 创建一个新目录来托管我的django项目
  4. 添加一个链接到我原来的Django项目的新遥控器
  5. 将遥控器合并到我的本地目录
  6. 具有相对路径 djangoproject 前缀的读取树,因此它根据git-svn repo的根目录将代码库放入正确的位置
  7. 提交更改以便将所有内容转储到正确的位置
  8. 从命令行看起来像:

    > cd /path/to/giant-svn-repo
    > git checkout -b my_django_project    
    > mkdir /path/to/giant-svn-repo/djangoproject
    > git remote add -f local_django_dev /path/to/git/django/project
    > git merge -s ours --no-commit local_django_dev/master
    > git read-tree --prefix=djangoproject -u local_django_dev/master
    > git commit -m 'Merged local_django_dev into subdirectory djangoproject'
    

    这有效,但除了django git repo在/ path / to / giant-svn-repo / djangoproject中的内容之外,它还位于存储库树的主根目录中!

    project
    ├── README
    ├── REQUIREMENTS
    ├── __init__.py
    ├── fabfile.py
    ├── djangoproject
    │   ├── README
    │   ├── REQUIREMENTS
    │   ├── __init__.py
    │   ├── fabfile.py
    │   ├── app1
    │   ├── manage.py
    │   ├── app2
    │   ├── app3
    │   ├── app4
    │   └── project
    ├── app1
    ├── manage.py
    ├── app2
    ├── app3
    ├── app4
    └── project
    

    我似乎污染了巨型svn-repo所有项目所在的父目录。

    有什么方法可以阻止这种情况发生吗?

    (顺便说一下,这一切都是在测试目录结构中完成的 - 我还没有破坏任何东西。只是想弄清楚最好的方法)

    我确信它只是(重新)为 git merge git read-tree git commit 定义了一个参数但是我几乎是我的git kung-fu的极限。

    提前致谢。

0 个答案:

没有答案