You are on page 1of 12

CTT623 CHUYN H IU HNH LINUX

H thng qun l phin bn v


m ngun Git
Nhm White
1212278 Trn Trng Nhn
1212290 Nguyn Ngc Phong
1212294 Trn Cng Phc
1212447 Trn nh Trng

21/10/2014

H thng qun l phin bn v m ngun Git

MC LC
1. Tng quan v h thng qun l phin bn (version control system) .................................................. 3
2. Khi lc v Git ...................................................................................................................................................... 5
3. Cch thit lp h thng Git.................................................................................................................................. 7
3.1 i vi my con (client) ................................................................................................................................ 7
3.2 Thit lp server cha Git ............................................................................................................................... 7
4. S dng Git .............................................................................................................................................................. 9
4.1 To mt kho cha ............................................................................................................................................. 9
4.2 Thm tp tin vo kho ................................................................................................................................... 10
4.3 To bn sao lu .............................................................................................................................................. 10
4.4 Xem thng tin lu tr ca Git v d n................................................................................................ 10
4.5 Xem cc bn sao ............................................................................................................................................. 10
4.6 Khi phc file hoc ton d n ................................................................................................................ 11
THAM KHO............................................................................................................................................................... 12

20/10/2014

Trang 2

H thng qun l phin bn v m ngun Git


1. Tng quan v h thng qun l phin bn (version control system)
H thng qun l phin bn (VCS) l h thng cho php to ra cc phin bn ghi nhn cc
thay i i vi cc tp tin theo thi gian, ta c th phc hi cc phin bn khi cn. VCS cn
cho php khi phc li khi phc li phin bn c ca ton b d n, xem li cc thay i
c thc hin theo thi gian, xem ai l ngi thc hin thay i cui cng,
S dng VCS khi ta lm ri tung mi th ln hay v tnh xo mt cc file i th vn c th
khi phc li chng mt cch d dng nhanh chng v khng h tn qu nhiu cng sc.
H thng qun l phin bn c 3 loi chnh:
H thng qun l phin bn cc b (Local Version Control System)
H thng qun l phin bn tp trung (Centralized Version Control System)
H thng qun l phin bn phn tn (Distributed Version Control System)
Thng dng nht, nhiu ngi thng chn cch sao lu cc phin bn ra cc th mc t
tn theo thi gian. Tuy vy, iu ny cng l mt phin toi ln, v c khi ngi ta qun khng
bit th mc no b ghi-xa nhm.
Nu ch c mt ngi lp trnh trn 1 my th h qun l phin bn cc b l .

Hnh 1-1 S h qun l phin bn cc b (VCS)

H qun l phin bn cc b to ra mt c s d liu cha tt c cc thay i i vi tp tin,


gip phc hi li mt phin bn bt k nhanh chng, tin li (Hnh 1-1).
Nhng khi hp tc lm vic vi nhiu lp trnh vin nhiu my khc nhau th sao? y l
lc cho h qun l phin bn tp trung (CVCS) pht huy sc mnh.

20/10/2014

Trang 3

H thng qun l phin bn v m ngun Git

Hnh 1-2 S h thng qun l phin bn tp trung (CVCS)

Ngi ta thit lp mt h thng server duy nht lu gi cc thay i, v nhiu ngi


dng kt ni vo ly cc phin bn v s dng (Hnh 1-2). Lm th ny, tin li l tt c lp
trnh vin s bit ai khc ang lm g, v qun tr vin s cp php cho ai c lm vic g .
Tuy vy, nu server ngng hot ng th chng c ai c th lm vic c vi cc phin bn
na.
Nguy c i vi CVCS rt cao trong trng hp server b h hng cng, khi tt c s
mt hon ton. Lu tt c vo mt, ta c nguy c mt tt c. V vy h qun l phin bn phn
tn (DVCS) ra i.
cch ny, cc my con khng ch ly d liu t server m chnh my con cng ng vai tr
server. Mi my con c mt bn sao y ca c s d liu qun l thay i ny.

20/10/2014

Trang 4

H thng qun l phin bn v m ngun Git

Hnh 1-3 S h qun l phin bn phn tn (DVCS)

Nu my server h hng, my con s phc hi d liu cho my server, v mi my con ly


d liu t server l mt bn sao lu ton vn (Hnh 1-3).

2. Khi lc v Git
Git l mt h qun l phin bn phn tn do tc gi Linux - Linus Torvalds to ra dnh cho
d n pht trin nhn Linux vo nm 2005, thay th cho h thng BitKeeper trc .
Mt s u im ca Git:
Nhanh
Thit k n gin
H tr tt cho pht trin phi tuyn (ngn nhnh song song)
Phn tn ton din

20/10/2014

Trang 5

H thng qun l phin bn v m ngun Git


Kh nng x l d n ln (nh pht trin nhn Linux) hiu qu v tt v khi
lng d liu
K t khi ra i nm 2005, Git tin ho v pht trin ton din d dng s dng hn,
tuy th cc tiu ch ban u vn c m bo. N nhanh mt cch ng kinh ngc, v cng
hiu qu vi cc d n ln, v mt h thng phn nhnh khng th tin c cho pht trin phi
tuyn.
Git c cch nhn khc v d liu. Trong khi phn ln VCS (Subversion, Perforce, Bazaar,...)
lu di dng danh sch tp tin c thay i (Hnh 2-1) th Git lu di dng mt tp nh
(snapshot) ca c h thng tp tin (Hnh 2-2)

Hnh 2-1 Cc h thng khc hng ti lu tr tp tin di dng cc thay i so vi bn c s ca mi tp tin.

Hnh 2-2 Git lu tr d liu di dng nh chp ca d n theo thi gian.

y l s khc bit ln nht gia Git v hu ht cc VCS khc. Git ging nh mt h thng
qun l tp tin thu nh vi cc tnh nng, cng c v cng mnh m c xy dng da trn
n, khng ch l mt h thng qun l phin bn n gin.

20/10/2014

Trang 6

H thng qun l phin bn v m ngun Git


Phn ln cc thao tc trn h thng Git ch cn yu cu cc tp tin hay ti nguyn cc b,
thng thng Git s khng cn bt c thng tin t my tnh no khc. Bi v ton b d n
hon ton nm trn cng ca bn, cc thao tc c thc hin gn nh ngay lp tc.
Vic ny cn ng ngha vi vic c th lm vic ngay c khi khng c kt ni Internet. Ta
vn c th commit (to bn sao lu) bnh thng cho ti khi c kt ni Internet ng b
ho vi my server. Trong rt nhiu h thng khc, vic ny gn nh l khng th hoc rt kh
khn.

3. Cch thit lp h thng Git


3.1 i vi my con (client)
ci t Git, ta s dng cng c qun l gi phn mm trong Linux (yum i vi Fedora
Core, apt-get i vi Debian):
# yum install git

Sau khi ci t xong, ta phi cu hnh ban u. Vic ny ch phi lm mt ln m thi. Cc tp


tin cu hnh nm ba v tr khc nhau l /etc/gitconfig (cu hnh ton h thng),
~/.gitconfig (cu hnh cho user hin ti) v trong th mc git ca kho cha hin hnh.
V vy, Git c km cng c cu hnh gi l git config gip ta xem v cu hnh cc bin
iu khin:
a) Trc tin, ch nh tn ti khon v a ch email:
$ git config --global user.name "your name"
$ git config --global user.email your_name@example.com

b) Mc nh, Git dng trnh son tho mc nh (vi), nhng bn c th thay i (vd:
emacs):

$ git config --global core.editor emacs

c) Trnh so snh file, Git chp nhn kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff,
ecmerge, v opendiff. y, v d l vimdiff:

$ git config --global merge.tool vimdiff

d) kim cu hnh, ta dng:

$ git config --list

e) xem mt kha no , dng:

$ git config <tn kha>

3.2 Thit lp server cha Git


u tin, ta cng phi ci t Git, cc bc hon ton y nh trn my con (Xem 3.1).

20/10/2014

Trang 7

H thng qun l phin bn v m ngun Git


Git s dng 4 giao thc truyn cc bn sao gia cc my client gm cc b (file:///),
HTTP/HTTPS, Git, SSH (ph thng nht).
Giao thc cc b khi kho lu tr nm trn mt th mc khc trn a. SSH l giao thc d
ci t, bo mt cao v truy cp SSH phi c ti khon c cp quyn y . Git l giao
thc c bit i km, c tc nhanh hn HTTP/HTTPS.
HTTP/HTTPS v Git dng cho vic truy xut kho lu tr nc danh, dng khi ta cha mt d
n m ngun m, hoc n gin ch l mun truy xut nc danh.

V vy, lp server thng thng ta ch cn SSH l :


a) u tin l m bo tt c lp trnh vin c th truy xut vo my ch bng SSH.
Ci t ssh
Trn server, to user mi (vd: git):
$ sudo adduser git

Yu cu lp trnh vin khc cung cp file cha kha SSH cng cng. Kha SSH cng
thng cha trong ~/.ssh/id_rsa.pub hoc nu cha c th to bng tin ch
ssh-keygen

V d mt lnh to kha SSH cng ca lp trnh vin


$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key ~/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ~/.ssh/id_rsa.
Your public key has been saved in ~/.ssh/id_rsa.pub.
The key fingerprint is:
43:c5:5b:5f:b1:f1:50:43:ad:20:a6:92:6a:1f:9a:3a user@mylaptop.local
Lnh ny s to ra kha ti ~/.ssh/ vi mc nh tn l id_rsa, nhng ta c th

thay i nu mun.
Trn

my

server

thc

hin

thm

cc

kha

cng

vo

tp

tin

~/.ssh/authorized_keys
$ mkdir ~/.ssh
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod R go=~/.ssh
b) To mt kho cha rng (project.git) ti ni lu tr ( y l /opt/git):
$ mkdir /opt/git/project.git
$ cd /opt/git/project.git
$ git --bare init

20/10/2014

Trang 8

H thng qun l phin bn v m ngun Git


c) Nh vy l xong, lp trnh vin c th a m ngun ln my server bng giao thc SSH
vi ti khon git trn.
d) an ton hn, ta thay shell mc nh ca ti khon git bng git-shell c sn trong gi
Git, nhm m bo ti khon git ch c th thc thi cc cng vic Git
# vi /etc/passwd
Thay /bin/sh thnh /usr/bin/git-shell (dng which git-shell bit chnh xc)
ca ngi dng git.

Tuy nhin, nu nh mun thit lp mt cch ch c truy xut nc danh n kho lu tr ta s


cn giao thc HTTP/HTTPS hoc giao thc Git. Giao thc Git c u th hn HTTP/HTTPS tc
. y l cch cu hnh giao thc HTTP/HTTPS cho Git

* Cu hnh HTTP/HTTPS:
a) u tin, ta cn kch hot post-update, mc ch khi c ai dng SSH y d liu
ln th Git s cp nht cc file c th ly v qua HTTP/HTTPS
$ cd /opt/git/project.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update
b) Cu hnh VirtualHost cho Apache service vi th mc cha project kia (/opt/git), thm
on vo file cu hnh httpd.conf
<VirtualHost *:80>
ServerName git.gitserver # my ch
DocumentRoot /opt/git
# th mc gc
<Directory /opt/git/>
Order allow, deny
Allow from all
</Directory>
</VirtualHost>
c) Chuyn quyn s hu th mc cha project (/opt/git) cho nhm www-data
$ chgrp -R www-data /opt/git

d) Khi ng li Apache.

4. S dng Git
Mt s hng dn c bn nht cho ngi dng Git.
4.1 To mt kho cha
To mi t th mc d n trn my, g lnh:
$ git init

20/10/2014

Trang 9

H thng qun l phin bn v m ngun Git


ly mt d n v, g mt trong 2 lnh:
$ git clone <a ch d n>

(git s to mi 1 th mc trong th mc hin hnh, v em d n trn mng v )


$ git clone <a ch d n> <th mc cha>

(d n s em v t vo th mc cha)
a ch d n c cc dng sau:
i.
ii.
iii.
iv.

file:///path/to/repo
http(s)://gitserver.com/path/to/repo
git://path/to/repo
user@server:path/to/repo

4.2 Thm tp tin vo kho


Dng cc lnh:
$ git add <file>
$ git add <th mc>

4.3 To bn sao lu
Sau khi thm cc tp tin, th mc vo kho, ta c th tin hnh to snapshot:
$ git commit

Khi dng lnh ny, Git s m trnh son tho cu hnh bc trn ra, ta g ghi ch cho
snapshot ny ri lu li. Lc ny snapshot s c to ra.
Hoc ta dng lnh
$ git commit m ghi ch

4.4 Xem thng tin lu tr ca Git v d n


$ git status

Lnh ny cho bit nhng file no ang c Git theo di, file no b b qua,
$ git log

Lnh ny cho ta danh sch cc bn sao lu ca d n ta.


4.5 Xem cc bn sao
Khi mun xem cc bn sao lu ca d n, trc ht ta phi bit c m s ca bn sao lu
, bng cch dng lnh
$ git log oneline

Mn hnh xut ra dng nh th ny

20/10/2014

Trang 10

H thng qun l phin bn v m ngun Git


<m s bn sao lu (7 k t)> <ghi ch khi commit bn sao y>

xem bn sao no, ta g:

$ git checkout <m s bn sao lu>

Khi , th mc d n s tr v ngay lc to bn sao lu , bn c th xem, sa, bin dch,


nhng mi th s khng c ghi nhn. Khi lm vic xong, bn phi tr v thi im hin ti
bng lnh
$ git checkout master

4.6 Khi phc file hoc ton d n


Trc tin, ta cng dng lnh xem danh sch cc bn sao lu.
khi phc 1 file no :
$ git checkout <m s bn sao lu> <tn file>

khi phc 1 bn sao, c hai cch:

$ git revert <m s bn sao lu>

20/10/2014

Trang 11

H thng qun l phin bn v m ngun Git


THAM KHO
Scott Chacon, Pro Git, http://git-scm.com/book

20/10/2014

Trang 12

You might also like