2

我很高兴在本地主机上的自己的 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的子目录中)。使用以下工作流程,我的工作非常好:

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

从命令行看起来像:

> 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 mergegit read-treegit commit定义了一个参数,但我几乎达到了 git kung-fu 的极限。

提前致谢。

4

0 回答 0