Jak przesłać żądanie ściągnięcia z sklonowanego repozytorium?

82

Jak przesłać żądanie ściągnięcia z istniejącego repozytorium sklonowanego lokalnie?

Często chcę spojrzeć na kod źródłowy niektórych bibliotek z github, więc klonuję go. Później odkrywam jakiś problem z kodem i umieszczam go na liście mailingowej, często mimochodem. Autor biblioteki mówi „niezłe znalezisko, czy możesz wysłać żądanie ściągnięcia?”.

A odpowiedź brzmi „nie tak łatwo”. Nie rozwidliłem jeszcze repozytorium, sklonowałem je. I nie wydaje mi się, żebym znalazł sposób, aby przesłać żądanie ściągnięcia z sklonowanego repozytorium?

Jeśli ta granica jest prawdziwa, wydaje się, że rozsądną reakcją jest rozwidlenie wszystkiego i wszystkiego, na co kiedykolwiek spojrzysz, tylko po to, abyś mógł wnieść swój wkład. A to wypełnia twoje konto github wieloma nieaktywnymi widłami.

Wydaje się, że nie mówi się dużo o tym problemie - czy jestem jedyną osobą, której ten problem dotyczy?

Ben Hutchison
źródło
4
Odkąd zauważyłem to bardzo podobne pytanie: stackoverflow.com/questions/4209208/…
Ben Hutchison

Odpowiedzi:

55

Rozwidlaj repozytorium na GitHub, a następnie dodaj repozytorium fork jako zdalne do lokalnej sklonowanej kopii:

git remote add myfork https://github.com/<myGitHubAccountName>/<repoName>.git

Następnie możesz naciskać na widelec:

git push myfork master

Jeśli robisz więcej niż tylko to jedno żądanie ściągnięcia, możesz usunąć originpilota i nazwać swój fork jako źródło:

git remote rm origin
git remote add origin https://github.com/<myGitHubAccountName>/<repoName>.git

To jest typowe to, co robię. Czasami dodaję oryginalne pochodzenie, ponieważ upstreamnadal mam do niego odniesienie.

bobthecow
źródło
5
Jak to zrobić bez rozwidlenia?
Aaron Hall
3
Jeśli masz dostęp push do repozytorium, możesz otworzyć żądanie ściągnięcia między gałęziami tego repozytorium. Będziesz musiał przesunąć swój lokalny oddział do nowej nazwy oddziału origin- na przykład git push origin HEAD:my-feature. Następnie możesz użyć internetowego interfejsu użytkownika, aby otworzyć żądanie ściągnięcia od my-featuredo master.
bobthecow
11
@Torek - Kolejny spieprzony przepływ pracy. Czy naprawdę trudno jest wykonać prostą czynność? Pomyślałem, że to jeden z głównych celów git - ułatwić współpracę i udostępnianie poprawek w modelu zdecentralizowanym. Nie potrzeba naukowca zajmującego się rakietami, aby wywnioskować, że cel powinien być prosty i łatwy do osiągnięcia, ponieważ jest to podstawowy przepływ pracy. Ci faceci muszą zatrudnić eksperta UX, ponieważ wszystkim brakuje zdrowego rozsądku, aby samodzielnie to rozwiązać.
jww
10

Jeśli nie masz nic przeciwko zainstalowaniu innego pliku binarnego na swojej ścieżce, github wydał fajne małe narzędzie o nazwie hub.

Jeśli sklonowałeś repozytorium innej osoby:

$ hub fork  # This creates a fork and adds your repo as a remote

$ git push YOUR_USER feature  # push the changes to your new remote

$ hub pull-request  # will open your browser
rdrey
źródło
Dzięki za podzielenie się informacjami o Hubie i bardzo mi się podoba :) Byłem w dokładnie takiej sytuacji, a hub sprawia, że ​​jest to dla mnie tak wygodne.
Wahib Ul Haq
Należy pamiętać, że „hub fork” nadal tworzy rozwidlone repozytorium na Twoim koncie w GitHub.
Granger
-1

Zawsze też klonuję zamiast forka i działają dla mnie następujące kroki:

  1. Utwórz nową gałąź na sklonowanym repozytorium i wprowadź nową zmianę.
  2. Przenieś zmianę do swojego oddziału w następujący sposób:

    git push origin insert_your_working_branch_name

  3. Teraz powinieneś być w stanie znaleźć działającą gałąź w żądaniu ściągnięcia od mistrza github.

Ohmyan
źródło
3
Nie rozumiem, jak mógłby działać krok 2 powyżej, jeśli sklonowałeś czyjeś repozytorium, do którego nie masz praw do wypychania?
Ben Hutchison,