Usuń zależność od rozwidlenia repozytorium GitHub


206

Jak sprawić, aby GitHub zapomniał lub odłączył się od tego, że moje repo było pierwotnie widelcem innego projektu?

Rozwidliłem projekt w GitHub. Widzę teraz „rozwidlony od cokolwiek / cokolwiek”. Repozytorium nadrzędne „cokolwiek / cokolwiek” nie jest już utrzymywane. Pozwolono mi kontynuować korzystanie z bazy kodu oryginalnego repozytorium w celu utworzenia niezależnego repozytorium.

Czy istnieje sposób na odłączenie mojego projektu od oryginalnego repozytorium?

Odpowiedzi:


175

Możesz skontaktować się z pomocą techniczną github i poprosić ich o przełączenie repozytorium na „tryb normalny”.

Na tej stronie akapit „Dokonano zatwierdzenia w rozwidleniu” wyjaśniono, że należy przejść przez obsługę, aby przełączyć. Dlatego jest prawdopodobne, że nie ma sposobu, aby zrobić to sam (chyba że zniszczysz i odtworzysz swoje repozytorium, co zostało wcześniej wyjaśnione ... jeśli to zrobisz, zachowaj ostrożność, jeśli masz bilety lub wiki dołączone do projektu, ponieważ będą one zostać usunięte!).


31
Mogę potwierdzić, że skontaktowanie się z pomocą techniczną działa bezbłędnie, a ponadto często odpowiadają w ciągu kilku godzin :-)
BenC

1
Linkowana strona nie zawiera już podanych informacji.
Kara Brightwell

3
@MattBrennan Strona uległa zmianie, ale ostatnia sekcja nadal zawiera: „Aby odłączyć widelec i przekształcić go w samodzielne repozytorium na GitHub.com lub GitHub Enterprise, skontaktuj się odpowiednio z pomocą techniczną GitHub lub administratorem witryny.”
Thomas Moulard

1
Super szybko .. odpowiedzieli mi za 1 godzinę. Dzięki
myDoggyWritesCode

2
W Github Enterprise możesz go teraz znaleźć w zakładce admin-> Współpraca-> Sieć iw zależności od przypadku użycia powinieneś użyć „Make Root”, „Detach” lub „Extract”.
Kutzi

45

Możesz zduplikować rozwidlone repozytorium do nowego repozytorium (bez zależności widelca) z interfejsu użytkownika github, a następnie usunąć oryginalne rozwidlone:

  • Zaloguj się do github
  • Wybierz znak + w prawym górnym rogu i Importuj repozytorium .
  • Zaimportuj rozwidlone repozytorium. Nowe repozytorium nie będzie zależeć od rozwidlenia.
  • Usuń oryginalne, rozwidlone repozytorium w ustawieniach repozytorium.

1
To było najłatwiejsze i to, co dla mnie zadziałało :). Bardzo mądry.
moi

1
Czy ktoś jeszcze miał problem z „zawieszeniem” funkcji importu? Mój był w trybie „Wykrywanie systemu kontroli wersji projektu…” przez około 5 godzin. Nie jestem pewien, czy jestem w kolejce, czy to jest faktyczne zawieszenie. Repo jest małe. Kusiło mnie, aby zostawić to na noc na wypadek, gdybym był w kolejce.
Benjamin West

W końcu zainteresowałem się i kliknąłem „Anuluj”. Kliknięcie przycisku Anuluj pozwoliło pominąć wykrywanie VCS i po prostu zaimportować kod / zatwierdzenia / oddziały itp. Tak było w przypadku importowania Github -> Github. Import mógł się nie zawiesić, jeśli pochodzę z innego VCS? Niepewny. Pamiętaj też, że robiąc to z drugim repo, musiałem dwukrotnie anulować, aby to zadziałało. Jeśli CLI skopiuje te same dane, co może być lepszą metodą, ale mam nadzieję, że pomoże to innym, którzy wybrali tę trasę.
Benjamin West

9
Żeby było jasne, to podejście nie pozwoli zachować problemów i nie wysuwać wniosków.
golopot

Działa jak urok! Dzięki, jesteś ratownikiem! :)
omnimind

44

Upewnij się, że masz wszystkie ważne gałęzie i tagi na lokalnym repozytorium, usuń repozytorium github, ponownie utwórz repozytorium w zwykły sposób (bez rozwidlania) i wypchnij lokalne repozytorium z powrotem git push --all. Pamiętaj, że jeśli masz lokalne oddziały, których nie chcesz publikować, warto utworzyć tymczasowy czysty lokalny klon dla operacji.

Jednak spowoduje to również pozbycie się wiki i problemów. Ponieważ wiki jest w rzeczywistości własnym repozytorium, można nią podobnie zarządzać poprzez klonowanie, a następnie odtwarzanie i pchanie. Adres repo znajduje się na stronie Git Access wiki ( git@github.com:user/repo.wiki.git).

To pozostawia problemy. Można je eksportować za pośrednictwem interfejsu API , ale o ile wiem, możesz tworzyć problemy i komentarze tylko ze swoją osobą, więc ich idealne importowanie jest niemożliwe.

Jeśli więc chcesz rozwiązać problemy, powinieneś skorzystać z pomocy github, jak sugeruje Thomas Moulard.


W zależności od liczby problemów może być możliwe przeniesienie ich pojedynczo do nowego repozytorium przed usunięciem ze starego z sieci ( help.github.com/en/github/managing-your-work-on- github /… ). Wydaje mi się, że zdeterminowana osoba może przesyłać ponad 100 wydań na godzinę - nie jest to zabawne, ale dla wielu repozytoriów jest to wykonalne.
Suma

22

Mam podobny problem i skorzystałem z tej strony pomocy github, aby go rozwiązać. Nie przeszkadzało mi to w przypadku wiki i narzędzia do śledzenia problemów, ponieważ było to w przypadku mojego bloga przy użyciu motywu opracowanego przez innego użytkownika.

Aby odłączyć rozwidlone repozytorium i używać go jako własnego po kilku zatwierdzeniach bez utraty całej historii:

git clone --bare git@github.com:user/forked_repo.git

Utwórz nową pustą reposity new-repositoryna stronie github. Wciśnij wersję lustrzaną:

cd user.github.com.git/

git push --mirror git@github.com:user/new-repository.git

Można zmienić nazwę na github, forked_repositoryz inną nazwą, aby zachować go jako kopię zapasową i sprawdzić aktualizacje w razie potrzeby. Lub po prostu go usuń.

Zmiana nazwy na new-repositoryoryginalną nazwę wykonuje zadanie. Jako efekt uboczny twoje zobowiązania pojawiają się teraz w twojej historii.


11

Dotyczy to tylko GitHub Enterprise, a nie witryny github.com

Zalogowano na konto z uprawnieniami administratora:

  1. Przejdź do repozytorium, które musisz odłączyć: https://<ghe url>/<org>/<repo>
  2. Kliknij rakietę „Site Admin” w prawym górnym rogu
  3. Kliknij „Współpraca” na górnym pasku menu
  4. Kliknij „Sieć” w lewym okienku
  5. Kliknij „Make Root” w okienku Struktura sieci
  6. Zaakceptować

Zostało to przetestowane na GitHub Enterprise 2.9


W zależności od przypadku użycia bardziej odpowiednie może być „Odłącz” lub „Wyciąg”. Uważam, że „Make Root” jest nieco dziwny, ponieważ w zasadzie odwróci on obecny kierunek root-> child. (Github Enterprise 2.17)
Kutzi

10

Korzystając z informacji z aurelien i Clayton , mogłem to zrobić w następujący sposób:

$ 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

Oto dokumentacja dlagit clone --bare :

Utwórz gołe repozytorium Git. Oznacza to, że zamiast tworzyć <directory>i umieszczać pliki administracyjne w sobie <directory>/.git, <directory>sam $GIT_DIR. To oczywiście oznacza -n, ponieważ nie ma gdzie sprawdzić drzewa roboczego. Również głowy oddziałów na pilocie są kopiowane bezpośrednio do odpowiednich lokalnych oddziałów, bez mapowania ich refs/remotes/origin/. Gdy ta opcja jest używana, nie są tworzone gałęzie zdalnego śledzenia ani powiązane zmienne konfiguracyjne.

Oto dokumentacja dlagit push --mirror :

Zamiast nazywania każdego ref do pchania, określa, że wszystkie pozycje literatury poniżej refs/(co obejmuje, ale nie ogranicza się do refs/heads/, refs/remotes/i refs/tags/) być dublowane do zdalnego repozytorium. Nowo utworzone lokalne odwołania będą wypychane na zdalny koniec, lokalne uaktualnienia będą wymuszane na zdalnym końcu, a usunięte odniesienia zostaną usunięte z odległego końca. Jest to ustawienie domyślne, jeśli remote.<remote>.mirrorustawiona jest opcja konfiguracji .

Uwaga: podobnie jak inne gitoparte na odpowiedziach, nie spowoduje to skopiowania problemów, które nie są częścią gitrepozytorium, takich jak wiki i problemy. Per Tapio:

  • Wiki to osobne repozytorium git i może być obsługiwane w podobny sposób dla każdego Tapio. Adres jest: git@github.com:user/repo.wiki.git.
  • Problemy można eksportować za pomocą interfejsu GitHub API, ale występują problemy z ich odtwarzaniem, ponieważ mogą być tworzone tylko przez użytkownika, więc importowanie spowoduje utratę informacji.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.