2. Verziókezelés - egyénileg
Állapot rögzítése – vissza tudunk térni, mentés
Állapot megjelölése – tudjuk mi van élesben, történet
Elágaztatás – éles és fejlesztői változat
Különbség képzés és alkalmazás – diff és patch
3. Verziókezelés - csapatban
Amire egyénileg, továbbá
Több fejlesztő dolgozhat ugyanazon a projekten
Nem e-mailben küldözgetjük a dolgokat!
Merge – összefűzés, ütközések kezelése
Blame / praise – ki csinálta a változást
4. Hol találkozunk vele?
- fejlesztés, kódolás - az összes eszköz támogatja
- dokumentum management rendszerek (ECM, portál)
- felhő szolgáltatások (dropbox, o365, google drive)
- parancssor
7. Központosított verziókezelés (svn)
- egy központi repository (egy server)
- working copy „checkout”
- net kapcsolat folyamatosan kell
Tipikus workflow:
- checkout-change-update-(resolve)-commit
9. Elosztott verziókezelés (git)
- van egy központi server, de nem kell folyamatosan
- teljes repository „fetch”, minden munkaállomáson megvan (kb) minden
- net kapcsolatot csak fetch és push használja
Tipikus workflow:
- fetch-merge-add-commit-push
- fetch-rebase-add-commit-push
11. Git clone
git clone https://github.com/gabrielke/teszt1.git
Fork:
- ”elágaztatjuk” az eredeti projektet, a kapcsolat megmarad (a forrás is tud róla)
12. Github.com
- legnagyobb git repository
- nagyon sok cég a privát dolgait is ezen tartja
- nagyon sok opensource projekt (kb. mind) itt van
- mindent ami publikus le lehet clone-ozni
- nézegessétek a fent levő kódokat, küldjetek be javításokat, tegyétek ide a fejlesztéseiteket
- legjobb ajánlólevél a github-os usernevet elküldeni – minden látszik belőle
13. Git checkout
- lokális váltás a branchek között
- nem kell hozzá hálózat
- „untracked file”-okra figyelni kell (megmaradnak)
- a default branch a „master”
15. Git remote
- távoli repository beállítása (lehet egyszerre több)
- git clone automatikusan beállítja a forrásra
- a default név: origin
- külön lehet fetch és push remote-ot állítani (nem szokás)
16. Git status és git log
Git status
- file-ok állapota
- tracked/untracked
- changed
Git log
- történések listája fordított időrendben
- helyi adatok alapján (fetch!)
- commit ID
18. Git fetch és git push
git fetch: letölti a távoli repository-ból a változásokat (de azok még nem látszanak!)
git fetch origin
git push: feltölti a lokális commitokat (!) a remote repositoryba
git push origin
19. Git merge
Ez a history :
- A - B - C - D - remote HEAD
E - F - G - local HEAD
Merge után:
- A - B - C - D - remote HEAD
E - F - G - local HEAD - new local HEAD
20. Git rebase
Ez a history :
- A - B - C - D - remote HEAD
E - F - G - local HEAD
Rebase után:
- A - B - C - D - remote HEAD - E' - F' - G' - local HEAD'
21. Github pull request
- Javításainkat, fejlesztéseinket más projektjébe így tudjuk beküldeni.
Menete:
- megcsináljuk a javítást
- commit, push saját repoba, valamilyen branchre (nem muszáj master)
- kijelöljük a javított és a base branchet, ez alapján elkészül a pull request
23. Git rebase és git merge (opcionális)
# create a topic branch based on current master
git checkout -b my_cool_new_feature
# work on feature...
vi file
git add file
git commit -s
# meanwhile, someone else has made changes to master...
git checkout master
git pull
# now rebase so that your topic branch applies on top of current HEAD of master
git checkout my_cool_new_feature
git rebase master
24. Git rebase és git merge 2. (opcionális)
# fix any conflicts that may be discovered on the way
vi file
git add file
git commit -s
# resume the rebase
git rebase --continue
#merge it in locally
git checkout master
git merge my_cool_new_feature
git branch -d my_cool_new_feature
# and propagate it back out to the origin
git push
#also delete remote branch
git push origin –d my_cool_new_feature
Editor's Notes
Egyik alap probléma a bináris file-ok verziókezelése
Több fejlesztő ugyanazon – nem biztos h ugyanazon a file-on!
Patch és diff: text és bináris fileok
- látszik h a remote master branch-en egyszerre jelenik meg az összes változás
- Valakinél lokálisan természetesen össze kell állnia a képnek
Add – hozzáadás
Commit –s : signoff
Commit –m: message, nincs külön editor ablak
Merge: nem írja át a lokális commitokat
Itt ugye a rebase átírja a commitokat, G-t is.
G’ nem volt tesztelve, G igen.
Viszont a history sokkal áttekinthetőbb