Github dodaje repozytorium jako rozwidlenie z istniejącego klonu


21

Mam więc repozytorium git, które sklonowałem ze źródła na ghithub. Wprowadziłem do niego kilka zmian (niezaangażowanych i w gałęzi master). Chcę przesunąć moje zmiany na moją stronę github jako nową gałąź i sprawić, by github nadal widział to jako widelec.

Czy to jest możliwe? Jestem całkiem nowy w Git i Github. Czy moje pytanie w ogóle miało sens?

Najłatwiejszym sposobem, jaki mogę wymyślić (z pewnością jestem najbardziej zbliżony), jest rozwidlenie repo na github. Klonuj go lokalnie do innego katalogu. Dodaj repozytorium początkowe. Utwórz gałąź w tym nowym rozwidlonym repozytorium. Skopiuj ręcznie moje zmiany kodu do nowego lokalnego repozytorium. A potem popchnij to z powrotem do mojego githuba.

Czy jest to powszechny przypadek użycia, w którym istnieje prostszy sposób na zrobienie tego bez powielania katalogów?

Chyba pytam tutaj w przeciwieństwie do SO, ponieważ korzystam z Linuksa, używając git z linii poleceń, a ludzie tutaj dają lepsze odpowiedzi imo =]


Wydaje mi się, że jest to technicznie tematyczne, ale mogłoby być lepiej gdzie indziej, ponieważ wydaje się, że jest to głównie pytanie github
— Michael Mrozek

Odpowiedzi:


22

Możesz to wszystko zrobić z istniejącego repozytorium (nie trzeba klonować rozwidlenia do nowego (lokalnego) repozytorium, utworzyć oddział, skopiować zatwierdzenia / zmiany itp.).

  1. Przygotuj swoje zobowiązania do publikacji.

    Udoskonal wszystkie istniejące lokalne zatwierdzenia (np. Za pomocą git commit --amendi / lub git rebase --interactive).

    Zatwierdź dowolne niezatwierdzone zmiany, które chcesz opublikować (nie jestem pewien, czy chciałeś zasugerować, że masz pewne zatwierdzenia w lokalnym systemie głównym i niektóre niezatwierdzone zmiany lub tylko niektóre niezatwierdzone zmiany; nawiasem mówiąc, niezatwierdzone zmiany nie są „ gałąź ”, są one ściśle w twoim drzewie roboczym).

    Zmień nazwę swojego głównej gałęzi, aby nadać jej nazwę, którą chcesz utworzyć dla „nowej gałęzi”. Nie jest to absolutnie konieczne (możesz przepchnąć z dowolnej gałęzi do dowolnej innej gałęzi), ale prawdopodobnie zmniejszy to zamieszanie na dłuższą metę, jeśli lokalna gałąź i gałąź w rozwidleniu GitHub mają tę samą nazwę.

    git branch -m master my-feature
    
  2. Rozwidlaj poprzednie repozytorium GitHub
    (np.) github.com:UpstreamOwner/repostory_name.gitJako
    (np github.com:YourUser/repository_name.git. ) .

    Odbywa się to na stronie internetowej GitHub (lub „kliencie” korzystającym z interfejsów API GitHub), nie są w to zaangażowane żadne lokalne polecenia Git.

  3. W twoim lokalnym repozytorium (tym, które zostało pierwotnie sklonowane z wcześniejszego repozytorium GitHub i ma twoje zmiany w swoim głównym systemie), dodaj repozytorium wideł jako zdalne:

    git remote add -f github github.com:YourUser/repository_name.git
    
  4. Wciśnij gałąź do repozytorium wideł na GitHub.

    git push github my-feature
    
  5. Opcjonalnie zmień nazwę pilotów, aby widelec był znany jako „origin”, a upstream jako „upstream”.

    git remote rename origin upstream
    git remote rename github origin
    

    Jednym z powodów zmiany nazwy pilotów jest to, że chcesz mieć możliwość korzystania z nich git pushbez określania repozytorium (domyślnie jest to „origin”).


Działa bezbłędnie, ale kiedy tworzysz zdalny github, myślę, że brakuje ci „https: //” w adresie URL Github
— jesjimher

1
@jesjimher: „Adresy URL” w tym poście wykorzystują „składnię podobną do scp”, która używa SSH, a nie HTTP (S). Musisz także zmienić dwukropek na ukośnik, aby użyć ich jako adresów URL HTTP (S) (zakładając, że serwer obsługuje oba bez dodatkowych zmian przestrzeni nazw, co robi GitHub).
— Chris Johnsen

Ups, masz rację, Chris, błędnie wpisałem dwukropek jako ukośnik, a więc nie zadziałało, chyba że dodałem „https”. Przepraszam za hałas ...
— jesjimher

W kroku 4 użycie -uopcji może sprawić, że lokalny oddział będzie my-feature śledził ten sam oddział zdalny origin/my-feature. Polecenie to:git push -u github my-feature
— YaOzI

To wspaniale. Jedyne, co musiałem zmienić, to adres github!
— Tico

0

Istnieje narzędzie: hub

hubto narzędzie wiersza poleceń, które można łączyć gitw celu rozszerzenia o dodatkowe funkcje i polecenia, które ułatwiają pracę z GitHub

Teraz możesz:

# cd to a cloned repo with uncommited changes
git checkout -b feature
git commit -am 'done with feature'
git fork
git push YOUR_USER feature
# git pull-request
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.