- január 2012 (1)
- július 2011 (1)
- május 2011 (1)
- február 2011 (1)
- január 2011 (3)
- december 2010 (2)
- november 2010 (2)
- október 2010 (3)
- szeptember 2010 (2)
- július 2009 (1)
- 1 / 2
- ››
Már egy ideje írogatom magamnak azokat a git parancsokat és beállításokat, amiket érdemes megjegyezni és ha véletlen elfelejtenénk akkor jó ha megvan valahol leírva, ne kelljen keresgélni. Én az svn-ről szoktam át a git-re, ezért úgy gondolom azoknak akik hasonlóan cselekedtek - vagy cselekednek - különösen hasznos lehet egy ilyen gyűjtemény.
A leírás folyamatosan bűvülni fog és hamarosan elkészül hozzá a letölthető formátum is, amit szintén rendszeresen frissítek majd, ezért akit érdekel annak érdemes követnie twitter-en, mert ott fogom kommunikálni a változásokat.
És akkor jöjjön a lényeg, a git cheat sheet:
Miután a git-el feltelepítettük le kell generálni az ssh kulcsokat, amiket az általunk használt repok-nak meg kell adni:
ssh-keygen -f ~/.ssh/git.host.id_rsa ssh-add <path-to-private-key> ssh-agent
Ezeket a beállításokat a ~/.gitconfig fájlban kell beletenni telepítés után. Beállítjuk vele az azonosítónkat, a rivídítéseket és a színeket.
[alias]
st = status
ci = commit
co = checkout
br = branch
df = diff
lg = log -p
ls = ls-files
[user]
name = Kalman Hosszu
email = hosszu.kalman@gmail.com
[color]
ui = auto
[color "branch"]
current = green bold
local = blue
remote = red
[color "diff"]
meta = yellow bold
frag = magenta bold
old = red bold
new = green bold
whitespace = red reverse
[color "status"]
added = green
changed = blue
untracked = red
[core]
whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eolMac-en használok egy parancssort, aminek két nagyon hasznos funkciója van:
A kód a következő:
# Set git autocompletion and PS1 integration if [ -f /usr/local/git/contrib/completion/git-completion.bash ]; then . /usr/local/git/contrib/completion/git-completion.bash fi GIT_PS1_SHOWDIRTYSTATE=true if [ -f /opt/local/etc/bash_completion ]; then . /opt/local/etc/bash_completion fi # Nice prompt PS1='\[\033[0;32m\][\t]\[\033[0m\] \u@\h:\[\033[0;33m\]\w\[\033[0;31m\]$(__git_ps1)\[\033[00m\] \$ '
A beállítások eredmény így néz ki:
Ezekkel a sorokkal létre lehet hozni egy üres repót,
mkdir modulneve cd modulneve git init git add README.txt git ci -m "Initial commit"
majd hozzáadhatjuk a távoli szerverhez. Persze a git-nél nem szükséges, hogy legyen remote, lokálba is megéri használni
git remote add origin urlBranch létrehozása, majd átváltás rá:
git branch branchName git checkout branchName
Ugyanez egy lépésben:
git checkout -b branchName
Branch elküldése a remote-ra:
git push origin branch neveBranch-ek listázása
git branchBranch-ek listázása a remote-on találhatóakkal együtt
git branch -a
Távoli branch-be átlépés lokálisan
git checkout -b localBranch remoteBranch
Lokálisan törölhetjük
git branch -d branchName
Majd a remote-ról is ha oda is elküldtük
git push origin :branchNameA tag-et létrehozzuk
git tag tagNameMajd kétféleképpen küldhetjük el a távoli repo-ba:
git push origin tagNamegit push --tags origin
Kitörölhetjük lokálisan
git tag -d tagName
A remote-ról is, ha oda is feltoltuk már:
git push origin :refs/tags/tagName
Ezt nagyon szeretem, ha elszúrtam a commit-et akkor sincsen semmi probléma, módosíthatok rajta mielőtt elküldeném a remote-ra.
Ha még szeretnék az előző commit-hoz módosítást hozzáadni akkor megtehetem a következő paranccsal:
git add filePath git commit --amend
Ha csak az üzenetet szeretném módosítani:
git commit --amend -m "My new commit message"
Előfordulhat az a szituáció is, hogy egy ideje nem commit-oltunk. Ekkor sincs semmi vész a -p kapcsolóval felbonthatjuk hogy a fájl módosításai közül miket szeretnénk a commit-ba beletenni, így ha megírtunk 5 fgv-t, akkor azt szépen 5 (vagy több) commit-ba rendezhetjük
git add -p filePath git commit -m "My commit message"
A svn revert filePath paranccsal visszaállíthatjuk a fájlt a repoban található változatra, tehát minden változásunk eltűnik. Ezt git-ben a következőképpen tehetjük meg:
git checkout filePathHa az egész repót vissza akarjuk állítani akkor pedig:
git reset --hard
Ha a teljes branch-et szeretnénk merge-elni, akkor azt úgy tehetjük meg, hogy átlépünk abba a branch-be, ahova szerenénk merge-elni és kiadjuk a merge parancsot:
git checkout toBranch git merge fromBranch
tehát itt abban a branch-ben állunk ahova szeretnénk merge-elni a változtatásokat, és arra a branch-re adjuk ki a parancsot ahonnan szerenénk.
Vagyis amikor egyetlen commit-ot szeretnénk csak merge-elni:
git cherry-pick commitHashVagyis amikor a két megadott commit közötti változásokat szerenénk merge-elni:
git cherry-pick fromCommitHash^..toCommitHashItt nem kell megadni, hogy melyik branch-ből szeretnénk merge-elni a módosításokat, mert a commit-ok az egész repón elérhetőek
A commit-ok tárolása nélkül:
git diff > fileName.patch
A commit-okat is tárolva:
git format-patch -k --stdout fromHash..HEAD > fileName.patch
Commit-ok tárolása nélkül
git apply -v PathToPacth
Ha a második lehetőséget választottuk a patch készítésénél, akkor azt is meg lehet oldani, hogy a patch készítő commit-jei ugyanúgy megjelenjenek. Ez szerintem nagyon hasznos:
git am PathToPatchEgyenlőre ennyi, ahogy írtam a lista folyamatosan bűvül és hamrasan elkészül az offline verzió is. Akit érdekelnek a frissítések a twitter csatornámon keresztül értesülhet róla.
Prompt
Szep hosszu prompt, lehet ezzel dolgozni? :)
Csak a fájlrendszer miatt
Csak a fájlrendszer miatt olyan hosszú az :) Én tudok vele ;)
Reset
reset parancsról nem tudom svn-ben, csak revert-ről, amúgy jó doksi :)
Fail
Benéztem, javítottam, köszi hogy szóltál!
ignore
Írhatnál még az ignore-ról is. Ahogy elkezdtem git-el foglalkozni, rögtön előjött, és nem olyan egyszerű, mint amilyennek kinéz.
SmartGit
Elkezdtem foglalkozni a git-tel, de kissé megriadtam a parancsok sokasságától. Napi szenten az SVN-t használom, de ott max az 'snv up', 'svn co', az 'svn st' meg az 'svn ci -m ""' az, amit használok, a conflictokat gui-val rendezem.
Ha valaki hozzám hasonlóan félénken közelít a git felé, annak ajánlom a SmartGit nevű progit (http://www.syntevo.com/smartgit/index.html), mely elérhető Windows, Linux és OSX alá is.
Míg parancssorból nem igazán boldogultam, mert mindenféle hibaüzenetekbe botlottam, ezzel 2 perc alatt klónoztam, amit kellett és készen áll a munkára.
Mindenkinek ajánlom!