Python 为新分支上的GitHub上的存储库作出贡献
假设某人拥有一个存储库,其中只有一个Python 为新分支上的GitHub上的存储库作出贡献,python,git,python-3.x,github,Python,Git,Python 3.x,Github,假设某人拥有一个存储库,其中只有一个master托管与python2.7.X兼容的代码。我希望通过自己对新分支new\u branch的更改为该存储库做出贡献,以提供与python3兼容的存储库变体 我遵循以下步骤: 我以我的帐户在GitHub上创建了存储库 我在本地机器上克隆了我的叉子 我在本地创建了一个新分支 我做了相关的修改 我在GitHub上提交并将更改推送到我自己的fork 我在浏览器上转到官方存储库的GitHub页面,请求一个pull请求 上述操作有效,但它执行了一个从我的账户:新的
master
托管与python2.7.X
兼容的代码。我希望通过自己对新分支new\u branch
的更改为该存储库做出贡献,以提供与python3
兼容的存储库变体
我遵循以下步骤:
上述操作有效,但它执行了一个从
我的账户:新的分支机构到官方账户:主账户的拉取请求。这不是我想要的,因为python2.7.x
和python3
彼此不兼容。我想做的是在官方存储库上创建一个新分支机构的PR(例如,使用相同的名称“新分支机构”
)。我该怎么做?这可能吗?你真的不想这样做。但首先我会解释如何做,然后我会回来解释为什么不做
GitHub有一个非常好的概述,特别是“更改分支范围和目标存储库”一节。如果您使用主题分支,并让上游所有者创建一个同名的主题分支,这是最简单的;然后你只需下拉菜单,菜单上写着“base:master”,选项就在那里,他只需点击“merge”按钮,就不会有任何惊喜了
那么,你为什么不想这样做呢
首先,它不适合GitHub模型。主题分支永远与主分支并行,并且有多个分支,这使得维护和可视化变得更加困难
第二,您的代码需要一个git URL和一个https URL。您需要人们能够共享链接,pip安装
从树的顶部,只需克隆repo,而不是克隆然后签出另一个分支,等等。这都意味着您的代码必须位于主分支上
第三,如果您希望人们能够在PyPI上安装您的3.x版本,在readthedocs上查找文档,等等,那么您需要一个具有单一源代码树的单一项目。大多数这样的网站只有一个最新版本,而不是每个Python版本的最新版本,而且肯定不是同一版本的多个变体。(您可以完全安装fork项目,并创建一个单独的foo3
项目。但是对于人们来说,能够pip安装foo
要比让他们尝试、失败、这么做并询问为什么不起作用容易得多,并且被告知他们可能有python3,需要pip安装foo3
)
如何将两个版本合并到一个包中?应该有最新的建议,但简单地说:如果有可能创建一个在两个版本上运行的代码库,那就很理想了;如果没有,并且如果在安装时运行2to3
或3to2
无法使事情正常进行,请为3.x代码创建一个并行目录(例如,在foo
旁边的foo3
),并在安装时选择适当的目录。(您始终可以从这一点开始,逐步朝着统一的代码库工作。)您可以通过单击pull请求顶部的edit按钮来编辑基本分支。。。但我不确定这是否真的可以创建一个新的分支;上游可能需要有该分支才能开始。(顺便说一句,通过创建一个在2和3上都运行的版本来在库中支持Python 3似乎现在更为常见…)谢谢@Wooble。在这个主题上,我实际上使用了2to3
来移植代码。您知道2to3
是否已经输出了与两者兼容的代码?它不知道。根据我的经验,也不太可能生成在Python3上工作得很好的代码。有一些很好的信息。@Wooble:只要做了足够的工作,您实际上可以使2to3
生成在2.x中运行的代码(使用six.foo import*
和\uuuuuu future\uuuu
语句中的一些)和3.x。我已经做过几次了。但这仍然比在安装时让它生成3.x代码并使用2.x的原始代码需要更多的工作,唯一的微小好处是,有时您可以在开发目录之外使用该包;一旦我意识到这一点,我就停止了尝试。我现在只使用2to3
(和3to2
)作为移植时的一个linting工具或手动重构辅助工具。谢谢,关于最后一段:运行2to3
,然后依次运行3to2
,理论上会生成同时在Python2和Python3中运行的Python代码吗,我从你的帖子中了解到,除非GitHub回购所有者创建主题分支,否则我无法针对它进行公关。换句话说,我不能PR到一个尚未创建的分支,对吗?@user815423426:在3.x中运行3to2
code从来都不是一个真正的目标2to3
,至少参与其中的一些人在某个时候希望这样,所以我怀疑你只使用2to3
比两者都要幸运。也许futurize
代替/配合3to2
会做得更好。2to3
的更好用法是生成一些3.x代码,找出错误并修复,然后手动尝试将原始代码和3.x代码合并在一起(自由使用six
和modernize
),并使用3to2
来验证它没有提出任何您没有想到的建议。@user815423426:另外,如果 2to3
几乎给了你有用的3。x代码,你可能需要考虑调整你的2。x代码,这样它仍然能在2。x和<