3

我有一个不寻常的需求,我想知道 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 存储库中合并这些文件夹吗?

4

2 回答 2

1

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

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

于 2013-09-12T07:38:25.613 回答
0

您可以通过将两个版本放在不同的存储库中来创建分支,并将另一个版本用作远程。带有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 fetch, cherry-pick, 甚至merge在它们之间。

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

互联网上有很多关于 git 子模块的东西。我将从关于嵌套存储库的这个问题开始,并通过链接和文档进行工作。

这是对子树合并的解释,并将其与使用子模块进行比较。基本上,子树合并将在一个存储库中将 Py2 和 Py3 的普通分支(如Oznerol256 的答案)与具有分层组织的存储库的想法结合起来。

于 2013-09-12T10:53:26.657 回答