Witam. Od kilku dni męczę się z pewnym problemem, który zupełnie przypadkiem natrafiłem podczas ćwiczenia na lokalnym repo rzeczy, która zupełnie nie była związana z zaistniałym problemem.
Wytłumaczę o co dokładnie chodzi. Na dysku lokalnym utworzyłem surowe repo.
git init --bare .
Utworzyłem również dwa foldery, które miały imitować "użytkowników" podpiętych do tego "zdalnego repo" z własnymi sklonowanymi repozytoriami. Foldery te to user1 oraz user2.
Utworzyłem pierwszym userem branch dev
i dokonałem synchronizacji go ze zdalną gałęzią na originie git push -u origin dev
. Pull na drugim użytkowniku działa i wszystko jest synchronizowane tak jak powinno być (normalne).
Teraz dochodzi taka oto sytuacja; tworzę userem1 nowy branch na devie o nazwie przypuśćmy ft-user1
. Robię coś na nim, dodaję jakieś commity itp (symulacja, że coś się na tym branchu dzieje). Teraz by dokonać synchronizacji ze zdalnym repo robię ponownie: git push -u origin ft-user1
. Przechodzę na usera2 robię pulla i faktycznie wykaz wszystkich branchy pokazuje, że powstał remotes/origin/ft-user1
(tutaj też bez niespodzianek). Przechodzę tym userem na ten branch i sprawdzam czy wszystko jest ok - jest ok. Dalej będąc na tym drugim użytkowniku chcę zrobić merge'a do deva. Robię więc
git checkout dev
git merge --no-ff ft-user1
git push
--no-ff
tylko dlatego by rzucało się w oczy, że tam był osobny branch. Wysztko pięknie, fajnie. Na userze1 przechodzę na dev
, robię pulla i wszystko jest takie jakie powinno być. Problem w tym, że chciałbym usunąć tą zdalną gałąź remotes/origin/ft-user1
userem2 wraz z jej lokalnym odpowiednikiem. W konsekwencji wykonuję
git branch -d -r origin/ft-user1
lub
git push origin :ft-user1
dla zdalnego brancha.
Odpowiednio dokonuję tego samego dla lokalnego brancha:
git branch -d ft-user1
Następnie robię git push --all
I tutaj jest właściwy problem. O ile po stronie z repo usera2 (tam gdzie robiłem merge'a i usuwałem branche) wykaz wszystkich branchy git branch -a
nie wyświetla już lokalnego ft-user1
i co najważniejsze zdalnego remotes/origin/ft-user1
, tak już tego nie mogę powiedzieć o userze1 (ten, na którym była tworzona gałąź ft-user1
i tam były dokonywane wszelkie commity na nim). Oczywiście robię git pull na userze1, lecz to nic nie daje. Czy tak powinno być? Czy user1 powinien mieć dalej dostęp do zdalnego remotes/origin/ft-user1
? Czy problem tkwi w tym, że tak na prawdę nie robię tego na zdalnym repozytorium, tylko u siebie na dysku lokalnym? A może czegoś nie wiem, lub po prostu źle to robię?
Mam nadzieję, że w miarę opisowo wytłumaczyłem sytuację i że jest zrozumiałe to co chciałem osiągnąć. Jeżeli są jakieś wątpliwości, to proszę pytać, a postaram się wytłumaczyć. Z góry będę wdzięczny za wszelkie porady i odpowiedzi.