Удалить зависимость fork от репозитория GitHub

Как я могу заставить GitHub забыть или разобраться в том, что мое репо было первоначально вилкой другого проекта?

Я разветкил проект в GitHub. Теперь я вижу "разветвленный от чего бы то ни было". Родительский репозиторий "независимо от него" больше не поддерживается. Мне было разрешено продолжать использовать базу кода исходного репозитория для создания независимого репозитория.

Есть ли способ отделить мой проект от исходного репозитория?

Ответ 1

Вы можете связаться с github support и попросить их переключить ваш репозиторий на "обычный режим".

В эта страница, пункт "Commit был сделан в fork", объясняется, что нужно переключиться на поддержку для переключения. Поэтому вполне вероятно, что вы не можете сделать это самостоятельно (если вы не уничтожаете и не воссоздаете свое репо, которое объясняется ранее... если вы сделаете это, будьте осторожны, если у вас есть билеты или вики, прикрепленные к вашему проекту, поскольку они будет удалено!).

Ответ 2

Убедитесь, что у вас есть все важные ветки и теги в вашем локальном репо, удалите репозиторий github, заново создайте репозиторий обычными способами (без разветвления) и снова нажмите локальный репозиторий с помощью git push --all. Обратите внимание: если у вас есть локальные ветки, которые вы не хотите публиковать, возможно, стоит создать временный чистый локальный клон для этой операции.

Однако это также избавит вас от вики и проблем. Поскольку вики на самом деле это собственный репозиторий, его можно обрабатывать аналогичным образом, клонируя его, а затем воссоздавая и толкая. Адрес репо находится на wiki Git странице доступа ([email protected]:user/repo.wiki.git).

Это оставляет проблемы. Они могут быть экспортированы с помощью API, но, насколько я знаю, вы можете создавать проблемы и комментарии только со своим человеком, поэтому импорт их совершенно невозможно.

Итак, если вам нужны проблемы, которые нужно сохранить, вы должны пройти поддержку github, как предлагает Томас Мулард.

Ответ 3

У меня возникла аналогичная проблема, и я решил использовать эту страницу справки github для ее решения. Я не возражал против wiki и проблем с трекером, как это было в моем блоге, используя тему, любезно разработанную другим пользователем.

Отделить разветвленное репо и использовать его как свое собственное после нескольких коммитов, не теряя всю историю:

git clone --bare [email protected]:user/forked_repo.git

Создайте новую пустую репозицию new-repository на веб-сайте github. И нажмите зеркальную версию:

cd user.github.com.git/

git push --mirror [email protected]:user/new-repository.git

Можно переименовать github, forked_repository с другим именем, чтобы сохранить его как резервное копирование и, при необходимости, проверять обновления. Или просто удалите его.

Переименование new-repository в исходное имя выполняет задание. Как побочный эффект, ваши фиксации теперь появляются в вашей истории.

Ответ 4

Используя информацию aurelien и Clayton, я смог сделать это с помощью следующее:

$ git clone --bare https://github.com/my/forked_repo.git
<delete forked_repo on GitHub>
<recreate repo on GitHub using same name>
$ cd forked_repo.git
$ git push --mirror

Здесь документация для git clone --bare:

Сделайте голый репозиторий Git. То есть вместо создания <directory> и размещения административных файлов в <directory>/.git, сделайте <directory> сам $GIT_DIR. Это, очевидно, означает -n, потому что нигде не проверять рабочее дерево. Также головки ветки на пульте дистанционного управления копируются непосредственно в соответствующие локальные ветки ветвей, не привязывая их к refs/remotes/origin/. Когда этот параметр используется, не создаются ни ветки удаленного отслеживания, ни связанные с ними переменные конфигурации.

Здесь документация для git push --mirror:

Вместо того, чтобы именовать каждый ref для push, указывает, что все refs под refs/ (который включает в себя, но не ограничивается refs/heads/, refs/remotes/ и refs/tags/), зеркалируются в удаленном репозитории. Недавно созданные локальные ссылки будут перенесены в удаленный конец, локально обновленные refs будут принудительно обновлены на удаленном конце, и удаленные ссылки будут удалены с удаленного конца. Это значение по умолчанию, если установлен параметр конфигурации remote.<remote>.mirror.

Примечание: как и другие ответы на основе git, это не будет копировать проблемы, которые не являются частью репо git, например, вики и проблемы. Per Tapio:

  • Вики - это отдельный репозиторий Git и может обрабатываться аналогичным образом для Tapio. Адрес: [email protected]:user/repo.wiki.git.
  • Проблемы могут быть экспортированы через GitHub API, но есть проблемы, которые их воссоздают, поскольку они могут быть созданы только вашим пользователем, поэтому импорт потеряет информацию.

Ответ 5

Это относится только к GitHub Enterprise, а не к github.com

Вход в учетную запись с правами администратора:

  • Перейдите в репозиторий, который вам нужно отсоединить: https://<ghe url>/<org>/<repo>
  • Нажмите на рацию "Администратор сайта" в правом верхнем углу.
  • Нажмите "Сеть" на левой панели
  • Нажмите "Сделать корень" в панели "Структура сети"
  • Принять

Это было протестировано на GitHub Enterprise 2.9