Jak zsynchronizować kopię (fork) z głównym repozytorium na Github

Pod koniec października postanowiłem, że czynnie dołączę do społeczności GitHub (biernie już dawno dołączyłem zakładając tam konto 🙂 ). Postanowiłem wspomóc na GitHubie jeden projekt – narzędzie git-istage. A wszystko zaczyna się od tego, że trzeba zrobić fork tego repozytorium, w którym chcemy wprowadzić zmiany.

git-istage

14 października Immo Landwerth napisał na Twitterze, że stworzył narzędzie do Gita:

Postanowiłem zobaczyć co to za narzędzie i jak ono działa. Jest to narzędzie pomocne w dodawaniu zmian do stage’a. Coś jak polecenie git add -p, ale bardziej elastyczne. Zauważyłem na Githubie, że są otwarte Issues do repozytorium tego narzędzia. Jednym z nich była prośba o dodanie listy skrótów klawiszowych w programie, aby nie trzeba było otwierać dokumentacji. Pomyślałem, że to zadanie nie może być trudne i chciałem to zrobić. To był mój pierwszy raz jak robiłem takie rzeczy, czyli mówiąc poważnie: kontrybuowanie w projekcie open source 🙂

Od czego zacząłem?

Mój pierwszy fork

Najpierw zrobiłem fork repozytorium projektu, które chce się poprawić. Fork jest to kopia repozytorium, ale zrobiona na serwerze, nie lokalnie. Następnie sklonowałem tego forka lokalnie u siebie na dysku i zacząłem programować.

Po jakimś czasie miałem zrobionych kilka commitów na własnych branchu. Chciałem zrobić z tego pull requesta. Zauważyłem jednak, że na gałęzi master w głównym repo projektu nastąpiły zmiany. W normalnych warunkach, aby w swoim branchu mieć najnowsze commity, to najpierw ściągnął bym najnowsze zmiany na master. Przełączył się na swój branch i zrobił to:

git rebase master

Rozwiązał ewentualne konflikty i tyle. Jednak poprawki zrobione przeze mnie były na klonie repozytorium z mojego konta. Główne repozytorium jest w innym miejscu na GitHubie. Co zrobić?

Podczas klonowania git automatycznie dodaje URL tego repozytorium do konfiguracji projektu, aby było wiadomo skąd ściągać i gdzie wysyłać zrobione przeze mnie zmiany. Można to sprawdzić poleceniem:

git remote -v

git remote -v

Widać, że URL wskazuje na mojego GitHuba. Domyślna nazwa dla takiego URLa to origin – taka jest przyjęta konwencja. To jest tylko string, można to zmienić na co się tylko chce, ale nie zalecam 🙂

Wiele zdalnych repozytoriów

Jednak można dodać więcej takich ścieżek. Dodam teraz ścieżkę do oryginalnego repozytorium projektu git-istage, czyli: https://github.com/terrajobst/git-istage

git remote add upstream https://github.com/terrajobst/git-istage

Widać, że mamy teraz skonfigurowane 2 ścieżki do repozytoriów:

git remote -v

Aby ściągnąć najnowsze zmiany z głównego repozytorium tego projektu wpisujemy:

git fetch upstream

git fetch upstream

Ściągnęło nam branch upstream/master, który wskazuje na branch master z URL: https://github.com/terrajobst/git-istage. Wszystkie dostępne branche w naszym repozytorium możemy sprawdzić poleceniem:

git branch -a

Zobaczymy, że mamy kilka branchów master:

git branch -a

Teraz aby zsynchronizować najnowsze zmiany wystarczy wpisać:

git rebase upstream/master

I mamy już aktualnego naszego lokalnego mastera. Teraz wystarczy zrobić rebase naszego brancha i wszystko będzie aktualne, można wrócić do programowania.

Przygotowałem jeszcze schemat, aby w ładniejszy sposób pokazać wszystkie te zależności między repozytoriami:

Github fork diagram

Podsumowanie

1 listopada po kilkunastu poprawkach mój pull request został zaakceptowany 🙂 Lista skrótów klawiszowych mojego autorstwa jest dostępna dla wszystkich korzystających z tego narzędzia 🙂 Osobiście korzystam z tego narzędzia i polecam również Wam. Bardzo usprawnia dodawania plików do stage’a. Na początku trzeba się nauczyć kilku skróty klawiszowych (już jest dostępna lista skrótów, pokazywana po naciśnięciu przycisku F1) , ale jak się już się ich nauczy to obsługa tego narzędzia jest bardzo szybka.

Zródła:
https://help.github.com/articles/configuring-a-remote-for-a-fork/

Jeśli spodobał Ci się ten wpis i chcesz otrzymywać powiadomienia o nowych treściach dotyczących zagadnień związanych z Gitem, to zachęcam do subskrypcji mojego bloga.

1 thought on “Jak zsynchronizować kopię (fork) z głównym repozytorium na Github

  1. Pingback: dotnetomaniak.pl

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *