我很高兴在本地主机上的自己的 Git 存储库中开发 Django 项目。我正在创建分支,愉快地提交和合并。路径类似于:
/path/to/git/django/
结构是:
project
├── README
├── REQUIREMENTS
├── __init__.py
├── fabfile.py
├── app1
├── manage.py
├── app2
├── app3
├── app4
└── project
我的开发团队的其他成员仍在使用 Subversion,这是一个包含多个项目的大型存储库。当我在本地主机上使用它时,我仍在使用 Git(通过 git-svn)。路径类似于
/path/to/giant-svn-repo/
项目如下:
giant-svn-repo
|── project1
|── project2
|── project3
└── project4
当我想使用远程 svn repo 的最新更改时,我只需执行 git-svn rebase。然后对于新功能,我创建一个新分支,开发、提交、签出 master、将分支与 master 合并、删除分支,然后是最终的 git-svn dcommit。凉爽的。一切正常。
这两个存储库(我们称它们为 git-django 和 git-svn)现在是完全独立的。
现在我想将 git-django 作为一个新项目添加到 git-svn repo 中(即在一个名为djangoproject的子目录中)。使用以下工作流程,我的工作非常好:
- cd 进入 git-svn 仓库
- 在 git-svn 仓库中创建一个新分支
- 创建一个新目录来托管我的 django 项目
- 添加一个链接到我原来的 Django 项目的新遥控器
- 将远程合并到我的本地目录
- 以相对路径djangoproject为前缀的读取树,因此它根据 git-svn repo 的根目录将代码库放入正确的位置
- 提交更改,以便将所有内容转储到正确的位置
从命令行看起来像:
> 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
我似乎污染了giant-svn-repo的所有项目所在的父目录。
有什么办法可以阻止这种情况发生吗?
(顺便说一句,这一切都是在测试目录结构中完成的——我还没有损坏任何东西。只是想找出最好的方法)
我确信这只是(重新)为git merge、git read-tree或git commit定义了一个参数,但我几乎达到了 git kung-fu 的极限。
提前致谢。