Вы находитесь на странице: 1из 25

1. Git l g?

Git l tn gi ca mt H thng qun l phin bn phn tn (Distributed


Version Control System DVCS) l mt trong nhng h thng qun l phin bn
phn tn ph bin nht hin nay. DVCS ngha l h thng gip mi my tnh c th
lu tr nhiu phin bn khc nhau ca mt m ngun c nhn bn (clone) t
mt kho cha m ngun (repository), mi thay i vo m ngun trn my tnh s
c th y thc (commit) ri a ln my ch ni t kho cha chnh. V mt my
tnh khc (nu h c quyn truy cp) cng c th clone li m ngun t kho cha
hoc clone li mt tp hp cc thay i mi nht trn my tnh kia. Trong Git, th
mc lm vic trn my tnh gi l Working Tree. i loi l nh vy.

Ngoi ra, c mt cch hiu khc v Git n gin hn l n s gip bn lu li cc


phin bn ca nhng ln thay i vo m ngun v c th d dng khi phc li d
dng m khng cn copy li m ngun ri ct vo u . V mt ngi khc c th
xem cc thay i ca bn tng phin bn, h cng c th i chiu cc thay i
ca bn ri gp phin bn ca bn vo phin bn ca h. Cui cng l tt c c th
a cc thay i vo m ngun ca mnh ln mt kho cha m ngun.
C ch lu tr phin bn ca Git l n s to ra mt nh chp (snapshot) trn
mi tp tin v th mc sau khi commit, t n c th cho php bn ti s dng li
mt nh chp no m bn c th hiu l mt phin bn. y cng chnh l li
th ca Git so vi cc DVCS khc khi n khng lu cng d liu m s lu vi
dng snapshot.

2. Github l g?

C nhiu ngi khi nghe ni n Git s ngh ngay n Github v c th s c mt s


hiu lm vi h. Cng xin nhc li rng, Git l tn gi ca mt m hnh h thng.
Nh gii thch trn, cc my tnh c th clone li m ngun t mt
repository v Github chnh l mt dch v my ch repository cng cng, mi
ngi c th to ti khon trn to ra cc kho cha ca ring mnh c th
lm vic.
Mc d Git c th lm vic vi bt k trn my ch Linux no nhng d hiu v
thc t hn, chng ta s s dng Git vi Github trong phn minh ha ny.
Ti sao nn s dng Git?
C rt nhiu li th bn nn s dng Git trong vic lp trnh ngay t hm nay,
bt k l lp trnh ci g i chng na.
o

Git d s dng, an ton v nhanh chng.

C th gip quy trnh lm vic code theo nhm n gin hn rt nhiu bng
vic kt hp cc phn nhnh (branch).

Bn c th lm vic bt c u v ch cn clone m ngun t kho cha hoc


clone mt phin bn thay i no t kho cha, hoc mt nhnh no t
kho cha.

D dng trong vic deployment sn phm.

V nhiu hn th na.

Nu bn l mt lp trnh vin th Git l mt h thng bn cn phi bit cch s


dng, t nht l ngay t by gi.
Ci Git vo Linux

Nu bn ang s dng h iu hnh Ubuntu/Debian th c th s dng lnh sau


ci Git.
$ sudo apt-get install git
Hoc lnh sau ci trn CentOS/Fedora/RHEL.
$ yum install git
Ci Git vo Mac OS
i vi Mac, bn c th s dng file installer ti ti a ch http://gitscm.com/download/mac ci t.
Ci Git vo Windows
Nu bn dng Windows th c th ti file .exe ci t Git ti a ch http://gitscm.com/download/win. Khi ci bn c th nguyn ty chn mc nh m khng
cn ty chnh g thm nu bn cha hiu v n.
Sau khi ci t Git vo Windows, bn s cn m ng dng Git Bash ln bt u
s dng cc dng lnh ca Git.
Thit lp chng thc c nhn
Sau khi ci Git xong, vic u tin bn nn lm l khai bo tn v a ch email vo
trong file cu hnh ca Git trn my. lm iu ny bn s cn s dng hai lnh
sau y thit lp tn v email.
$ git config --global user.name "QuangHD"
$ git config --global user.email "quanghd@fpt.edu.vn"
Sau khi thit lp xong, bn c th kim tra thng tin chng thc trn user ca bn
bng cch xem tp tin C:\Users\ten-tai-khoan-dang-nhap\.gitconfig (trn my ca ti
s l : C:\Users\Quang\.gitconfig).
\>notepad .gitconfig
[user]
name = QuangHD
email = quanghd@fpt.edu.vn
Hoc bn cng c th dng lnh git config --list ghi danh sch cc thit lp hin
ti m bn lm.
Nh vy l bn xong bc ban u l ci t Git v thit lp tn v email ca
mnh vo Git bt u lm vic. phn sau, mnh s hng dn cch bn to ra
mt local repository (kho cha trn my c nhn) xem Git hot ng th no.
3. To local repository

Trc ht, to mt repository th bn cn truy cp vo th mc ca m ngun vi


lnh cd, sau s dng lnh git init khi to repository trong th mc . v
d ny, mnh s to to ra mt th mc mi cha code sau ny v khi to
repository cho n, mnh s dng lnh git init tn_folder n t khi to th mc.
$ git init demo1
Initialized empty Git repository in C:\Users\Quang\demo1\.git
on trn, n hin th dng thng bo mnh khi to mt kho Git trng ti
ng dn nh trn. Lu rng th mc n .git/ l ni n s cha cc thit lp v
Git cng nh lu li ton b thng tin v kho cha, bn khng cn ng chm g
vo th mc .git/ ny.
Nu kho cha ca bn c sn m ngun th bn cn phi a cc tp tin v
trng thi Tracked nhm c th lm vic c vi Git. lm vic ny, bn s
cn s dng lnh git add tn_file, c th s dng du * gom ton b. Sau c
th s dng lnh git status xem danh sch cc tp tin c tracked.
$ git add readme.txt
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: readme.txt
V sau khi tp tin c a vo trng thi tracked v nu mt tp tin tracked
th n phi c a vo li Staging Area (gii thch bi sau) cng bng lnh git
add th bn mi c th tin hnh y thc (commit) nhm lu li bn chp cc thay
i. Lnh commit s c cu trc git commit -m "Li nhn", lc ny tt c cc
tp ang trong trng thi tracked (file mi) hoc mt tp tin c tracked nhng
c mt s thay i mi th s c commit.
$ git commit -m "First Commit"
[master (root-commit) 799db56] First Commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 readme.txt
By gi th bn hon thnh vic commit ln u tin cc tp tin m bn a
vo kho, mnh s ni k hn v vic commit cc bi sau. Tm li l ti y bn
c mt kho cha m ngun Git trn my ca bn.
4. To repository trn Github v lm vic

Trc tin bn cn ng nhp vo Github, sau n vo du + trn menu v


chn New repository.

Bn s cn t tn cho kho cha ca bn. Bn c th chn loi kho cha


l Public (ai cng c th clone) v Private (ch c nhng ngi c cp quyn mi
c th clone).

Khi to xong n s dn bn ti trang hng dn lm vic vi kho cha va to. V


kho cha ca bn by gi s c a ch l https://github.com/$user-name/
$repository, v d https://github.com/HocLT/demo-git.
Vic ca bn by gi l hy clone ci kho cha ny v my ca mnh bng lnh git
clone a_ch.
$ git clone https://github.com/HocLT/demo-git
Cloning into 'demo-git'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done
By gi hy truy cp vo th mc working tree (th mc va clone repository v) v
th to ra mt file tn lREADME.md, sau dng lnh git add a file ny vo
Staging Area.
$ cd demo-git
$ echo "# Huong dan Git co ban" > data.txt
$ git add data.txt
$ git commit -m "First commit on Github"
[master (root-commit) 6e729a4] First commit on Github
1 file changed, 1 insertion(+)
create mode 100644 README.md
Tuy nhin sau khi commit xong, tp tin c commit s vn khng th xut hin
trong kho cha trn Github m bn phi lm thm mt vic na l dng lnh git
push y cc tp tin c commit ln Github. Lu rng bn s cn nhp
ti khon v mt khu Github.
$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 244 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/thachphamblog/hoc-git
* [new branch] master -> master
origin ngha l tn remote (xem bi sau) v master l tn branch, hai ci ny mnh
s gii thch k hn bi ring ca n. By gi bn c th kim tra kho cha ca
bn trn Github ri .

C th bn s thy mi khi push ln Github th n hin th ra thng bo qu di


dng, bn c th cho n cc thng bo i m ch hin th dng khai bo username
v password trn Github th c th thit lp vi lnh ny.
git config --global push.default simple
Tuy nhin nu bn khng thch b hi mt khu na th c th s dng SSH vi
Github, mnh s ni ci ny sau.
5. Staging Area l g?
Staging Area ngha l mt khu vc m n s c chun b cho qu trnh
commit. Trc ht, bn cn phi hiu rng trong cc h thng qun l phin bn
(Version Control System) th cc d liu s c lu tr hai ni, mt l th mc
bn ang lm vic trn my tnh (working tree, mnh khng nhc li na u ? ) v
mt l kho cha m ngun (repository) sau khi bn thc hin thay i (v d nh
kho cha trn Github).
Nhng vi Git th n c thm mt la chn na l c thm mt khu vc trung
gian gi l Staging Area v y chnh l mt li th ln ca Git. Staging Area ngha
l khu vc s lu tr nhng thay i ca bn trn tp tin n c th c commit,
v mun commit tp tin no th tp tin phi nm trong Staging Area. Mt tp tin
khi nm trong Staging Area s c trng thi l Statged (xem thm di).

V a mt tp tin vo Staging Area th bn s cn phi s dng lnh git add


tn_file m mnh c v d phn trc.
6. Commit l g v n hot ng ra sao?
Hiu n gin hn, commit ngha l mt hnh ng Git lu li mt bn chp
(snapshot) ca cc s thay i trong th mc lm vic, v cc tp tin v th mc
c thay i phi nm trong Staging Area. Mi ln commit n s c lu li
lch s chnh sa ca m ngun km theo tn v a ch email ca ngi
commit. Ngoi ra trong Git bn cng c th khi phc li tp tin trong lch s
commit ca n chia cho mt phn nhnh (branch) khc, y l mu cht ca
vic bn s d dng khi phc li cc thay i trc m mnh c gii thiu qua
phn gii thiu serie ny.
V tt nhin, lnh commit trong Git s l git commit -m "Li nhn".
V nu bn mun a tp tin ln repository th bn phi commit n trc ri
sau lnh git push origin master s c nhim v a ton b cc tp tin c
commit ln repository.
iu kin g commit mt tp tin?
Nu bn mun commit mt tp tin , bn s cn phi a tp tin vo trng thi
tracked bng lnh git add tn_file. Trong git c hai loi trng thi chnh l Tracked
v Untracked, c th:
o

Tracked L tp tin c nh du theo di trong Git bn lm vic vi


n. V trng thi Tracked n s c thm cc trng thi ph khc l
Unmodified (cha chnh sa g), Modified ( chnh sa) v Staged ( sn
sng commit).

Untracked L tp tin cn li m bn s khng mun lm vic vi n trong


Git.

Nhng bn phi nn bit rng nu tp tin c Tracked nhng ang ri vo


trng thi (Modified) th n vn s khng th commit c m bn phi a n v
Staged cng bng lnh git add.
B qua Staging Are commit
Nh mnh c ni trn l mt tp tin sau khi c thay i hay to mi th n phi
c thm vo Staging Area vi lnh git add. Tuy nhin, bn c th a mt tp tin
c Tracked commit m khng cn a n vo Staging Area vi tham s a trong lnh git commit. V d: git commit -a -m "Skipped Staging Are to commit".
7. Tm hiu thm v trng thi

Untracked
Nu bn to ra hoc thm vo mt tp tin mi vo trong th mc lm vic ca bn
th n s trng thi Untracked. By gi mnh th to ra mt tp tin mi tn
l faq.html, sau dng lnh git status xem trng thi ca Git trong th mc lm
vic.
$ touch faq.html
$ 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)

faq.html

nothing added to commit but untracked files present (use "git add" to track)
Note: Lnh touch l to ra mt tp tin rng.
By gi bn s thy n lit k ra tn tp tin ang trng thi Untracked. a
n v Tracked bn s s dng lnh git add v xem li trng thi ca n.
$ git add faq.html
$ 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: faq.html


By gi bn thy, tp tin faq.html ca mnh c a v trng thi Staged v n
c th c commit. Ti sao? V bn phi bit rng nu mt tp tin trng thi
Untracked m c a v Tracked th n s nm trng thi Staged lun, tr khi
bn thay i ni dung tp tin ny th n s a v trng thi Modified v n khng
th commit tr khi bn g lnh git add cho n.
Tracked
Mt khi mt tp tin c a v Tracked th n s c th thay i gia 3 trng
thi khc nhau l Modified,Unmodified v Staged.
Trc ht by gi mnh c mt tp tin mi c a v Staged vi lnh git
add nh v d trn. By gi mnh tin hnh thay i ni dung ca tp tin faq.html
ny v xem kt qu ca lnh git status.
$ 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: faq.html

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: faq.html
Bn c thy s k l tp tin faq.html khng? l n c hin th hai trng thi
Staged (c th commit) v Modified (khng th commit) hay cn gi l Unstaged. S
d c s k l y l bi v trc bn to ra tp tin faq.html v a v
Tracked th n cng c a v Staged c th commit. Tuy nhin sau bn
li chnh sa ni dung ca n nn n c mt phin bn khc nm trng thi
Modified (khng th commit). Nu by gi bn g lnh git commit y thc n th
bn chp ca tp tin faq.html ln cui cng bn g lnh git add s c commit
ln ch n khng cha cc ni dung m bn va thm vo. V n c th commit
tp tin faq.html c chnh sa th bn phi g li lnh git add faq.html ln na.
8. Chuyn tp tin t Untracked v Tracked
Trong Git, bn c th a mt tp tin t Tracked v Untracked vi lnh rm tn_file.
Lnh rm s gip bn a tp tin v trng thi Untracked nhng khng xa hn trong
cng.
$ rm faq.html
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: faq.html
Cn nu bn mun xa n lun th dng lnh git rm -f tn_file v nh cn thn khi
dng lnh ny.
Xem git log
xem lch s ca cc ln commit trc , bn s dng lnh git log l s thy.
$ git log
commit ab5f22d697b238ace4bbb221c53c12a3df9d132d
Author: QuangHD <quanghd@fpt.edu.vn>
Date: Wed Sep 21 14:16:44 2016 +0700

First commit on Github

commit 5845e2830672f3ca0ab2ebe37ee0d58f5aeb5ba9
Author: HocLT <hdquang6@gmail.com>
Date: Wed Sep 21 14:13:25 2016 +0700

Initial commit
Bn thy ch? Mi ln commit s c mt checksum ring, v n cng c ghi r ai l
ngi commit vo v commit vo ngy bao nhiu, lc no.
Ngoi ra, bn c th chn thm tham s -p vo hin th chi tit ca mi ln
commit.
$ git log -p
commit ab5f22d697b238ace4bbb221c53c12a3df9d132d
Author: QuangHD <quanghd@fpt.edu.vn>
Date: Wed Sep 21 14:16:44 2016 +0700

First commit on Github

diff --git a/data.txt b/data.txt


new file mode 100644
index 0000000..4215349
--- /dev/null
+++ b/data.txt
@@ -0,0 +1 @@
+"# Huong dan git co ban"

commit 5845e2830672f3ca0ab2ebe37ee0d58f5aeb5ba9
Author: HocLT <hdquang6@gmail.com>
Date: Wed Sep 21 14:13:25 2016 +0700

Initial commit

diff --git a/README.md b/README.md


new file mode 100644
index 0000000..3402d88
--- /dev/null
:...skipping...
commit ab5f22d697b238ace4bbb221c53c12a3df9d132d
Author: QuangHD <quanghd@fpt.edu.vn>
Date: Wed Sep 21 14:16:44 2016 +0700

First commit on Github

diff --git a/data.txt b/data.txt


new file mode 100644
index 0000000..4215349
--- /dev/null
+++ b/data.txt
@@ -0,0 +1 @@
+"# Huong dan git co ban"
Note: Nu log qu di, dng phm mi tn ln xung c tip v n Ctrl + Z
thot.
Hoc nu bn mun ch mun xem 1 ln commit gn nht th thm tham s -1 vo.
Bn cn c th s dng thm mt s ty chn xem log sau ti u hn quy trnh
c log.
o

--since, --after: Xem cc ln commit k t ngy nht nh.

--until: Xem cc ln commit trc t ngy nht nh.

--author: Xem cc ln commit ca mt ngi no .

--grep: Lc cc chui trong log v in ra.

V d:
$ >git log --author=quanghd@fpt.edu.vn --pretty="%s"

First commit on Github


Ci --pretty l g s c ni di.
Lc log vi --pretty
Tham s --pretty rt c ch nu bn mun lc xem mt i tng no trong lch
s commit, v d nh ch xem li nhn commit hoc ch xem email ca ngi
commit.
Cch s dng tham s --pretty l bn phi vit km cc tag ca n nh sau:
$ git log --pretty="%tag"
Cc %tag phi dc t trong cp du ngoc kp v bn c th s dng
nhiu %tag khc nhau.
Danh sch cc %tag:
o

%H Commit hash

%h Abbreviated commit hash

%T Tree hash

%t Abbreviated tree hash

%P Parent hashes

%p Abbreviated parent hashes

%an Author name

%ae Author e-mail

%ad Author date (format respects the date=option)

%ar Author date, relative

%cn Committer name

%ce Committer email

%cd Committer date

%cr Committer date, relative

%s Subject

V d:
$ git log --pretty="%an - %s"
QuangHD - First commit on Github
HocLT - Initial commit

9. Th thut xem log p hn


Bn c th thy mi khi g git log m khng c cc tham s km theo th n hin ra
rt kh nhn. Tuy nhin c mt cch bn c th lm gn ci log mc nh, v
thm mu sc cho n bn d nhn hn.
Trc tin bn copy lnh ny thit lp.
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset %C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrevcommit"
By gi xem log, bn ch cn g git lg xem. Bn c th kt hp n vi cc
tham s trn. Ci quan trng nht l vi cch xem ny, bn c th
thy HEAD (con tr ca branch hin ti) m sau ny khi bn tm hiu ti branch bn
s thy n rt c ch.

Undo Commit
Nu bn cn xa b ln commit trc v cn undo commit li th c th s dng
tham s --amend trong lnh git commit.
$ git log --pretty="%s"
First commit on Github
Initial commit
$ git commit --amend -m "First commit on Github"
[master 14cec0d] First commit on Github
Date: Wed Sep 21 14:16:44 2016 +0700
1 file changed, 1 insertion(+)
create mode 100644 data.txt
$ git log --pretty="%s"
First commit on Github
Initial commit
Lu rng undo ngha l bn quay tr li bc commit ln trc, do vy nu cn b
sung tp tin no vo commit th hy a tp tin vo Staging Area trc.
10.

B tp tin ra khi Staging Area

Nu bn a mt tp tin no vo Staging Area nhng by gi bn mun loi


b n ra khi y khng phi b commit theo th c th s dng lnh git reset
HEAD tn_file. HEAD l ci g th ti phn phn nhnh (Branch) s gii thch.

Trong phn trc, chng ta to mt repository trn dch v Github v Clone n v


my. Nh vy, ci Github l mt my ch repository t xa nn mnh s gi n l
Remote Repository, ngha l repository ny khng nm trn my tnh ca bn.
V phn , bn c thy mnh ku cc bn gi d liu ln repository bng cch
dng lnh git push origin master sau khi commit khng? Ci master l tn
branch m mnh s khng ni bi ny, nhng ciorigin trong on chnh l tn
remote repository. Mc nh khi clone mt repository th n t t tn l origin.
kim tra tn remote, bn c th g lnh git remote -v.
$ git remote -v
origin https://github.com/HocLT/demo-git (fetch)
origin https://github.com/HocLT/demo-git (push)
Trong bn c th thy ci repository mnh clone u c t tn l origin, v
mi repository bn c hai u c hai hnh ng l fetch (ly d liu v t server) v
push (gi d liu ln server).
Nhn li on lnh git push origin master trn, iu c ngha l bn gi tt c
cc thay i trn m ngun my bn ln remote tn l origin vi branch master.
11.

i tn remote

Nu bn khng thch tn origin th c th i tn n li n bng tn khc cho d


qun l nu nh bn c nhiu remote trong mt d n vi lnh git remote rename
tn_c tn_mi. V d mnh cn i torigin sang thach th s i nh sau:
$ git remote rename origin quanghd
$ git remote -v
quanghd https://github.com/HocLT/demo-git (fetch)
quanghd https://github.com/HocLT/demo-git (push)
By gi khi commit hay push bn c th g git push thach master gi m ngun
ln remote repository ny.
12.

Thm mt remote

Trng hp bn cn thm mt ci remote ly d liu khi cn th c th s dng


lnh git remote add tn_remote URL. V d mnh cn remote mt repository v
t tn n l googleandroid th s vit nh sau:
$ git remote add googleandroid https://github.com/googlesamples/google-services

$ git remote -v
C:\Users\Quang\Documents\MyGit\demo-git>git remote -v
googleandroid https://github.com/googlesamples/google-services (fetch)
googleandroid https://github.com/googlesamples/google-services (push)
quanghd https://github.com/HocLT/demo-git (fetch)
quanghd https://github.com/HocLT/demo-git (push)
Sau nu bn mun ly d liu t ci googleandroid kia v th ch cn s dng
lnh git fetch googleandroid.
$ git fetch googleandroid
warning: no common commits
remote: Counting objects: 5234, done.
remote: Compressing objects: 100% (16/16), done.
rRemote: Total 5234 (delta 3), reused 0 (delta 0), pack-reused 5218eceiving objects:
98% (5180/5234), 8.04 MiB | 10.00 KiB/s
Receiving objects: 100% (5234/5234), 8.10 MiB | 15.00 KiB/s, done.
Resolving deltas: 100% (2447/2447), done.
From https://github.com/googlesamples/google-services
* [new branch]

master

-> googleandroid/master

Lu l lnh git fetch n ch ly v v lu vo database ca Git trn my ch khng


c gp vo repository ca bn. gp vo bn c th g thm lnh git merge
googleandroid, trong googleandroid l tn remote.
Cn nu bn mun n ly v trc tip m khng cn gp th s dng lnh git pull
tn_remote, tuy nhin mnh khuyn khch bn nn gp vo branch khi cn v nh
cn thn trong vic gp, tt nht nn to th mc mi trong th mc lm vic ca
bn ri vo m ly v.
13.

S khc nhau giaclone, fetch v pull

C th by gi bn bit c 3 lnh ly d liu v t repository l git clone,


git fetch v git pull. Nhng c ba loi u l ly d liu, th s khc nhau ca n l
g?
git clone
Lnh ny s sao chp ton b d liu trn repository v sao chp lun cc thit lp
v repository, tc l n s t ng to mt master branch trn my tnh ca bn.
Lnh ny ch nn s dng khi bn cn to mi mt Git mi trn my tnh vi ton b
d liu v thit lp ca mt remote repository.

git pull
Lnh ny s t ng ly ton b d liu t remote repository v gp vo ci branch
hin ti bn ang lm vic.
git fetch
Lnh ny s ly ton b d liu t remote repository nhng s cho php bn gp
th cng vo mt branch no trn th mc Git my tnh.
14.

Cc loi giao thc ca Remote Repository

Chng ta khng ch kt ni vi mt remote repository qua giao thc HTTP hay


HTTPS m cn c th chn nhiu giao thc khc, di y l mt vi giao thc
remote repository.
Local Repository
Giao thc ny ngha l bn kt ni ti mt repository no trn chnh my tnh ca
bn v URL ca giao thc s c dng /path/repository/.
HTTP Repository
Giao thc thng dng nht cng nh d hiu nht, thng c s dng nu bn
dng cc dch v remote repository nh Github hay Assembla, n s bao gm nh
dng http://domain.com/repository.git hoc
https://domain.com/repository.git.
SSH Repository
Giao thc ny thng c dng trn cc nhu cu to mt server repository ring
v kt ni thng qua giao thc SSH. ng dn ca giao thc ny s c dng
l user@server:/path/repository.git.
Trong khi lm vic vi Git, bn qu quen thuc vi vic chnh sa m ngun, sau
l commit mi khi chnh sa xong v push ln remote repository nu cn thit.
Nhng by gi mnh c mt v d t ra l mnh mun to mt phin bn th
nghim vi m ngun ang lm vic trong working tree hin ti m khng
gy nh hng n cc code hin ti. Vy th lm cch no? Khng l clone mt
repository t chnh ci working tree hin ti ri sa i hay sao? Nh th rt l mt
cng, m li khng ti u v khng th ng b ha hoc rt kh khn ng b
ha.
M trong Git, chng ta s s dng mt gii php khc tuyt vi hn, d dng hn
gi l phn nhnh(branching), m c th l phn nhnh ci g? l phn nhnh
trong working tree hin ti bn ang lm vic y, v mi nhnh chng ta s gi n
l mt branch.
15.

Branch trong Git l g?

Khi bt u khi to mt repository hoc clone mt repository, bn s c mt nhnh


(branch) chnh tn lmaster (bn c th hiu master l mt ci thn cy). y l
branch m s cha ton b cc m ngun chnh trong repository.

l l do ti sao, cc phn trc khi chng ta push hoc pull hay lm mt s


vic khc th li c tham smaster trong cu lnh, ngha l chng ta ang thc
hin thao tc trn branch master.

By gi nu bn mun to mt s thay i no m c th trc tip s dng trn


working tree hoc commit, push ln repository m khng nh hng n
branch master th s cn to ra mt branch mi vi tn l develop chng hn. V t
mi khi bn thc hin lnh checkout vo branch no th ton b m ngun
trn working tree ca bn s c i sang mi trng dnh cho branch ang
checkout.
Gi mnh ly mt v d n gin, bn branch master bn to mt tp
tin master.html ri commit ln, lc ny khi bn qua ci branch develop ( c to
trc ) th ci tp tin master.html kia s khng c v n c commit bi
branchmaster, khng lin quan g tidevelop. Tng t, cc thay i ca bn
bndevelop cng s khng nh hng g ti bn master c. iu ny c mt ci th
v l n tng tc trc tip trn my tnh ca bn, v d tp tin index.html
ca master c ni dung khc v index.html bn develop th khi bn dng lnh
checkout l ni dung trn my tnh n t i tng ng, l l do bn c th test
nhiu phin bn trn my tnh m khng cn i th mc, ch cn checkout ci
branch.
Gii thch th hi di dng, c vo lm v d c th cho d hiu nh.
16.

HEAD con tr v tr

Trc khi ni tip v branch th mnh xin ni qua mt xu vHEAD. Trong Git, t kha
HEAD s tng trng cho con tr ch cho bn bit bn ang nm u. By gi hy
xem li bi hng dn c log commit ca mnh, tm ti phn ti u log v ci vo.
Sau g lnh git lg th bn s thy t kha HEAD cho bn bit bn ang u
trong working tree.

Nh nh trn th c ngha l mnh ang branch master.

Ngoi ra cn mt cch khc kim tra l c tp tin .git/HEAD


$ cat .git/HEAD
ref: refs/heads/master
Cch to mt branch
Trc tin bn c th xem ton b cc branch m bn ang c trong working tree
bng lnh git branch. Sau nu mun to thm branch, ch cn g lnh git
branch tn_brand. V d mnh cn to branch develop.
$ git branch develop
By gi bn c th g li lnh git branch mt ln na xem s thy brand tn
develop xut hin.
Checkout mt branch
Checkout y ngha l bn truy cp kim tra m ngun trong branch lm
vic y. lm vic ny, bn s dng lnh git checkout tn_branch.
$ git checkout develop
Switched to branch 'develop'
Lc ny bn i sang branch develop ri, kim tra chc n bn c th g cc
lnh kim tra HEAD trn.
By gi bn s lm vic trong branch mi chuyn hay ni ng hn l bn ang lm
vic ch m ci HEAD ang tr ti. chuyn v branch chnh th g git checkout
master.
By gi bn th to mt tp tin no , sau commit branch develop ri chuyn
v branch master s thy nhng g bn lm branch develop hon ton v
ngha master. Di y l v d v vic branch master khng c tp tin
develop.html c to ra t branch develop.
$ touch develop.html
$ git add .
$ git commit -m "Commit develop.html from develop branch"
[develop 8c68896] Commit develop.html from develop branch
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 develop.html
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'thach/master' by 3 commits.

(use "git push" to publish your local commits)


$ ls
README.md data.txt
Tng t vi vic sa tp tin hay bt k lm vic g khc n cng ch p dng thay
i branch bn ang tr ti.
17.

Gp d liu t mt branch

Nu mi branch n nm ring nh vy th bn mun s dng cc thay i mt


branch no cho master th sao? , chng ta c th s dng lnh git merge
chuyn d liu t mt branch no v branch m bn ang tr n. Lu l
branch cn chuyn v phi c commit. V d mnh cn chuyn d liu t
branch develop v master th s lm ln lt cc lnh sau:
$ git checkout master
Already on 'master'
Your branch is ahead of 'thach/master' by 3 commits.
(use "git push" to publish your local commits)
$ git merge develop
Updating 14cec0d..14755cb
Fast-forward
develop.html | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 develop.html
$ ls
README.md data.txt develop.html
18.

Xa branch

Nu bn khng cn dng ti branch no na th c th xa vi lnh git branch -d


tn_branch. Lu l ci branch mun xa phi c gp d liu (merge) v master.
$ git branch -d develop
Deleted branch develop (was 8c68896).
Sau khi xa xong, n s bo branch c mc vo commit vi m
checksum no (8c68896).
19.

Lm vic vi remote branch

Quay li mt xu vi bi remote repository, by gi bn hy to thm mt remote


mi t a ch https://github.com/googlesamples/google-services v t tn
cho remote ny l googleandroid vo working tree ca bn.
$ git remote add googleandroid https://github.com/googlesamples/googleservices
$ git remote -v
googleandroid https://github.com/googlesamples/google-services (fetch)
googleandroid https://github.com/googlesamples/google-services (push)
origin https://github.com/HocLT/demo-git (fetch)
origin https://github.com/HocLT/demo-git (push)
By gi bn c th xem ton b branch ca ci remote googleandroid mi thm vo
bng lnh git remote show googleandroid.
$ git remote show googleandroid
C:\Users\Quang\Documents\MyGit\demo-git>git remote show googleandroid
* remote googleandroid
Fetch URL: https://github.com/googlesamples/google-services
Push URL: https://github.com/googlesamples/google-services
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (local out of date)
By gi bn c th chn mt ci remote branche cn fetch d liu v. V d by gi
mnh s to mt branch mi cho working tree ca mnh tn l android, sau np
d liu trong branch master ca googleandroid th mnh s ln lt lm nh sau.
$ git branch android
$ git checkout android
Switched to branch 'android'
$ git pull googleandroid master
From https://github.com/googlesamples/google-services
* branch

master

Already up-to-date.

-> FETCH_HEAD

Automatic merge failed; fix conflicts and then commit the result.
C th n s xy ra li conflict khi gp file README.md cng khng quan trng lm
nn bn c th b qua bng cch g lnh git add README.md track file ny, v
by gi nu bn g lnh ls ra th c cc file t googleandroid ri.
By gi bn c th commit n v th push n ln repository ca bn.
$ git commit -m "Commit from android"
[android d176e9f] Commit from android
$ git push googleandroid android
Yu cu nhp username v password ca repository
https://github.com/googlesamples/google-services ny, nhng y l repository
mnh ly tm demo nn khng c ti khong ???
Nhc li rng, thach ngha l tn remote ca repository m mnh cn push ln
v android l tn branch mnh cn push.
Bn cng c th qua mt branch khc v s dng lnh git merge gp d liu ca
branch ny v.
Ngoi ra, kin thc v branch cn c mt k thut na cng kh th v m khi lm
vic nhm c th s cn n, l rebase branch vi mc ch hon i v tr ca
nhng ln commit.

20.

Mt s dch v repository cho Git min ph

Nu khng ni n vic t lm mt repository server th c l phng n s dng


cc dch v to repository dnh cho Git l ti u nht v c giao din d s dng, d
thao tc m li c th h tr cc kiu private repository (kho cha ring t)
khng cng khai m ngun ca bn.
Di y l mt s dch v repository c la chn s dng min ph tt nht m bn
nn s dng qua, trong c Github vn quen thuc vi rt nhiu ngi.
a. Github

Dch v ny (c th c gi l mt mng x hi dnh cho lp trnh vin) c l hu


nh bn u bit qua v s ph bin ca n. Vi ti khon min ph, bn c th
to ra cc repository dng cng khai v s dng. Ngoi ra, bn c th xem cc
repository ca ngi khc trong phn Explore vi rt nhiu m ngun hay v c
o, y c xem l nt ring ca Github v nhiu ngi tham gia vo y khng
phi ch dng Git thi u.
b. Bitbucket

Nu bn cn server Git dnh cho mt nhm t hn 5 ngi lm vic vi nhau th bn


c th s dng min ph vnh vin Bitbucket. V ti khon min ph y bn s
c quyn to private repository khng gii hn nhng s gii hn 5 thnh vin
c quyn truy cp vo private repository.
Cc tnh nng Bitbucket hu nh y cho nhu cu s dng Git, v ngay c
Thachpham.com cng tng s dng Bitbucket trong vic nng cp website ca
mnh nn thy rt hi lng.

c. Assembla

Ch vi 3 la chn trn thi mnh ngh l qu cho bn ri m a phn hin


nay c s dng nhiu nht vn l Github hoc Bitbucket. Bn cng yn tm rng
tt c dch v Git Repository u c cch s dng ging nhau nn nu khc ch l
hn mc s dng cho tng loi ti khon.

Вам также может понравиться