Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Git

No description
by

Richard Radics

on 25 November 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Git

Git alapok
Git belseje
Bevezetés
Tool-ok
A branchelés egy eszköz, hogy elválaszd a production kódot a félkész / fejlesztés alatt álló kódjaitól.
Branchek
Munka Git-tel
Nézzük meg közelebbről mi is valójában a Git.
Mi a Git?
Git történelme
Git
Elosztott verziókezelő rendszer
A DVCS (Distributed VCS) kliensek teljes másolattal rendelkeznek a repository-ról
A Server visszaállítható, bármelyik kliens repository-jával
A csapatok együttműködhetnek más, külső repository-kkal
Git - DVCS
A Git dióhéjban.
Git alapok
Git történelem
Linus Torvalds találta ki
A Linux közösség készítette 2005-ben, hogy lecserélje a BitKeeper -t
Célok a fejlesztésnél:
egyszerű tervezés
nem-lineáris fejlesztés támogatása
teljesen elosztott
képes legyen kezelni a Linux kernel repository-t
Snapshotok változások helyett
A fő különbség a Git és a többi verziókezelő rendszer közt az amit a Git gondol az adat fogalmáról.
Lokális operációk
A műveletek többségének helyi fájlokra és erőforrásokra van szüksége
Ez azt jelenti, hogy a helyi repository tartalmazza az egész history-t
Nem vagy annyira gátolva a munkában, ha offline vagy
Git integrity
Minden objektum a Git-ben kap egy checksum-ot
Ez a motorháztető alatt működik
A Git SHA-1 (40 karakter hosszú hex) használ
pl.: 92b8b694ffb1675e5975148e1121810081dbdffe
Add operációk
Közel minden művelet a Git-ben adatot szúr be az adatbázisba
Nagyon nehéz az adatvesztés
A Git 3 állapota
A Git 3 állapotát különbözteti meg a fájloknak:
commited, modified és staged
Kezdeti beállítások
Azonosító
Account beállítása a Git-ben (ez látszik majd a history-ban):
Editor
Default szerkesztő beállítása:

Diff tool

Default diff tool beállítása:
Beállítások listázása
A beállítások ellenőrzéséhez használd ezt:
Git segítség
Legegyszerűbb út:
$ git config --global user.name "Sajat Nevunk"
$ git config --global user.email "sajat@email.címunk"
$ git config --global core.editor vim
$ git config -global merge.tool vimdiff
$ git config --list
core.symlinks=false
core.autocrlf=false
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
user.name=richard.radics
user.email=richard.radics@gmail.com
...
$ git help <verb>
$ git <verb> --help

Repository készítése
2 féleképpen készíthetsz Git reposityorit:
Meglévő fájlokból, amikből készít egy repository-t amik tartalmazza azokat
Remote repository-ból
Változások követése
Log
A repository commit-ok adatait a következő parancs segítségével érhetjük el:
Dolgok visszacsinálása
Néha megesik.
Távoli repository
Tagelés
Tipp
Repository inicializálás
A projekt könyvtárában:
$ git init
Ami létrehoz egy .git könyvtárat az összes szükséges fájlokkal.
Ezútán hozzá lehet adni a fájlokat:
$ git add *.java
$ git add README
$ git add .gitignore
$ git commit -m 'Initial version'
Clone repository
Ha meglévő repository-ból szeretnél készíteni:
$ git clone https://github.com/keyboardsurfer/Crouton.git local_git
Ezután a remote repository fájljai alapján elkészül a local repository, benne a szükséges .git és source könyvtárakkal.
File Status
Status check
Check status
Fájlok hozzáadása
Add
Változások checkolása
Az alábbi paranccsal megnézhetjük, mi változott a fájlokban:
Fájlok ignorálása
Automatikusan ignorálhatóak fájlok, könyvtárak amiket definiálhatunk a .gitignore fájlokban
Staging changed files
- Changes to be committed:
Azok a fájlok, amik ez alatt szerepelnek, benne lennének az aktuális commit-ban, azaz ők staged állapotúak is.
- Changes not staged for commit:
Ha változtatok egy traced állapotú fájlon, akkor az ide kerül, azaz not staged állapotot kap. Ezek a fájlok nem lesznek benne az aktuális commit-ban.
Fájlok áthelyezése
A Git a fájlok mozgatását nem trackeli, semmilyen metadatát nem tárol el a műveletről.

Az alábbi paranccsal lehetséges fájlt áthelyezni:
Skip stage
Commit
Ha mindent bepakoltunk a stage-be, amit szeretnénk a következő snapshot-ban szerepeltetni, akkor nyomhatjuk a commit parancsot



Mindent not staged állapotú fájl kihagyásra kerül a commitból
Fájlok törlése
Az alábbi parancs kitörli a fájlt a traced-ek közül, a stage-ről, és fizikailag is a mappából:
Minden fájl az alábbi két állapot egyikét veheti fel:
- tracked:
Azok a fájlok, amik benne vannak a legutóbbi snapshot-ban (commit-ban).
-untracked:
Azok a fájlok, amik nincsenek benne a legutóbbi snapshot-ban.
A tracked fájlok három további állapotban lehetnek:
- modified:
A fájl módosult a legutóbbi commit óta.
- unmodified:
A fájl nem módosult a legutóbbi commit óta.
- staged:
A fájl benne lesz a következő commit-ban.


$ git status
On branch master
Your branch is up-to-date with 'origin/master'

nothing to commit, working directory clean
Változás történik
$ git status

On branch master
Your branch is up-to-date with 'origin/master'.

Untracked files:
(use "git add <file>..." to include in what will be committed)

valami.txt

nothing added to commit but untracked files present (use "git add" to track)
$ git add valami.txt
$ git status


On branch master
Your branch is up-to-date with 'origin/master'.

Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: valami.txt

Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: valami.txt

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: valami.txt

.settings
bin
*gen*
*target
*.apk
Globálisan és projektenként is definiálhatóak.
$ git diff
A git diff csak a not staged állapotú változásokat látja

Ha a staged állapotú változásokat is szeretnénk látni, akkor az alábbi változatot kell használnunk:

$ git diff --cached

Ha túl komplex a stage area pl túl sok fájl módosult, akkor lehetséges a stage állapot automatikus beállatása a fájlokra commit-oláskor.

$ git commit -a -m 'valami commit
$ git commit -m 'initial commit'
$ git rm readme.txt

Ha fizikailag nem szeretnénk törölni, csak a stage-ről (illetve a traced-ek közül is):
$ git rm --cached readme.txt
$ git mv honnanFile hovaFile
$ git log
Az egyik hasznos kapcsolója a log parancsnak, amivel a commit-ok közötti különbségeket nézhetjük meg:
$ git log -p
Egy másik lehetőség, ha csak az utolsó két commit-ot szeretnénk látni:
$ git log -2

Számos további kapcsolóval felruházható
Utolsó commit
Megesik, hogy túl korán commitolunk, és lefelejtünk egy fájlt.
Az utolsó commit-ot megismételhetjük, ezzel egy új commit id-t kapunk:
Unstaging
A következő paranccsal kivehetjük a stage zónából a fájlunkat (így nem lesz benne a kommitban)
Unmodify
Közbe rájövünk, hogy minden változtatást el szeretnénk vetni:
$ git commit --amend
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

modified: README
new file: valami.txt

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: .gitignore
modified: valami.txt

$ git reset HEAD README

Unstaged changes after reset:
M .gitignore
M README
M valami.txt
$ git status

On branch master
Your branch is up-to-date with 'origin/master'.

Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: valami.txt

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: .gitignore
modified: README
modified: valami.txt
$ git status

On branch master
Your branch is up-to-date with 'origin/master'.

Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: valami.txt

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: .gitignore
modified: README
modified: valami.txt
$ git checkout -- README
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: valami.txt

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: .gitignore
modified: valami.txt
Saját remote repositoryk
Miután clone -oztuk a távoli repository-t, megnézhetjük milyen távoli repository-k vannak beállítva.
Remote hozzáadása
Megesik, hogy több remote repository-ra van szükség.

Push
A változtatásaidat a push paranccsal küldheted fel.
Fetch és Pull
$ git fetch origin master
Remote információk
$ git remote show pb

* remote pb
Fetch URL: https://github.com/keyboardsurfer/Crouton.git
Push URL: https://github.com/keyboardsurfer/Crouton.git
HEAD branch: master
Remote branches:
develop tracked
feature/back_to_java_6 tracked
feature/fitsSystemWindowsFix tracked
feature/multiple_croutons tracked
gh-pages tracked
master tracked
Local ref configured for 'git push':
master pushes to master (local out of date)
Remote átnevezés
$ git remote rename pb crouton
$ git remote
crouton
origin
$ git remote
origin

$ git remote -v
origin https://github.com/L0rDKadaj/Android-ViewFlipperIndicator.git (fetch)
origin https://github.com/L0rDKadaj/Android-ViewFlipperIndicator.git (push)
$ git remote add pb https://github.com/keyboardsurfer/Crouton
$ git remote -v
origin https://github.com/L0rDKadaj/Android-ViewFlipperIndicator.git (fetch)
origin https://github.com/L0rDKadaj/Android-ViewFlipperIndicator.git (push)
pb https://github.com/keyboardsurfer/Crouton.git (fetch)
pb https://github.com/keyboardsurfer/Crouton.git (push)

Fetch
Nem írja át a könyvtárunkban a fileokat, de megmutatja mi a különbség a Szerver verziója és a mi verziónk között.
Pull
Az origin rövidítésű központi adatbázis master ágával (egyelőre ez az egyetlen) frissíti a saját könyvtárunkat (ha kell).

Merge
Ha a helyzet jó, akkor átvezeti a változtatásokat. Ha tudja.
$ git merge master origin/master
$ git merge pull origin master
$ git push origin master
$ git checkout master
Visszaállítja a legutóbb commitolt verziót a könyvtárunkban.
Központosított rendszerek
Ezek a rendszerek, úgymint a CVS, a Subversion (SVN) és a Prefoce, egy darab központi szerveren tárolják az összes verziókövetett fájlt, a kliensek pedig ebből a központi tárolóból kérik le azokat.
Elosztott rendszerek
A Git, Mercurical kliensek nem csak a legutolsó állapotot kérik le, hanem a teljes repositorit.
Ditributed workflows
Az elosztott felépítés miatt sokkal rugalmasabban tudnak a fejlesztők a projekteken dolgozni.
Ezenkívül, a legtöbb ilyen rendszer támogatja a több távoli repositori elérését, így lehetővé válik számunkra hogy több különböző csoportokkal különböző módun tudjanak együtműködni ugyaz azon a projekt keretein belül

Lehetőség van több munkafolyamat (workflow) alkamazására, ami egy centralizát hiearchiskus modelben elképzelhetetlen
Dictator and Lieutenants Workflow
Az eloszotott munkafolyamat egy másik variánsa

Így működik a Linux-kernel fejlesztése.
Integration-Manager Workflow
Az integration manager a fejlesztők public repository-jaiból ellenőrzi és mergeli a változtatásokat.

"A contributor küld egy pull requestet."

Így működik a GitHub.
Centralized Workflow
Egy központi repository van, ide szinkronizál mindenki, mindenkinek van commit joga.
A CVS, SVN és a Git-ben is működik ez a modell.
Tagelés utána
Ha lefelejtetted, akkor a commit checksum elejével, megtagelheted.
Tag megosztása
A tag-ed a repository-ba az alábbi paranccsal kerül:
Tagek listázása
$ git tag

1.5
1.6
1.8
1.8.1
1.8.2
1.8.3

$ git tag -l 'v1.4.2.*'
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4
Tag létrehozása
Kétféle tag létezik a git-ben:

- lightweight
Olyan inkább mint egy branch, egy pointer egy kiemelt commit-ra.

- annotated
Teljes objektumként tárolódnak a git-ben, a tag készítőjének és további minden adattal.
GNU (GPG)-vel is "zárható" akár.

Munkaközben lightweight, release-kor annotated ajánlott.
Annotated tagek
$ git tag -a v1.4 -m 'my version 1.4'
$ git tag
v0.1
v1.3
v1.4
Signed tagek
- Signed tag az '-s' kapcsolóval hozhazó létre
- Jelszó szükséges hogy a user feloldja
Lightweight tagek
A commit checksum-ja tárolódik csak el.

Lightweight tag létrehozásakor, ne használd a kapcsolókat!
$ git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Scott Chacon <schacon@gee-mail.com>"
1024-bit DSA key, ID F721C45A, created 2009-02-09
$ git show v1.5
tag v1.5
Tagger: Scott Chacon <schacon@gee-mail.com>
Date: Mon Feb 9 15:22:20 2009 -0800

my signed 1.5 tag
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)

iEYEABECAAYFAkmQurIACgkQON3DxfchxFr5cACeIMN+ZxLKggJQf0QYiQBwgySN
Ki0An2JeAVUCAiJ7Ox6ZEtK+NvZAj82/
=WryJ
-----END PGP SIGNATURE-----
commit 15027957951b64cf874c3557a0f3547bd83b3ff6
Merge: 4a447f7... a6b4c97...
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sun Feb 8 19:02:46 2009 -0800

Merge branch 'experiment'
$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5
$ git tag -a v1.2 -m 'version 1.2' 9fceb02
$ git push origin --tags
Lehetséges alias-ok definiálása a Git-ben:
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

$ git config --global alias.unstage 'reset HEAD --'

$ git unstage fileA



Create branch
git checkout -b "devBranch"
Merging branches
Rebase branch
KDiff3

http://kdiff3.sourceforge.net/
SourceTree

http://www.sourcetreeapp.com/
Git Extensions

https://code.google.com/p/gitextensions/
Git-Flow
git-flow cheatsheet

http://danielkummer.github.io/git-flow-cheatsheet/

http://nvie.com/posts/a-successful-git-branching-model/
https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
Full transcript