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?


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.


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

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.


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,
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.