【问题标题】:Git: Merge one folder inside a repoGit:在回购中合并一个文件夹
【发布时间】:2013-09-12 01:35:50
【问题描述】:

我有一个不寻常的需求,我想知道 Git 是否可以满足它。

我想将我的 Python 包 python_toolbox 移植到 Python 3。但我不喜欢使用 2to3 的想法,也不支持使用相同代码的 Python 2 和 Python 3。 (因为我的代码要漂亮对我来说很重要,而且我发现为 Python 2 和 Python 3 编写的代码并不漂亮。)

我想要的是有 2 个单独的源文件夹,一个用于 Python 2.x,一个用于 Python 3.x。这将允许我编写针对各自主要 Python 版本量身定制的每个版本的代码。我希望这两个文件夹位于同一个仓库中,setup.py 将根据运行它的 Python 版本在它们之间动态选择。到现在为止还挺好。

现在,我需要帮助:我希望能够从我的 Python 2.x 源文件夹合并到我的 Python 3.x 源文件夹。为什么?当我在 Python 2.x 文件夹上开发一个功能时,我也希望在 Python 3.x 版本上拥有这些功能。我不想手动复制它们。我想将它们合并到 Python 3.x 文件夹中,并且我完全希望有美妙的合并失败,我将不得不使用我的判断来决定如何将为 Python 2.x 实现的功能合并到修改过的代码中对于 Python 3.x。

问题是:我该怎么做?这些文件夹是 Git 存储库中的文件夹,它们本身不是 Git 存储库。我曾考虑过使用以前从未使用过的 Git 子模块,但在网上阅读它们却描绘出一幅可怕的画面。 (“sobmodules”这个词已经被扔掉了。)

还有什么其他想法可以在我的 Git 存储库中合并这些文件夹吗?

【问题讨论】:

  • 很久很久以前,有人写过“复杂胜于复杂”。 “实用胜于纯洁”。我会使用已知有效的东西

标签: python git python-3.x merge


【解决方案1】:

我建议您使用分支。将您的分支专用于任一版本。您可以使用git branch --orphan 创建一个完全独立的分支。 (这可能会使合并变得更加困难,因为 git 无法找到共同的祖先。)

无论如何,如果您采用该解决方案,您将能够从一个版本合并到另一个版本。您还可以在一个命令中克隆两个版本(因为它们在同一个 repo 中)。 但是,要同时打开两个版本,您需要克隆两次 repo,以便同时签出两个不同的分支。

【讨论】:

  • 我同意,但我不建议在这种情况下使用--orphan
  • 我添加了--orphan 只是为了说明它已经存在并且可以使用了。我还描述了这样做的风险。
【解决方案2】:

您可以通过将两个版本放在不同的存储库中来创建分支,并将另一个版本用作远程。带有setup.py 和任何 PyPi 元信息、自述文件等的顶级目录也将是一个存储库。目录布局如下所示:

/root/
   .git/
   setup.py
   read.me
   python2/
      .git/
      source.py
   python3/
      .git/
      source.py

可以链接两个子存储库,以便您可以在它们之间合并例如

cd /root/python2
git remote add python3 ../python3
cd /root/python3
git remote add python2 ../python2

然后你可以在它们之间做通常的git fetchcherry-pick,甚至merge

在主存储库中,为了发布内容,您可以使用 git submodules feature 来协调您希望签出的各个子存储库的哪个版本,以便获得一致的项目视图。

互联网上有很多关于 git 子模块的东西。我将从this question on nested repos 开始,然后按照您的方式浏览链接和文档。

Here's an explanation of subtree 合并并将其与使用子模块进行比较。基本上,子树合并将把 Py2 和 Py3 的普通分支(如 the answer by Oznerol256 中的一个 repo 中)的想法与分层组织的 repo 的想法结合起来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2013-07-18
    • 2013-08-13
    • 1970-01-01
    • 2014-02-14
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多