07 grudnia 2009

Kolejny komentarz z Opola i tajemnicze "Your branch is ahead of 'origin/master' by..." przy git status

Dostałem dzisiaj kolejną wiadomość z opinią nt. warsztatów "Groovy & Grails" w Opolu.

Warsztaty Groovy/Grails generalnie mi się podobały, jednak oczywiście wszystko da się poprawić. Przede wszystkim były momenty, w których odnosiło się wrażenie (a przynajmniej ja je odnosiłem), że pomimo dużej wiedzy teoretycznej brakowało Ci nieco praktyki.

Poza tym myślę, że warto by było na samym początku przedstawić obraz z lotu ptaka na Groovy/Grails i możliwości, jakie oferuje. Obejrzałem prezentację (http://www.infoq.com/presentations/Web-Development-Grails-Graeme-Rocher), która w godzinę prezentuje kilka najważniejszych (tak mi się wydaje) cech Grailsów. Mając do dyspozycji dwa dni warsztatów, mógłbyś taki wstęp rozwinąć do dwóch godzin, a jednocześnie nieco szerzej przedstawić sam język Groovy (tak jak na warsztatach).

Skoro już mowa o prezentacji samego języka, to przedstawiając slajdy na temat jego cech (obiektowość, skryptowość) warto, moim zdaniem, rozważyć pokazywanie slajdu z definicją jakiejś cechy języka, po którym następuje fragment kodu Groovy, który tą cechę demonstruje (przy czym nie zagłębiać się za bardzo w szczegóły techniczne prezentowanego kodu).

Poza tym po dość pobieżnym przeglądnięciu dokumentacji Grailsów wydaje mi się, że trzeba by w czasie warsztatów przynajmniej wspomnieć o paru rzeczach, a mianowicie:

- wygenerowanych przez Grailsy metodach wyszukujących encje w bazie typu findByName() (na warsztatach było tylko widać w wygenerowanym z rusztowania kontrolerze metodę get()), tym bardziej, że jest to prawdopodobnie jeden ze sztandarowych przykładów na zastosowanie dynamicznej modyfikacji klas i mechanizmu MOP,

- krótka wzmianka o możliwości wykorzystania do wyszukiwania języka HQL (i kryteriów, jeśli byłby czas),

- testowanie (na warsztatach nawet nie otworzyliśmy pliku z prostym testem), gdyż na duży plus Grailsów należy zaliczyć udostępnienie gotowej infrastruktury do przeprowadzania testów,

- wtyczki, czego najbardziej brakuje, gdyż wydaje mi się, że jest to cecha, która ma szansę odróżnić Grails od innych rozwiązań (a wg Roadmap, wtyczki w wersji 2.0 mają być pakunkami OSGI, więc bardziej je zgłębiając będziesz mógł połączyć różne tematy, które cię interesują). W wspomnianej prezentacji jest pokazane jak szybko za pomocą wtyczek (a konkretnie wtyczki Searchable) szybko dodać obsługę wyszukiwania do aplikacji i ta cecha naprawdę może robić wrażenie.


Najbardziej trafne jest owe wskazanie na brak praktyki w pracy z Groovy/Grails. Zbyt często wchodziłem w pułapki technologiczne, których nie potrafiłem do końca wyjaśnić, a to pewnie właśnie z powodu niewielkiego doświadczenia praktycznego. Bardzo cenna wiedza przy "wzmocnieniu" kolejnych warsztatów. Zresztą sądzę, że uwagi są cenne nie tylko dla mnie, ale dla wszystkich przygotowujących warsztaty. Stąd pomysł na upublicznianie komentarzy i pomysł na powrót do nauczyciela. Jak to bywa w życiu, po kilku zmianach przyszło mi zmagać się z Git'em. Nie potrafiłem (a w zasadzie wciąż nie do końca potrafię) wyjaśnić, dlaczego wciąż pojawiał się komunikat "Your branch is ahead of 'origin/master' by 5 commits." przy wydawaniu polecenia git status.
 devmac:nauczyciel jacek$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
#
nothing to commit (working directory clean)
Zacząłem poszukiwania w Sieci i na stackoverflow w pytaniu Why is Git telling me “Your branch is ahead of ‘origin/master’ by 11 commits.” and how do I get it to stop? znalazłem rozwiązanie. Wystarczy przemianować origin na repo nauczyciela. Może przy kolejnym projekcie uda mi się zrozumieć, o co w tej zmianie chodzi. Może ktoś wyjaśniłby Jackowi?
 devmac:nauczyciel jacek$ git remote show origin
* remote origin
Fetch URL: git://github.com/jaceklaskowski/nauczyciel.git
Push URL: git://github.com/jaceklaskowski/nauczyciel.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)

devmac:nauczyciel jacek$ git remote -v
origin git://github.com/jaceklaskowski/nauczyciel.git (fetch)
origin git://github.com/jaceklaskowski/nauczyciel.git (push)

devmac:nauczyciel jacek$ git remote rm origin

devmac:nauczyciel jacek$ git remote add origin git@github.com:jaceklaskowski/nauczyciel.git

devmac:nauczyciel jacek$ git status
# On branch master
nothing to commit (working directory clean)
Teraz jest czysto, ale dlaczego wcześniej nie było...hmmm...chyba nie rozumiem jeszcze tego Gita. Pomocy!

p.s. Jest robótka od zaraz przy projekcie z IBM WebSphere Message Broker w Warszawie (może i dałoby się zdalnie?). Nie wiem nic nt szczegółów cenowych, ale zlecający wydali mi się na tyle sensowni, że postanowiłem im pomóc w odnalezieniu właściwej osoby. Zainteresowany? Proszę o kontakt na priv.

3 komentarze:

  1. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  2. Jacku kluczem do zrozumienia jest uświadomienie sobie, że Git to system rozproszony. I lokalne repozytorium może sobie iść lekko innym torem niż zdalne.
    Komunikat "Your branch is ahead of 'origin/master' by 5 commits." nie jest niczym złym i oznacza najzwyklej to, że do lokalnego repozytorium wykonałeś już 5 commit'ów od ostatniego push'a. Twoje lokalne repozytorium wyprzedza tym sposobem repozytorium zdalne.
    Robisz wtedy pull (nadal jesteś 5 commits ahead) i jesteś zgodny z repozytorium zdalnym. Następnie push i jesteś spokojny :-)
    Pamiętaj, że commit w Git'cie nie jest wykonywany do repozytorium zdalnego.

    OdpowiedzUsuń
  3. O, teraz jest zdecydowanie jaśniej. Dzięki!

    OdpowiedzUsuń