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 |
|
|
|
![]() |
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. |
|
|
|
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
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 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 11:53 |