You are on page 1of 51

Phát triển phần mềm ITSS

Bài 1-2: Kiểm soát phiên bản


Nội dung
1. Giới thiệu
2. Mô hình
3. Từ vựng
4. Công cụ

2
Tại sao kiểm soát phiên bản? (1/2)
 Cảnh 1:
 Chương trình của bạn đang hoạt động
 Bạn thay đổi "chỉ một điều"
 Chương trình của bạn bị gián đoạn
 Bạn đổi lại
 Chương trình của bạn vẫn bị hỏng - tại sao?

 Việc này có bao giờ xảy ra với bạn?

3
Tại sao kiểm soát phiên bản? (2/2)
 Chương trình của bạn ngày hôm qua đã hoạt
động tốt
 Bạn đã thực hiện rất nhiều cải tiến vào đêm
qua ...
 ... nhưng bạn vẫn chưa khiến chúng hoạt động
 Bạn cần phải nộp chương trình của mình
ngay bây giờ
 Việc này có bao giờ xảy ra với bạn?

4
Kiểm soát phiên bản cho các đội (1/2)
 Tình huống:
 Bạn thay đổi một phần của chương trình -
nó hoạt động
 Đồng nghiệp của bạn thay đổi một phần
khác - nó hoạt động
 Bạn kết hợp chúng lại với nhau - nó không
hoạt động
 Một số thay đổi ở một phần chắc hẳn đã
phá vỡ điều gì đó ở phần khác
 Tất cả những thay đổi là gì?

5
Kiểm soát phiên bản cho các đội (2/2)
 Tình huống:
 Bạn thực hiện một số cải tiến cho một lớp
 Đồng nghiệp của bạn thực hiện một số cải
tiến khác nhau cho cùng một lớp
 Làm cách nào bạn có thể hợp nhất những
thay đổi này?

6
Công cụ: diff
 Có một số công cụ giúp bạn phát hiện những
thay đổi (khác biệt) giữa hai tệp
 Các công cụ bao gồm diff, rcsdiff, jDiff, v.v.
 Tất nhiên, chúng sẽ không giúp ích gì trừ khi
bạn giữ một bản sao của phiên bản cũ hơn
 Các công cụ khác biệt hữu ích để tìm một số
lượng nhỏ sự khác biệt trong một vài tệp

7
Tools: jDiff
 jDiff là một plugin cho trình chỉnh sửa jEdit
 Ưu điểm:
 Mọi thứ đều được mã hóa màu
 Sử dụng cuộn được đồng bộ hóa
 Nó nằm trong một trình chỉnh sửa - bạn có thể
thực hiện các thay đổi trực tiếp
 Nhược điểm:
 Không độc lập, nhưng phải được sử dụng
trong jDiff
 Chỉ là một công cụ khác, không phải là một
giải pháp hoàn chỉnh

8
Tools: jDiff

9
Hệ thống kiểm soát phiên bản
 Hệ thống kiểm soát phiên bản (thường được
gọi là hệ thống kiểm soát mã nguồn) thực
hiện những việc sau:
 Giữ nhiều phiên bản (cũ hơn và mới hơn)
của mọi thứ (không chỉ mã nguồn)
 Yêu cầu nhận xét về mọi thay đổi Cho
phép "đăng ký" và "kiểm tra" tệp để bạn
biết người khác đang làm việc trên tệp nào
 Hiển thị sự khác biệt giữa các phiên bản

10
Nội dung
1. Giới thiệu
2. Mô hình
3. Từ vựng
4. Công cụ

11
2. Mô hình tạo phiên bản
 Khóa-Sửa đổi-Mở khóa
 Sao chép-Sửa đổi-Hợp nhất
 Kiểm soát phiên bản phân tán

12
e Lock-Modify-Unlock Modelđổi-mở
2.1. Mô hình khóa-sửa (1) khóa (1)
Andy and Bobby
check-out file A.
Repository
The check-out is done
without locking. They A
just get a local copy. Check-out

Check-out
A

Bobby
Andy

13
e Lock-Modify-Unlock Modelđổi-mở
2.1. Mô hình khóa-sửa (2) khóa (2)

Andy locks file A and Repository


begins modifying it.
A

Lock
A

Аndy

(Local Edit)
Bobby
Andy

14
Lock-Modify-Unlock Modelđổi-mở
2.1. Mô hình khóa-sửa (3) khóa (3)

Bobby tries to lock the


file too, but she can’t. Repository
Bobby waits for Andy to
A
finish and unlock the file. Wait

Andy

Bobby
Andy

15
2.1. Mô hình khóa-sửa
he Lock-Modify-Unlock đổi-mở
Model (4) khóa (4)

Andy commits his changes Repository


and unlocks the file. Andy

Commit
A

Andy

Bobby
Andy

16
e Lock-Modify-Unlock Modelđổi-mở
2.1. Mô hình khóa-sửa (5) khóa (5)

Now Bobby can take the


modified file and lock it. Repository
Bobby edits her local Andy
copy of the file. Lock

Andy

Andy
(Local Edit)

Bobby
Andy

17
ock-Modify-Unlock Model (6)
2.1 Mô hình khóa-sửa đổi-mở khóa (6)

Bobby finishes,
Repository
commits her changes
and unlocks the file. Andy
Bobby
Commit

Andy
Bobby

Andy

Bobby
Andy

18
ock-Modify-Unlock Model (7)
2.1 Mô hình khóa-sửa đổi-mở khóa (7)

Andy updates the


Repository
changes from the
repository. Andy
Bobby

Update Andy
Bobby

Andy
Bobby

Bobby
Andy

19
opy-Modify-Merge Model (1)
2.2. Mô hình Sao chép-Sửa đổi-Hợp nhất (1)
Andy and Bobby
check-out a file A.
Repository
The check-out is
done without A
locking. Check-out

Check-out
A

Bobby
Andy

20
opy-Modify-Merge Model (2)
2.2. Mô hình Sao chép-Sửa đổi-Hợp
nhất (2)
Both of them
edit the local
Repository
copies of the
file (in the A
same time).

Bobby

Andy
(Local Edit)

(Local Edit)
Bobby
Andy

21
opy-Modify-Merge Model (3)
2.2. Mô hình Sao chép-Sửa đổi-Hợp
nhất (3)
Bobby commits Repository
her changes to
the repository. Bobby Commit

Bobby

Andy

Bobby
Andy

22
opy-Modify-Merge
2.2. Mô hình Sao Model (4)đổi-Hợp
chép-Sửa
nhất (4)
Andy tries to
commit his Repository
changes.
Bobby
A conflict occurs.

Commit Bobby
Bobby

Andy
Andy

(Local
Conflict) Bobby
Andy

23
2.2. Mô hình Sao Model
Copy-Modify-Merge (5) đổi-Hợp
chép-Sửa
nhất (5)
Andy updates his
changes with the ones
from the repository. Repository
The changes merge
into his local copy. Bobby

A merge conflict can


occur. Bobby

Andy
&
Bobby

(Local
Merge) Bobby
Andy

24
2.2. Mô hình Sao chép-Sửa đổi-Hợp
e Copy-Modify-Merge
nhất (6) Model (6)
Andy commits the
merged changes to
the repository. Repository
A common version Andy
with the changes of &
Andy and Bobby is Bobby

inserted. Commit Bobby

Andy
&
Bobby

Bobby
Andy

25
2.2. Mô hình Sao chép-Sửa đổi-Hợp
nhất (6)
he Copy-Modify-Merge Model (7)
Bobby updates the
changes from the
repository. Repository
She gets the common Andy
version with both & Update
changes from Andy Bobby
Andy
and Bobby. &
Bobby

Andy
&
Bobby

Bobby
Andy

26
2.3. Kiểm soát phiên bản phân tán
 So với điều khiển phiên bản Trung tâm
Centralized Version
 Chỉ một kho lưu trữ
Control

Source: http://homes.cs.washington.edu/~mernst/advice/version-control.html

27
uted Version Control
Kiểm soát phiên bản phân tán

ashington.edu/~mernst/advice/version-control.html
28
ributed
KiểmVersion Control
soát phiên bản(1)
phân tán (1)
Andy and Bobby
clone the remote
repository locally. Remote
Repository
They both have the (Server)
A
same files in their
local repositories.
Clone Clone

A A

Local Local
Repository Repository
(Andy) (Bobby)
Andy
Bobby

29
ibuted Version Control (2)
Kiểm soát phiên bản phân tán (2)

Andy and Bobby Remote


work locally on a Repository
(Server)
certain file A. A

(Local Edit)
(Local Edit) Andy Bobby
A A

Local Local
Repository Repository
(Andy) (Bobby)
Andy
Bobby

30
buted Version Control (3)
Kiểm soát phiên bản phân tán (3)
Andy and Bobby
commit locally the Remote
modified file A Repository
(Server)
into their local A
repositories.

Commit (locally) Commit (locally)

Andy Andy Bobby Bobby

Local Local
Repository Repository
(Andy) (Bobby)
Andy
Bobby

31
ibuted Version Control (4)
Kiểm soát phiên bản phân tán (4)
Andy pushes the
file A to the remote Remote
repository. Repository
(Server)
Still no conflicts Andy
occur.
Push

Andy Andy Bobby Bobby

Local Local
Repository Repository
(Andy) (Bobby)
Andy
Bobby

32
ibuted Version Control (5)
Kiểm soát phiên bản phân tán (5)
Bobby tries to push
her changes. Remote
Repository
A versioning conflict (Server)
Andy
occurs.

Push (conflict)

Andy Andy Bobby Bobby

Local Local
Repository Repository
(Andy) (Bobby)
Andy
Bobby

33
ibuted Version
Kiểm Control
soát phiên bản(6)
phân tán (6)
Bobby merges the
her local files with
the files from the Remote
Repository
remote repository. (Server)
Andy
Conflicts are locally
resolved.
Pull (Fetch + Merge)

Andy Andy Bobby Bobby


+Andy +Andy

Local Local
Repository Repository
(Andy) (Bobby)
Andy
Bobby

34
ibuted Version Control (7)
Kiểm soát phiên bản phân tán (7)

Bobby commits her Remote


merged changes. Repository
(Server)
No version conflict. Bobby
Andy
+Andy

Push (no conflict)

Andy Andy Bobby Bobby


+Andy +Andy

Local Local
Repository Repository
(Andy) (Bobby)
Andy
Bobby

35
ibuted Version Control (8)
Kiểm soát phiên bản phân tán (8)
Andy pulls
(updates) the Remote
changed files Repository
(Server)
from the remote Bobby
Andy
+Andy
repository.
Pull

Bobby Bobby Bobby Bobby


+Andy +Andy +Andy +Andy

Local Local
Repository Repository
(Andy) (Bobby)
Andy
Bobby

36
Nội dung
1. Giới thiệu
2. Mô hình
3. Từ vựng
4. Công cụ

37
3. Từ vựng
 Kho lưu trữ (kho kiểm soát nguồn) -
Repository
 Máy chủ lưu trữ các tệp (tài liệu)
 Giữ nhật ký thay đổi Bản sửa đổi, phiên bản
 Bản sửa đổi, phiên bản: Revision, Version
 Phiên bản (trạng thái) riêng lẻ của tài liệu là kết quả
của nhiều thay đổi
 Trả phòng, sao chép (Check-Out, Clone )
 Truy xuất bản sao đang hoạt động của tệp từ kho lưu
trữ từ xa vào thư mục cục bộ
 Có thể khóa các tệp

38
3. Từ vựng
 Thay đổi
 Một sửa đổi đối với tệp cục bộ (tài liệu) nằm dưới sự
kiểm soát của phiên bản
 Thay đổi Đặt / Thay đổi
 Danh sách Một tập hợp các thay đổi đối với nhiều tệp
sẽ được cam kết cùng một lúc
 Cam kết, Đăng ký
 Gửi các thay đổi được thực hiện từ bản sao làm việc
cục bộ vào kho lưu trữ
 Tự động tạo phiên bản mới
 Xung đột có thể xảy ra!

39
Từ vựng
 Cuộc xung đột
 Sự thay đổi đồng thời đối với một tệp nhất định bởi
nhiều người dùng
 Có thể được giải quyết tự động và thủ công
 Cập nhật, tải phiên bản mới nhất, tìm nạp /
kéo
 Tải xuống phiên bản mới nhất của tệp từ kho lưu trữ
vào thư mục làm việc cục bộ + hợp nhất các tệp xung
đột
 Hoàn tác thanh toán, hoàn nguyên / hoàn tác
thay đổi
 Hủy các thay đổi cục bộ
 Khôi phục trạng thái của chúng từ kho lưu trữ

40
Từ vựng
 Hợp nhất
 Kết hợp các thay đổi đối với tệp được thay đổi cục bộ
và đồng thời trong kho lưu trữ
 Có thể được tự động hóa trong hầu hết các trường
hợp
 Nhãn / Thẻ
 Nhãn đánh dấu bằng tên một nhóm tệp trong một
phiên bản nhất định
 Ví dụ một bản phát hành
 Chi nhánh / Phân nhánh
 Phân chia kho lưu trữ trong một số quy trình công việc
riêng biệt

41
Version
ontrol: Control:
Typical Typical Scenario
Scenario
Users Repository
Main
development Version A Branch
User X line (trunk)

Version A.1 Branch


Check Out
Check In
C A

User Y
B Version B Branch
Check Out
D

Merge E
Check In

42
Nội dung
1. Giới thiệu
2. Mô hình
3. Từ vựng
4. Công cụ

43
Tools
 Kiểm soát phiên bản trung tâm
 SVN (Subversion)
 TFS Nguồn an toàn (thương mại)
 Kiểm soát phiên bản phân tán
 Git
 Không kiên định (Mercurial )

44
Git là gì?
 Git
 Hệ thống kiểm soát nguồn phân tán
 Làm việc với các kho lưu trữ cục bộ và từ xa
 Git bash - giao diện dòng lệnh cho
 Git Miễn phí, mã nguồn mở
 Có phiên bản Windows (msysGit)
http://msysgit.github.io
https://www.atlassian.com/git/tutorials/setting-
up-a-repository

45
 Cài đặt msysGit trên Windows
 Tải xuống Git cho Windows từ: http://msysgit.github.io
 “Tiếp theo, Tiếp theo, Tiếp theo” thực hiện thủ thuật
 Các tùy chọn để chọn (chúng phải được chọn
theo mặc định)
 “Chỉ sử dụng Git Bash”
 “Checkout kiểu Windows, cam kết kết thúc kiểu Unix”
 Cài đặt Git trên Linux:
 sudo apt-get install git

46
Basic Git Commands
 Nhân bản kho lưu trữ Git hiện có
 git clone [url từ xa] (git clone [remote url])
 Tìm nạp và hợp nhất các thay đổi mới nhất
từ ​kho lưu trữ từ xa
 git pull
 Chuẩn bị (thêm / chọn) tệp cho một cam kết
 git add [tên tệp] ("git add." thêm mọi thứ) (git add
[filename] ("git add ."adds everything))
 Cam kết với kho lưu trữ cục bộ
 git commit –m "[tin nhắn của bạn ở đây]"
(
((

 (git commit –m "[your message here]“)

47
Basic Git Commands
 Kiểm tra trạng thái của kho lưu trữ cục bộ
của bạn (xem các thay đổi cục bộ)
 trạng thái git (git status )
 Tạo một kho lưu trữ cục bộ mới (trong thư
mục hiện tại)
 git init (git init)
 Tạo điều khiển từ xa (gán tên ngắn cho URL
 Git từ xa) git từ xa thêm [tên từ xa] [url từ xa]
(git remote add [remote name] [remote url])
 Đẩy đến một điều khiển từ xa (gửi các thay
đổi đến kho lưu trữ từ xa)
 git push [tên từ xa] [tên địa phương]
 ( git push [remote name] [local name])

48
Using Git: Example
mkdir work
cd work
git clone https://github.com/SoftUni/test.git dir
cd test
dir
git status
(edit some file)
git status
git add .
git commit -m "changes"
git push

49
Project Hosting Sites
 GitHub – https://github.com
 The #1 project hosting site in the world
 Free for open-source projects
 Paid plans for private projects
 GitHub provides own Windows client
 GitHub for Windows
 http://windows.github.com
 Dramatically simplifies Git
 For beginners only

50
Project Hosting Sites
 Google Code –
http://code.google.com/projecthosting/
 Source control (SVN), file release, wiki, tracker
 Very simple, basic functions only, not feature-rich
 Free, all projects are public and open source
 1-minute signup, without heavy approval process
 SourceForge – http://www.sourceforge.net
 Source control (SVN, Git, ...), web hosting, tracker, wiki, blog,
mailing lists, file release, statistics, etc.
 Free, all projects are public and open source

51

You might also like