Jak przekonwertować klon git tylko do odczytu z githuba na rozwidlony

79

Od czasu do czasu napotykam ten problem.

Powiedzmy, że przeczytałem kod źródłowy railsów, ponieważ napotykam na pewne problemy.

git clone git://github.com/rails/rails.git

Podczas badań coś przetestowałem i teraz mam poprawkę, której chciałbym przyjrzeć się rdzennemu zespołowi railsów. Jak wprowadzić zmiany do rozwidlonej wersji szyn.

Pamiętaj, kiedy sklonowałem, nie sklonowałem wersji rozwidlonej, ale wersję tylko do odczytu.

Nie chodzi o to, że jestem przeciwnikiem rozwidlenia. Po prostu czasami myślę, że zamierzam po prostu przeglądać, a potem chcę coś dodać.

Nick Vanderbilt
źródło
Chciałbym się sprawdzić i sprawdzić, czy moja odpowiedź działa w Twoim przypadku, czy nadal potrzebujesz więcej informacji. Jeśli potrzebujesz dalszych wyjaśnień lub wyjaśnień, daj mi znać, a postaram się Ci pomóc. Jeśli nie, możesz zaakceptować odpowiedź, aby wskazać, że udzielono odpowiedniej odpowiedzi.
Brian Campbell

Odpowiedzi:

112

Kiedy klonujesz repozytorium, automatycznie ustawia zdalne wywołanie, originktóre odnosi się do sklonowanego repozytorium. Wskazuje to teraz na projekt Railsów nadrzędnych, ale to, czego potrzebujesz, to stworzenie własnego rozwidlenia, do którego możesz nacisnąć, a następnie skonfigurowanie pilota, który wskazuje tam, abyś mógł do niego naciskać.

Pierwszym krokiem jest kliknięcie przycisku „Fork” na stronie projektu GitHub (zdjęcie z instrukcji GitHub na temat rozwidlania ):

Przycisk widelca GitHub

Gdy to zrobisz, znajdź i skopiuj adres URL tego repozytorium. Upewnij się, że używasz adresu URL SSH, który ma dostęp do odczytu i zapisu. Powinien wyglądać mniej więcej tak [email protected]:nadal/rails.git, zakładając, że twoja nazwa użytkownika to nadal.

Teraz możesz utworzyć pilota, który pozwoli Gitowi śledzić zdalne repozytorium, wyciągając z niego lub wysyłając do niego w zależności od posiadanego dostępu. Możesz zdecydować się na zastąpienie origintego, do którego będziesz wciskać (czyli liczbę osób, które go skonfigurowały) lub pozostawić originwskazanie na wyższym poziomie i zamiast tego utworzyć nowego pilota. Pokażę, jak wykonać pierwszą konfigurację; druga powinna być łatwa do odgadnięcia.

Aby zmienić originna swój fork w GitHub, prawdopodobnie będziesz chciał gdzieś zachować gałąź upstream, więc zmień jej nazwę na upstream:

git remote rename origin upstream

Teraz utwórz nowego pilota wskazującego na widelec:

git remote add -f origin [email protected]:nadal/rails.git

A teraz powinieneś być w stanie naciskać na swój nowy widelec:

git push origin master

Kiedy jesteś zadowolony ze zmian, które wprowadziłeś do GitHub i chciałbyś, aby ktoś z zespołu Railsów przyjrzał się temu, masz dwie możliwości. Jednym z nich jest wysłanie żądania ściągnięcia za pomocą GitHub; zobacz dokumentację, aby dowiedzieć się, jak to zrobić. Jeśli jednak masz tylko jedną lub kilka małych łatek, zespół Rails wolałby, abyś utworzył bilet do Lighthouse i załączył łatkę; zobacz instrukcje dotyczące współtworzenia Railsów, aby uzyskać więcej informacji.

edytuj Oto diagram pokazujący, co się dzieje. To, co zrobiłeś, to po prostu sklonowanie repozytorium Rails upstream; więc teraz masz własne repo na własnym komputerze, który odnosi się git://github.com/rails/rails.gitjako origin:

Github: git: //github.com/rails/rails.git
                    ^
                    |
Piloty: pochodzenie
                    |
Twoja maszyna: szyny /

Oto, co otrzymasz, jeśli rozwidliłeś, a następnie sklonowałeś widelec:

Github: git: //github.com/rails/rails.git <- [email protected]: nadal / rails.git
                                                           ^
                                                           |
Piloty: pochodzenie
                                                           |
Twoja maszyna: szyny /

Jeśli zastosujesz się do moich instrukcji, oto, co otrzymasz:

Github: git: //github.com/rails/rails.git <- [email protected]: nadal / rails.git
                        ^ ^
                        | |
Piloty: górne źródło
                        | |
Twoja maszyna: \ ------------------------------- szyny /

To jest tak samo jak wersja, którą otrzymujesz przez rozwidlenie, z tym wyjątkiem, że ma również upstreampilota, dzięki czemu możesz śledzić oficjalne zmiany i scalać je z kodem (jeśli utworzyłeś wersję rozwidloną, prawdopodobnie chciałbyś dodać upstreampilota jako dobrze).

Brian Campbell
źródło
Możesz nie chcieć rozwidlać, jeśli, jak mówi oryginalny plakat, czasami może chcieć zamiast tego zapisać jakąś pracę bez linku do oryginału.
Adam Dymitruk
1
@adymitruk Nie, OP wspomniał, że czasami klonuje poprzednie repozytorium bez rozwidlania, ale potem chce wnieść swój wkład później. Wspomniał w szczególności, że chciałby wprowadzić zmiany do rozwidlonej wersji Railsów. Nie powiedział nic o chęci zapisania pracy bez linku do oryginału.
Brian Campbell
może chcieć wnieść swój wkład w rzeczywisty projekt, jeśli nie chce rozwidlać ... tak mało prawdopodobne, jak to jest.
Adam Dymitruk
Dziękuję za odpowiedź i przepraszam za opóźnienie z mojej strony. Jak wspomniałem, nie zrobiłem wideł na szynach. Mam tylko klon szyn. Jednak twoja odpowiedź zakłada, że ​​najpierw rozwidliłem szyny. Czy dobrze to zrozumiałem?
Nick Vanderbilt
4
@Nadal Moja odpowiedź nie zakłada, że ​​utworzyłeś już widelec. Moja odpowiedź wyjaśnia, jak przekształcić sytuację, w której właśnie sklonowałeś repozytorium, w taką, w której możesz wypchnąć zmiany z lokalnego repozytorium w fork. Rozwidlenie repozytorium w serwisie GitHub powoduje po prostu utworzenie kopii na serwerze, na który możesz przesłać dane; Kiedy już to zrobisz, moje instrukcje pokażą ci, jak wskazać lokalne repozytorium, które utworzyłeś, które obecnie wskazuje na oficjalne repozytorium railsów, aby zamiast tego wskazywało na twój fork. Dodałem diagram, aby pokazać, co się dzieje; Mam nadzieję, że to pomoże. Daj mi znać, jeśli masz dalsze pytania.
Brian Campbell,
3

Bardzo prostym sposobem przełączenia się z trybu sklonowanego do trybu rozwidlonego jest użycie hubwrappera z http://hub.github.com/ .

Po zainstalowaniu po prostu uruchom

hub fork

z klonu tylko do odczytu.

Stefan Armbruster
źródło
Działa ładnie. Rozwidlenie zostanie utworzone z taką samą zdalną nazwą, jak nazwa użytkownika na githubie.
Zitrax
1

To nie powinno mieć znaczenia. Jeśli chcesz, możesz dodać innego pilota, określając swoje nierozdzielone repozytorium. Wprowadź zmiany w tym.

Adam Dymitruk
źródło
Jak dodać kolejnego pilota. Przepraszam. nowicjusz w świecie git.
Nick Vanderbilt
1
możesz forlować później, a następnie przejść do swojego forkowanego repozytorium ... na wypadek, gdybyś jeszcze nie rozwidlił. Forking tworzy twoją własną "kopię" repozytorium, które cię interesuje.
Adam Dymitruk
na razie możesz po prostu utworzyć nowe repozytorium na githubie. Dodaj go jako pilota do tego, który sklonowałeś z repozytorium szyn i pchnij tylko do nowego. Myślę, że właśnie tego szukasz. Nie ma potrzeby rozwidlania.
Adam Dymitruk
1
git remote add myrepo git: //github.com/myid/mynotforkedrepo.git
Adam Dymitruk
czy utworzyłeś już repozytorium na githubie (lub w innym miejscu)?
Adam Dymitruk
0

Lub, jeśli nie chcesz rozwidlać i zależnie od zespołu konserwacyjnego, możesz stworzyć i przesłać do nich łatkę. Ogólnie rzecz biorąc, udostępniłbyś repozytorium albo przez rozwidlenie na githubie, jak wyjaśniono w innych komentarzach, lub przez własne repozytorium git i przekazanie opiekunom oryginalnego repozytorium informacji do repozytorium i gałęzi, w których chcesz, aby się scalili.

Svenito
źródło
1
Nie rozumiem, dlaczego i tak nie chciałoby się rozwidlać, skoro to tylko zwykły widelec! To nie jest zupełnie nowa wersja projektu - tylko twoja kopia kodu źródłowego, w który masz nadzieję, zostanie scalona. Podobnie jak seria łatek.
alternatywa
1
Możliwe, że dana osoba nie ma konta Github, ale nadal chciałaby wnieść swój wkład w projekt. Mogą klonować projekt, edytować i przesyłać łaty lub ich gałąź do oryginalnego projektu w celu włączenia. Ale to prawda, że ​​nie ma prawdziwego powodu, aby nie rozwidlać, jeśli możesz.
Svenito,