GitHub не разрешает разветвление вилки, если у вас есть вилка?

Есть 3 репозитория:

  1. Существует репозиторий OpenAI Baselines: https://github.com/openai/baselines.
  2. У меня есть его ответвление: https://github.com/sytelus/baselines.
  3. У другого пользователя есть свой форк: https://github.com/hill-a/stable-baselines< /а>.

Теперь я хочу разветвить #3, т.е. https://github.com/hill-a/stable-baselines. Однако GitHub не разрешает этого, говоря: «Вы уже разветвили стабильные базовые версии». На самом деле у меня нет форка стабильных базовых показателей, а только его родитель. Так что сообщение неверное. В любом случае, это не имеет для меня никакого смысла. № 3 теперь сильно разошлись и имеют много разных функций. Я хочу отправить запрос на извлечение обоим. Однако без обеих вилок я не могу этого сделать.

Любое решение?


person Shital Shah    schedule 01.11.2019    source источник
comment
Разве не было бы достаточно добавить вторую вилку в качестве удаленной?   -  person Lasse V. Karlsen    schedule 01.11.2019


Ответы (2)


действительно невозможно разветвить ветвь.

Если репозиторий № 3 разошелся, владельцу № 3 имеет смысл создать отдельный (нефорк) репозиторий с его содержимым, который вы затем разветвите, чтобы включить PR.

person VonC    schedule 01.11.2019
comment
Что, если владелец все еще хочет иметь возможность отправлять запросы на вытягивание для частей проекта, которые еще не расходятся? Это ограничение вообще не имеет смысла. - person Shital Shah; 01.11.2019
comment
@ShitalShah, тогда владелец отправляет PR из своей вилки, но при необходимости также делает те же коммиты в отдельном репозитории. - person VonC; 01.11.2019

Хотя @VonC указал на то, что невозможно иметь две разные вилки вилок, я хочу добавить к этому ответу две вещи:

Во-первых, это кажется неудачным дизайнерским решением GitHub, и нет никаких технических причин не разрешать это. Каждое репо должно иметь возможность указывать на любой восходящий поток, чтобы включить механизм PR для работы. Для платформы, которая предназначена для совместной разработки, это довольно ошеломляющее ограничение.

Во-вторых, я хочу предоставить вам возможность по-прежнему делать это, но с дополнительной работой с вашей стороны. Допустим, есть репозиторий R и два их форка R1 и R2 некоторыми пользователями. Вы хотите иметь возможность работать с R, R1 и R2 и отправлять им свои запросы на извлечение. Вот как вы можете это сделать:

  1. Клонируйте R локально, а затем создайте из него новый репозиторий github. Это будет означать, что ваш репозиторий не будет отображаться как форк, и вы не сможете отправлять PR из него в R.
  2. Добавьте пульты для каждой вилки, используя git remote add r1_fork https://github.com/<user1>/R1.git.
  3. Для каждого форка создайте свою ветку, используя git checkout -b r1_fork.
  4. В каждой ветке извлеките изменения из этой вилки: git fetch r1_fork.
  5. После выборки сделайте полный сброс в этой ветке для этого пульта: git reset --hard r1_fork/master.

Теперь вы можете работать в ветке для каждого отдельного пульта и вносить изменения. Однако вы пока не можете отправлять PR. Для отправки PR вам нужно разветвить это репо, затем объединить изменения из вашей ветки в форк, отправить PR и удалить форк. Очевидно, это очень неидеально, но это то, что мы получили, пока GitHub не исправит свои вещи.

person Shital Shah    schedule 14.11.2019
comment
нет никаких технических причин не разрешать это... на самом деле, есть масса технических причин, если учесть масштаб, в котором работает GitHub. (как в github.blog/2017-10-13-stretching-spokes) - person VonC; 14.11.2019
comment
Не могли бы вы уточнить? Тонны проблем могут быть решены в масштабе. Какая проблема, связанная с этой функцией, не может быть решена в масштабе? - person Shital Shah; 15.11.2019
comment
Это хороший вопрос для команды инженеров (github.blog/category/engineering). Дело в том, что то, что кажется простой функцией за пределами GitHub, может оказаться чрезвычайно сложной для бедняги, которому приходится ее реализовывать. Это кажется тривиальным (blog.codinghorror.com/code-its-tribute), но, вероятно, это не так (стив-йегге. blogspot.com/2009/04/) (один из многих примеров: как вы управляете очередью разветвления: github.blog/2008-12-16-the-fork-queue, когда у вилок есть вилки?) - person VonC; 15.11.2019