Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> git push wybranego commita a nie wszystko
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Hej, jak w git mogę zrobić push do wybranego repozytorium ale push tylko wybranego commita lub wybranych commitow a nie wszystkich?
Po co mi to? Załóżmy że mam repozytorium core, z ktorego korzystają wszystkie nowe projekty. I gdy np. rozwijam projekt 3 i zrobie tam zmianę, która jest uniwersalna i ważna i powinna się znaleźć w innych projektach. Chcę więc ją wrzucic do core, by inny projekty mogły z tamtąd te ważną zmianę pociągnąć. Nie chcę jednak wrzucać innych commitow, ktore robiłem w projekt 3, gdyż one są zbędne w innych projektach
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Nattfarinn
post
Post #2





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Nie chce być Evil NecroPosterem (ale nie przesadzajmy, temat nie jest ani stary ani zamknięty), ale tak generalnie to gitem da się załatwić to tak, by było wygodne i nie jest to taka czarna magia. Linus Torvalds wszystko przewidział. (IMG:style_emoticons/default/smile.gif)

Zakładam, że masz repozytoria per projekt oraz core. Załóżmy, że wygląda to tak (nie wiem czy to Twój user, ale użyję dla przykładu):

Core: https://github.com/nospor/core.git
Cucumber (projekt 1): https://github.com/nospor/cucumber.git
Potato (projekt 2): https://github.com/nospor/potato.git

U siebie, w swoim lokalnym repozytorium (np. potato) tworzysz brancha 'core' i ustawiasz mu upstream na repozytorium https://github.com/nospor/core.git (branch master).

Rozwijasz aplikację potato na swoich feature branchach lub na masterze, jak lubisz. Jeśli napiszesz coś, co chciałbyś mieć w 'core' to cherry-pick na branch 'core' jest jak najbardziej wskazany (do tego służy), ale najpierw upewniasz się czy branch 'core' jest aktualny (mógł zostać zmieniony bezpośrednio, lub też napisałeś coś fajnego przy okazji cucumbera): 'git checkout core && git pull --rebase'. Jeśli wszystko jest OK, to cherry-pickujesz zmianę którą chcesz 'git cherry-pick hash_commit'. Pushujesz zmiany do remote repozytorium (lądują w 'https://github.com/nospor/core.git', bo taki jest tego brancha upstream). Zakładasz, że każdy projekt bazuje na 'core' (słowo bazuje jest tutaj kluczowe). To teraz musisz zmienić bazę swoich projektów, bo 'core' się zmienił. Robisz to też dla projektu na którym feature dla 'core' powstał, żeby spójną kolejność commitów: na spodzie core, na górze projekt. Załatwiasz to w bardzo prosty sposób. Będąc w lokalnym repo swojego projektu (potato, cucumber) zaciągasz najnowszego 'core': 'git checkout core && git pull --rebase', a następnie na swoim branchu zmieniasz 'bazę' na 'core': 'git rebase core'. Rozwiązujesz potencjalne konflikty, jeśli takie się pojawiły (potato może się mocno różnić od cucumbera), ale finalnie masz zachowaną spójną strukturę: baza 'core' na dole, zmiany projektowe na górze. Pamiętaj tylko, że po zmianie bazy zwykły 'git push' nie zadziała (bo lokalne i remote repozytoria różnią się bazą, a jak zmienia się baza to zmieniają się hashe wszystkich commitów nad bazą i git Ci odrzuci taką próbę). Takiego pusha robisz to za pomocą 'git push --force'. Rebase to potężne narzędzie w gicie i stosowane ostrożnie i z rozwagą daje cudowne efekty.

PS. Zaraz to opiszę w formie lekkostrawnej, bo blok tekstu może przerażać, ale finalnie to bardzo prosta a bardzo użyteczna rzecz.
Go to the top of the page
+Quote Post

Posty w temacie
- nospor   git push wybranego commita a nie wszystko   17.03.2015, 19:47:12
- - tzm   Kiedyś jak sobie wyrabiałem swój workflow który ni...   17.03.2015, 19:55:20
- - nospor   Aktualnie bawie się z branchami i cherry-pick. Byc...   17.03.2015, 20:17:46
- - pyro   Co prawda cherry-pick zadziała do tego co mówisz (...   17.03.2015, 20:25:56
- - nospor   Faktycznie, nie ten dzial. Przenosze i nie zamykam...   17.03.2015, 20:27:42
- - tzm   sugestia że nospor chciałby to przeanalizować bosk...   17.03.2015, 20:29:51
- - pyro   Z opisu wyżej nie wywróżę struktury Twojego projek...   17.03.2015, 20:34:48
- - nospor   pyro czyli chyba nie zrozumiales tego co napisalem...   17.03.2015, 20:35:50
- - pyro   Jeżeli przeczytasz jeszcze raz pierwszy post temat...   17.03.2015, 20:45:20
- - nospor   Wiekszosc moich projektow ma ten sam "core...   17.03.2015, 20:53:08
- - pyro   W takim razie ten "core" to jakiś zbiór ...   17.03.2015, 21:09:54
- - nospor   Nie, core to nie jest zbior narzedzi. core to core...   17.03.2015, 21:12:44
- - pyro   Core jako core też może być submodułem   17.03.2015, 21:15:05
- - nospor   Tak, ale akurat nie w tym przypadku. Rozumiem o c...   17.03.2015, 21:45:16
- - Pyton_000   No taa ale już Kto Ci pomagał to ja nie powiem C...   17.03.2015, 22:03:59
|- - pyro   Cytat(Pyton_000 @ 17.03.2015, 22:03:5...   17.03.2015, 22:31:26
- - com   No tak, @pyro niektórzy są jeszcze niezreformowani   17.03.2015, 22:52:34
- - nospor   CytatNo taa ale już Kto Ci pomagał to ja nie powie...   18.03.2015, 07:01:09
- - vokiel   @nospor czyli Ty budujesz aplikację na core (modyf...   18.03.2015, 09:16:29
- - nospor   Cytat@nospor czyli Ty budujesz aplikację na core (...   18.03.2015, 09:25:15
- - com   Najlepiej przebudować to już na tym etapie i oszcz...   18.03.2015, 10:06:42
- - nospor   CytatNajlepiej przebudować to już na tym etapie i ...   18.03.2015, 10:14:04
- - com   ok, w porządku to zależy jak na to spojrzeć. Bo ...   18.03.2015, 10:24:44
- - pyro   @nospor, wcześniej podałeś przykład Cytat(nospor ...   18.03.2015, 10:34:51
- - nospor   CytatI akurat te wszystkie funkcje posiada np. Use...   18.03.2015, 10:40:28
- - Nattfarinn   Nie chce być Evil NecroPosterem (ale nie przesadza...   2.04.2015, 12:14:18
- - nospor   No tego --rebase to przyznaje się bez bicia jeszcz...   2.04.2015, 12:22:54
- - Nattfarinn   Możesz to zrobić w dowolnym momencie. W skrócie, r...   2.04.2015, 13:35:52
- - nospor   Dzieki, pobawie sie jeszcze tym sposobem   2.04.2015, 13:49:09


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 11:53