【问题标题】:Add a subdirectory of another project as a subtree添加另一个项目的子目录作为子树
【发布时间】:2012-02-03 01:46:56
【问题描述】:

我有一个 git 项目(一个 Django 应用程序),我想添加另一个应用程序 (https://github.com/lambdafu/django-south) 作为子树。问题是第三方存储库的根目录有一个额外的目录层。我不想弄乱 python 的加载路径、添加符号链接或额外的前缀来导入语句。有没有办法在我的项目中将south 子目录作为子树?

【问题讨论】:

  • OHHHHHH -- 今天我了解了git-subtree
  • 您是否尝试将 South 作为您项目的依赖项?
  • 那个 repo 有一个 setup.py- 除非你有充分的理由真正需要源代码,否则你应该安装 repo 并在需要新 HEAD 时进行更新。
  • 我实际上正在寻找如何将 repo 的子目录添加为子树的答案。有人知道吗?

标签: python django git


【解决方案1】:

我们调用南项目的根目录repo

您可以通过添加__init__.pyrepo 设为python 模块,然后将repo.south 添加到已安装的应用程序中。

(借自here

您还可以将repo 添加为git submodule,这样您就可以在项目的特定版本中维护南的特定修订。

【讨论】:

  • 对,这是我不想做的“为导入语句添加额外前缀”选项。这也意味着在子目录中维护一个__init__.py 文件。如果我走可能不会导致合并冲突的子树路线,但如果我使用子模块,我不知道维护它的方便方法。
  • 对了。因此,您唯一的解决方案是完全避免更改目录结构。据我所知,没有办法克隆少于整个 git repo。我的猜测是符号链接最终会变得最简单。祝你好运!
【解决方案2】:

您是否尝试将 South 作为依赖项包含在内?因为听起来就是这样。如果是这样,有比将目录包含在项目树中更好的方法。这很麻烦,我们有相应的工具。

你使用pip吗? virtualenv 怎么样?如果是这样,pip install -e git+https://github.com/lambdafu/django-south#egg=south,你会很高兴的。要在安装后更新到最新的 HEAD,您只需添加 -U 标志。您甚至可以将您的需求保存在一个 req 文件(pip freeze > requirements.txtpip install -r requirements.txt)中,以将它们保存在版本控制中。

如果没有,为什么不呢?

【讨论】:

  • 我通常使用 pip,但在这种情况下,我正在部署到一个偏执的系统管理员的服务器,该系统管理员不允许传出连接或添加系统范围的 python 包。这个想法是将我的所有依赖项都放在源代码树中,因此只需要 git push over ssh 即可。有点像 nodejs 做模块的方式。也许我可以通过让他安装 pip 并使用它的捆绑功能来解决它​​。
  • 您可以简单地从现有的 virtualenv (tar+zip) 中复制环境,然后在服务器上展开它。无需外部连接。
  • 没错。这意味着也不会安装系统范围的软件包。您只需要为运行 Python 应用程序的任何用户安装在用户空间中的 virtualenv。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 2016-09-20
相关资源
最近更新 更多