Внесение вклада в хранилище GitHub на новом филиале

Скажем, кому-то принадлежит репозиторий только с одним хостинговым кодом, который совместим с Python 2.7.X Я хотел бы внести свой вклад в этот репозиторий со своими собственными изменениями в новом ветви new_branch чтобы предложить вариант репозитория, совместимого с Python 3 .

Я последовал следующим шагам:

  1. Я разветвил репозиторий на GitHub на моем аккаунте
  2. Я клонировал свою вилку на своей локальной машине
  3. Я создал новую ветку new_branch локально
  4. Я внес соответствующие изменения
  5. Я совершил и внес изменения в свою собственную вилку на GitHub
  6. Я отправился в браузер на страницу GitHub официального репозитория и попросил запрос на вытягивание

Приведенное выше, но оно выполнило запрос на "my_account:new_branch" с "my_account:new_branch" на "official_account:master" . Это не то, что я хочу, так как Python 2.7.x и Python 3 несовместимы друг с другом. То, что я хотел бы сделать, это создать PR для новой ветки в официальном репозитории (например, с тем же именем "new_branch" ). Как я могу это сделать? Это вообще возможно?

Вы действительно не хотите так поступать. Но сначала я объясню, как это сделать, затем я вернусь, чтобы объяснить, почему бы и нет.

Использование запросов Pull в GitHub имеет довольно хороший обзор, в частности раздел «Изменение диапазона филиалов и репозитория получателей». Это проще всего, если вы используете ветвь темы и имеете создателя восходящего потока для создания ветви темы с тем же именем; то вы просто сбрасываете меню, где говорится «base: master», и выбор будет прямо там, и он может просто нажать кнопку «merge» и не будет никаких сюрпризов.

Итак, почему вы не хотите так поступать?

Во-первых, это не соответствует модели GitHub. Тематические ветви, которые живут вечно параллельно с ведущей ветвью и имеют несколько вилок, делают вещи сложнее поддерживать и визуализировать.

Во-вторых, вам нужен как URL-адрес git, так и URL-адрес https для вашего кода. Вам нужно, чтобы люди могли обмениваться ссылками, pip install сверху дерева, просто клонировать репо вместо клонирования, а затем проверять другую ветку и т. Д. Это означает, что ваш код должен находиться на главной ветке.

В-третьих, если вы хотите, чтобы люди могли установить версию 3.x из PyPI, найти документы в readthedocs и т. Д., Вам нужен один проект с единственным деревом источника. Большинство таких сайтов имеют единственную последнюю версию, а не последнюю версию для каждой версии Python, и определенно не несколько вариантов одной и той же версии. (Вы можете установить полностью вилку проекта и создать отдельный проект foo3 но людям гораздо проще иметь возможность pip install foo а не пытаться это сделать, не получится, прийти к SO и спросить, почему это не работает, и, как им сказали, у них, вероятно, есть Python 3, и вместо этого нужно pip install foo3 .)

Как объединить две версии в один пакет? Документы портирования должны иметь самые современные рекомендации, но кратко: если вообще возможно создать единую кодовую базу, которая работает в обеих версиях, это идеально; если нет, и если вы не можете заставить все работать, запустив 2to3 или 3to2 во время установки, создайте параллельный каталог для кода 3.x (например, foo3 рядом с foo ) и выберите соответствующий каталог во время установки. (Вы всегда можете начать с этого и постепенно работать над единой кодовой базой.)