Возможен ли запрос на вытягивание GitHub из частного в общедоступный репозиторий?

Я разветвил публичное репо и сделал новое репо частным.

Я добавил новую удаленную ветку в свое личное репо с некоторыми исправлениями.

Теперь я хочу создать запрос на извлечение из ветки в моем частном репо в сторону общедоступного репо, из которого я разветвился.

Я выбираю ветку в своем частном репо и нажимаю «Запрос на извлечение».

Я нажимаю «Изменить коммиты».

Я не могу изменить организацию/владельца репозитория. Я вижу только свою организацию, но не ту, что есть в публичном репозитории. Я мог создать запрос на извлечение только для основной ветки моего частного репо, но это не то, что я хочу.

Разве нельзя исправить что-то из общедоступного репо в частном, а затем создать запрос на включение?


person Sebi    schedule 12.01.2012    source источник
comment
Почему вы хотите превратить публичное репо в частное?   -  person TimWolla    schedule 12.01.2012
comment
Потому что я не могу опубликовать все свои изменения. Я следую общедоступному из моего частного и объединяю общедоступные изменения.   -  person Sebi    schedule 12.01.2012
comment
Я только что получил подтверждение от службы поддержки GitHub, что в настоящее время невозможно создать запрос на извлечение из частного репо в общедоступное, которым вы не владеете.   -  person Sebi    schedule 12.01.2012
comment
И, как я выяснил за это время, вообще невозможно создать запрос на вытягивание из частного в общедоступный репозиторий, независимо от того, владеете ли вы репозиториями.   -  person Sebi    schedule 12.01.2012
comment
Этот вопрос не имеет никакого смысла, и он просто указывает на проблему в вашем рабочем процессе. Ваша вилка в GitHub должна быть общедоступной, ваш клон workink на вашем ноутбуке — частным, затем вы отправляете в общедоступную вилку только те коммиты, которые собираетесь сделать общедоступными. Это нормально для работы с GitHub.   -  person mljrg    schedule 25.08.2017
comment
@mljrg Пожалуйста, просто прочитайте мои предыдущие комментарии, которые объясняют, почему это было необходимо в тот момент.   -  person Sebi    schedule 05.10.2017
comment
Если то, что вам нужно, было потому, что я не могу опубликовать все свои изменения. затем сохраните эти изменения только в вашей локальной рабочей копии на вашем ноутбуке и отправьте то, что вы можете сделать общедоступным, в свою собственную общедоступную вилку репо, в которую вы хотите внести свой вклад. Затем из вашего общедоступного форка откройте запрос на включение в последний репозиторий. Это типичный рабочий процесс PR. Общедоступные и частные обычно плохо сочетаются друг с другом, потому что обработка разрешений без ошибок слишком сложна, поэтому лучше всего разделить общие и частные концепции при проектировании системы. Это относится к Github и любой другой системе.   -  person mljrg    schedule 06.10.2017
comment
То, что вы предлагаете, было опубликовано 5 лет назад уже как принятый ответ...   -  person Sebi    schedule 09.10.2017


Ответы (3)


Одним из решений может быть разветвление исходного общедоступного репозитория на ваш собственный общедоступный репозиторий на GitHub.
Затем дублировать разветвленное общедоступное репо в приватное.

Затем вы клонируете как на своей локальной рабочей станции, так и:

  • делать общедоступные и частные модификации в вашем частном локальном репо
  • сначала отправьте частные модификации в ваш локальный общедоступный репозиторий
  • затем отправьте их в свой разветвленный общедоступный репозиторий GitHub.
  • сделайте запрос на извлечение из своего разветвленного публичного репо на GitHub.
person VonC    schedule 12.01.2012
comment
Итак, в основном мне нужно добавить косвенность, имея публичное репо, принадлежащее мне между ними? - person Sebi; 12.01.2012
comment
@Sebi: это идея, чтобы сохранить четкое разделение между общедоступными и частными модификациями. - person VonC; 12.01.2012
comment
Я надеялся, что это возможно без :-) - person Sebi; 12.01.2012
comment
@Sebi: я подозреваю, что этот сценарий слишком редок, чтобы поддерживать его прямо сейчас. - person VonC; 12.01.2012
comment
Это не работает. Сначала я попытался создать публичную вилку, а затем на основе этой вилки создать частную вилку. К сожалению, у вас может быть только один форк каждого проекта. После этого я попытался разветвить общедоступное репо, а затем создал новое частное репо, используя мою общедоступную вилку в качестве удаленной ветки. Тем не менее, невозможно создать запрос на вытягивание между частным и общедоступным репо. Поэтому мне нужен совершенно другой подход. Не очень приятно. - person Sebi; 12.01.2012
comment
@Sebi: невозможно создать запрос на вытягивание между частным и общедоступным репо. Но ... вам не нужно делать такой запрос на вытягивание: и частный, и общедоступный репо будут вашими. Если вы не можете сделать два форка, просто сделайте форк один раз и клонируйте это репо локально, переместив его в ваше личное репо (которое не является форком). Единственный запрос на вытягивание будет между вашим (разветвленным) общедоступным репо и исходным общедоступным репо. Любая связь между вашим частным и вашим общедоступным репозиторием осуществляется посредством отправки данных из ваших локальных репозиториев в ваши удаленные репозитории (запрос не требуется). - person VonC; 12.01.2012
comment
@Sebi: короче говоря, с такой конфигурацией (одна вилка общедоступного репо и одно частное репо, оба принадлежат вам), it.will.just.work. - person VonC; 12.01.2012

Я сомневаюсь, что это задумано Github, но на самом деле вы можете сделать запрос на извлечение из частного репозитория в общедоступный с помощью простых манипуляций с DOM:

  1. Внесите изменения в свой частный репозиторий, возможно, в новую ветку.
  2. Запустите запрос на включение. Нажмите кнопку фиксации изменений.
  3. Откройте редактор, который позволяет вам изменять DOM. Такие вещи, как Firebug, веб-инспектор Safari или инструменты разработчика Chrome, похоже, работают нормально.
  4. Отредактируйте репозиторий базовой ветки. Вы захотите изменить значение выбранного тега опции.
  5. Затем нажмите на название ветки (и измените его, если хотите). Вам нужно сделать это, чтобы вызвать обновление ajax.
  6. Обновите диапазон фиксации, и все будет хорошо.

Некоторые предостережения:

  • При нажатии на ссылку фиксации или просмотра файла будет 404 для публики или пользователей, которые не указаны в качестве соавторов. Все выглядит хорошо после слияния, но это может быть немного странно для сопровождающего общедоступного репозитория.
  • Запрос на вытягивание должен быть принят только из пользовательского интерфейса. Я не думаю, что это позволит кому-либо объединять или выбирать коммиты вручную. Конфликты, вероятно, должны быть разрешены владельцем частного репо.
person Ben    schedule 26.04.2012
comment
На самом деле, это звучит как ошибка для меня. Я просто надеюсь, что у них больше не будет таких дыр в их модели безопасности :-) - person Sebi; 27.04.2012

Обновление 2021 г.

Ответ @VonC концептуально правильный и по-прежнему поддерживается GitHub. Спустя девять лет @Sebi наконец-то получает ответ, который он хотел — я устранил косвенность, которую он прокомментировал, которая встречается во втором пункте ответа VonC.

В моем случае мне нужно внести как общедоступные, так и частные изменения в общедоступный репозиторий. Публичные коммиты можно периодически отправлять, как только они будут готовы. Частные изменения должны оставаться в моем личном репозитории до тех пор, пока я не закончу свое докторское исследование. В то время мне нужно, чтобы все частные изменения перетекали из моего общедоступного форка в исходное общедоступное репо через запросы на вытягивание.

Основная часть работы заключается в правильной настройке. Я предоставил подробные шаги в этом ответе . Следующие шаги выполняются исключительно в графическом интерфейсе eclipse (v2020-12; EGit 5.11), но их можно легко преобразовать в операции командной строки. Репозитории, которые я использовал, следующие:

  • eclipse/org.aspectj – это исходный общедоступный репозиторий; пульт upstream для извлечения
  • cb4/org.aspectj — моя вилка; пульт origin для нажатия
  • cb4/remPrivAJ — мое удаленное личное хранилище; пульт private для толкания и вытягивания
  • I:\local — это локальный репозиторий на моей рабочей станции.

Для аутентификации github я использовал ssh с ключом ssh ed25519 (инструкции в этом вопросе SO), поэтому мои URI подключения выглядят так: ssh://[email protected]/<user>/<repo>.

Обозначение: -> — щелчок мышью или выделение; right-> и double-> — щелчок правой кнопкой мыши и двойной щелчок соответственно.


Я отделил общедоступные изменения от частных, поместив их в отдельные ветки: pub для общедоступных изменений; priv для личных изменений. Я довольно новичок в git, поэтому может быть лучший способ сделать это.

  1. Создание и настройка веток
  • 1.1 В eclipse Git Perspective под локальным репозиторием: откройте Branches, затем откройте Local (-> v рядом с каждым)
  • 1.2 Для частной ветки: right-> master -> Create Branch -> Select -> private/master -> Ok введите priv для Branch name: -> Configure upstream for push and pull -> When pulling: Merge -> Finish
  • 1.3 Для публичной ветки: right-> master -> Create Branch введите pub для Branch name: -> Finish
  • 1.4 Результат: номера коммитов в моем частном репозитории private/master, моем публичном форке orign/master и исходном публичном репозитории upstream/master совпадают config

  1. Внесите частное изменение и зафиксируйте
  • 2.1 Внесите некоторые изменения, а затем просмотрите подробную информацию о них на вкладке Git Staging в Git Perspective.
  • 2.2 Выберите отдельные изменения и добавьте их в индекс, щелкнув зеленый плюсик
  • 2.3 ИЛИ выберите их все, щелкнув зеленый двойной знак плюса
  • 2.4. Введите сообщение фиксации и -> Commit and Push -> Preview -> Push -> Close
  • 2.5 Обратите внимание на новый номер коммита
    commit

  1. Отправка частных изменений в общедоступную вилку
  • right-> priv -> Push Branch -> Remote: dropdown v -> origin: URI (у меня происхождение: ssh://[email protected]/cb4/org.aspectj) double-> master в текстовом поле Branch: введите priv, затем double-> priv [branch] -> Preview -> Push -> Close

  1. На GitHub приватные изменения в моей публичной вилке. Обратите внимание на тот же номер фиксации, что и выше (щелкните изображение, чтобы увеличить его). изменения отправлены

  1. Чтобы завершить процесс и открыть запрос на внесение изменений в исходное общедоступное репо, просто нажмите Compare & pull request и вуаля! (щелкните изображение, чтобы увеличить). запрос на вытягивание

Дополнительные возможности и функции

  • Конечно, вы можете отправить коммиты public в общедоступную вилку: right-> pub -> Push Branch -> Preview -> Push -> Close
  • Извлекайте и объединяйте обновления из исходного общедоступного репо так часто, как оно изменяется, чтобы уменьшить конфликты слияния: в разделе «Удаленные» right-> upstream -> Fetch
  • Затем нажмите их на свою вилку: в разделе Remotes right-> origin -> Push
  • И в ваше личное репо: под Remotes right-> private -> Push
person cb4    schedule 28.02.2021
comment
Интересный пример использования, подробно описан. Проголосовал. - person VonC; 01.03.2021