You are on page 1of 25

I.

Tổng quan về SVN


Hệ thống Quản lý Phiên bản Subversion, thường được gọi tắt là SVN, là
một hệ thống quản lý phiên bản (version control system - VCS) được
giới thiệu vào năm 2000 bởi công ty CollabNet .
SVN mã nguồn mở được phát triển để giúp các nhóm phát triển phần
mềm theo dõi và quản lý sự thay đổi trong mã nguồn của họ. SVN cho
phép các nhà phát triển làm việc đồng thời trên cùng một dự án mà
không gặp xung đột về mã nguồn, đồng thời cung cấp các công cụ để
quản lý lịch sử phiên bản, theo dõi thay đổi và khôi phục lại phiên bản
cũ.

Tính năng chính của SVN:


1. Quản lý phiên bản: SVN giúp lưu trữ tất cả các phiên bản của dự
án và cho phép nhà phát triển theo dõi sự thay đổi từ phiên bản này
sang phiên bản khác.
2. Phân nhánh và gộp nhánh: SVN cho phép tạo các nhánh riêng
biệt của dự án để làm việc song song trên các tính năng khác nhau,
sau đó có thể gộp kết quả lại với nhánh chính một cách dễ dàng.
3. Ghi chú và tham chiếu thay đổi: Mỗi lần thay đổi trong mã
nguồn đều được ghi chú và đính kèm thông tin về người thực hiện
thay đổi, thời gian và mô tả chi tiết.
4. Khôi phục phiên bản cũ: SVN cho phép khôi phục lại phiên bản
cũ của dự án trong trường hợp cần phục hồi lại trạng thái trước đó.
5. Quản lý xung đột: Khi nhiều nhà phát triển làm việc cùng một
lúc, SVN cung cấp cách giải quyết xung đột trong mã nguồn để
đảm bảo tính ổn định của dự án.
6. Điều tra lịch sử: SVN cho phép xem lịch sử phiên bản, thay đổi
và tác giả để theo dõi sự phát triển của dự án.
Lợi ích của SVN:
 Quản lý hiệu quả: SVN giúp quản lý phiên bản và sự thay đổi
trong dự án một cách hiệu quả, đảm bảo tính nhất quán và tránh
xung đột.
 Lịch sử rõ ràng: Hệ thống ghi chép lịch sử rõ ràng về tất cả các
thay đổi, giúp tìm hiểu sự phát triển của dự án và xác định nguyên
nhân khi có lỗi.
 Làm việc nhóm: SVN cho phép nhiều người làm việc cùng một
lúc trên dự án mà không gặp xung đột hoặc mất thông tin.
 Khôi phục dễ dàng: Khả năng khôi phục phiên bản trước đó giúp
giải quyết các vấn đề nhanh chóng và hiệu quả.

Dưới đây là so sánh giữa SVN và công cụ quản lý phiên bản Git
1. SVN (Subversion):
 Kiểu quản lý phiên bản: SVN sử dụng kiểu quản lý phiên bản tập
trung (centralized version control). Mọi phiên bản được lưu trữ tại
máy chủ trung tâm và các nhà phát triển cần phải kết nối đến máy
chủ để thực hiện các thao tác quản lý phiên bản.
 Phân nhánh và gộp nhánh: SVN hỗ trợ phân nhánh và gộp nhánh,
nhưng quá trình này thường tương đối tốn kém và phức tạp hơn so
với Git và Mercurial.
 Xử lý xung đột: SVN cũng hỗ trợ xử lý xung đột nhưng trong mô
hình tập trung, việc giải quyết xung đột có thể phức tạp hơn so với
mô hình phân tán của Git.
 Sử dụng: SVN thường được sử dụng trong các dự án phát triển
phần mềm truyền thống, nơi các nhóm làm việc tập trung tại một
địa điểm.
2. Git:
 Kiểu quản lý phiên bản: Git sử dụng kiểu quản lý phiên bản phân
tán (distributed version control). Mỗi bản sao của mã nguồn đều
chứa toàn bộ lịch sử phiên bản và có thể làm việc độc lập mà
không cần kết nối tới máy chủ trung tâm.
 Phân nhánh và gộp nhánh: Git là một trong những công cụ mạnh
mẽ nhất cho việc phân nhánh và gộp nhánh. Quá trình này nhanh
chóng và linh hoạt, giúp tạo ra nhiều nhánh cho các tính năng, sửa
lỗi và thử nghiệm mà không gây xung đột lớn.
 Xử lý xung đột: Git cung cấp cách tiếp cận tốt hơn trong việc xử lý
xung đột, đặc biệt trong mô hình phân tán, giúp người dùng giải
quyết xung đột dễ dàng hơn.
 Sử dụng: Git thường được sử dụng rộng rãi trong nhiều loại dự án
phát triển, từ dự án cá nhân đến dự án lớn với nhiều nhóm làm việc
khác nhau.

II. Cách mà svn lưu trữ version


Subversion (SVN) lưu trữ các phiên bản và thông tin liên quan trong
một cơ sở dữ liệu được gọi là kho chứa (repository). Kho chứa SVN lưu
trữ toàn bộ lịch sử thay đổi của mã nguồn, bao gồm cả phiên bản chính
("trunk") và các nhánh ("branches").
Dưới đây là cách mà SVN lưu trữ các phiên bản, thư mục gốc ("trunk")
và các nhánh:
1. Phiên bản (Revision):
Trong SVN, mỗi lần bạn thực hiện commit (gửi thay đổi) lên kho chứa,
hệ thống sẽ tạo ra một phiên bản mới, được gọi là revision. Mỗi revision
bao gồm một tập hợp các thay đổi (changeset) được áp dụng lên mã
nguồn. Mỗi revision có một số duy nhất, và chúng ghi lại trạng thái của
toàn bộ mã nguồn tại thời điểm đó.
2. Thư mục Gốc ("Trunk"):
Thư mục gốc, thường được gọi là "trunk", chứa phiên bản chính và phản
ánh trạng thái của mã nguồn ở thời điểm hiện tại. Tất cả các nhánh khác
đều xuất phát từ thư mục "trunk".
3. Nhánh ("Branches"):
Thư mục "branches" chứa các thư mục riêng biệt tương ứng với các
nhánh khác nhau. Mỗi thư mục nhánh lưu trữ toàn bộ lịch sử thay đổi
của một nhánh cụ thể. Bạn có thể tạo ra và phát triển các tính năng, sửa
lỗi, hoặc công việc khác trên các nhánh này mà không làm ảnh hưởng
đến phiên bản chính.
Khi thực hiện merge (kết hợp) các thay đổi từ nhánh vào trunk hoặc từ
nhánh này sang nhánh khác, SVN sẽ xem xét lịch sử thay đổi và thực
hiện việc hợp nhất dựa trên thông tin về revision.
Ngoài ra còn có: Thư mục "tags" có chức năng đặc biệt trong việc
quản lý và lưu trữ các phiên bản đã đánh dấu (tagged versions) của phần
mềm.
III. Quy trình làm việc với SVN
* Quy trình làm việc cơ bản với SVN bao gồm các bước sau:
1. Sao chép dự án (Checkout):
 Bắt đầu bằng việc sao chép (checkout) dự án từ máy chủ
SVN về máy tính cá nhân của bạn.
 Sử dụng lệnh svn checkout hoặc giao diện đồ họa để tạo bản
sao làm việc của mã nguồn.
2. Thực hiện thay đổi (Edit):
 Thực hiện các thay đổi trên mã nguồn trong bản sao làm việc
trên máy tính của bạn.
 Các thay đổi bao gồm việc thêm, sửa hoặc xóa tệp tin và thư
mục.
3. Cập nhật dự án (Update):
 Trước khi commit thay đổi, cần cập nhật mã nguồn từ máy
chủ SVN để đảm bảo bạn có phiên bản mới nhất của dự án.
 Sử dụng lệnh svn update hoặc giao diện đồ họa để cập nhật
mã nguồn.
4. Kiểm tra thay đổi (Check Status):
 Sử dụng lệnh svn status để kiểm tra trạng thái của các tệp tin
và thư mục đã bị thay đổi trong bản sao làm việc của bạn.
5. Commit thay đổi (Commit):
 Khi bạn hoàn thành thay đổi và đã kiểm tra lại trạng thái của
dự án, bạn có thể commit các thay đổi lên máy chủ SVN.
 Sử dụng lệnh svn commit hoặc giao diện đồ họa để commit
thay đổi. Cung cấp một thông điệp commit mô tả những gì đã
thay đổi.
6. Xử lý xung đột (Resolve Conflicts):
 Trong trường hợp có xung đột giữa các thay đổi từ bạn và
thay đổi từ người khác, bạn cần xử lý xung đột trước khi
commit tiếp.
 Sử dụng lệnh svn resolve hoặc giao diện đồ họa để giải quyết
xung đột.
7. Khôi phục phiên bản cũ (Revert):
 Nếu cần, bạn có thể khôi phục lại phiên bản cũ của tệp tin
hoặc thư mục bằng cách sử dụng lệnh svn revert.
8. Gửi thay đổi (Push):
 Khi đã hoàn thành và commit thay đổi, bạn có thể gửi các
phiên bản mới lên máy chủ SVN để chia sẻ với các thành
viên khác trong nhóm.
9. Quản lý lịch sử (View History):
 Bạn có thể sử dụng lệnh svn log hoặc giao diện đồ họa để
xem lịch sử các phiên bản, thay đổi và thông điệp commit.
Lưu ý rằng quy trình làm việc với SVN có thể thay đổi tùy theo cách bạn
tổ chức dự án và cách bạn cấu hình SVN. Hãy tham khảo tài liệu của
SVN hoặc hướng dẫn cụ thể từ nhóm phát triển của bạn để biết thêm chi
tiết.

* Quy trình làm việc với Phân nhánh và Gộp nhánh trong SVN:
1. Tạo và Cập nhật Nhánh Chính:
 Tạo một nhánh chính trên máy chủ SVN (thường là nhánh
trunk hoặc master).
 Thường xuyên cập nhật nhánh chính từ mã nguồn của nhóm
bằng cách sử dụng lệnh svn update.
2. Tạo Nhánh Tính năng:
 Khi muốn phát triển một tính năng mới hoặc sửa lỗi, tạo một
nhánh con từ nhánh chính bằng lệnh svn copy.
 Tên nhánh thường phản ánh tính năng hoặc sửa lỗi được thực
hiện.
3. Làm Việc trên Nhánh Tính năng:
 Thực hiện thay đổi trên nhánh tính năng, thêm, sửa hoặc xóa
tệp tin.
 Commit thay đổi lên nhánh tính năng bằng lệnh svn commit.
4. Cập nhật và Gộp Nhánh Tính năng:
 Thường xuyên cập nhật nhánh tính năng từ nhánh chính bằng
lệnh svn update để đảm bảo bạn có phiên bản mới nhất của
mã nguồn chính.
 Khi tính năng hoặc sửa lỗi được hoàn thành, gộp (merge)
nhánh tính năng vào nhánh chính bằng lệnh svn merge.
5. Giải Quyết Xung Đột (Nếu Có):
 Nếu xảy ra xung đột khi gộp nhánh, sử dụng lệnh svn resolve
để giải quyết xung đột.
 Kiểm tra kỹ lưỡng và thử nghiệm sau khi giải quyết để đảm
bảo tính ổn định của mã nguồn.
6. Commit và Cập Nhật Nhánh Chính:
 Sau khi gộp thành công, commit thay đổi lên nhánh chính
bằng lệnh svn commit.
 Cập nhật nhánh chính bằng lệnh svn update để đồng bộ với
thay đổi mới nhất.
7. Lặp Lại Quy Trình:
 Lặp lại quy trình cho các tính năng hoặc sửa lỗi khác bằng
cách tạo và làm việc trên các nhánh tính năng khác nhau.
8. Cuối Cùng:
 Khi đủ ổn định và có các tính năng hoàn thiện, bạn có thể
thực hiện release hoặc deployment từ nhánh chính.
IV. Cài đặt SVN Server
Trong phần hướng dẫn này chúng ta sử dụng Vmware Workstation 17
Player để chạy máy ảo linux Ubuntu 20.04, và cài đặt và cấu hình SVN
Server trên máy ảo đó

1. Cài đặt Vmware 17 player


B1: Truy cập URL và chọn và tải phiên bản phù hợp với máy mình:
https://customerconnect.vmware.com/en/downloads/details?
downloadGroup=WKST-PLAYER-
1702&productId=1377&rPId=104734
B2: Chạy file cài đặt Vmware vừa tải về
B3: Cài đặt chương trình theo hướng dẫn

2. Tạo và cấu hình máy ảo Ubuntu 20.04 bằng Vmware


B1: Truy cập URL và tải file ubuntu-20.04.6-desktop-amd64.iso
B2: Mở Vmware và chọn Create a New Virtual Machine
B3: Tích chọn Installer disc image file và chọn Browe để lựa chọn file
ubuntu-20.04.6-desktop-amd64.iso vừa tải ở B1, sau đó chọn Next
B4: Nhập user, password cho máy ảo Ubuntu rồi chọn Next
B5: Tiếp tục làm các bước tiếp theo rồi ấn finish, sau đó khởi động máy
ảo Ubunu 20.04
B6: Quá trình cài đặt Ubuntu bắt đầu

Màn hình desktop của Ubuntu 20.04 hiện lên, Quá trình tạo máy ảo hoàn
thành
3. Cài đặt SVN Server trong Ubuntu
B1: Trong máy ảo Ubuntu, ấn tổ hợp phím Window + S rồi nhập và
chọn terminal. Cửa sổ terminal hiện lên.

B2: Trong terminal chạy lần lượt các lệnh:


# Cập nhật apt-get
sudo apt-get update

# Cài đặt apache2


sudo apt-get install apache2

# Cài đặt subversion và thư viện mở rộng


sudo apt-get install subversion libapache2-mod-svn

# Kích hoạt các module cần thiết


sudo a2enmod dav dav_svn

# Tạo kho lưu trữ đầu tiên với tên myrepo


sudo mkdir -p /var/lib/svn/
sudo svnadmin create /var/lib/svn/myrepo
# Thay đổi quyền truy cập cho repo
sudo chown -R www-data:www-data /var/lib/svn
sudo chmod -R 775 /var/lib/svn

# Tạo các file chứa thông tin user cho SVN


sudo touch /etc/apache2/dav_svn.passwd

# Thêm user mới – khi chạy lệnh này sẽ yêu cầu tạo mật khẩu cho user
sudo htpasswd -m /etc/apache2/dav_svn.passwd user1
sudo htpasswd -m /etc/apache2/dav_svn.passwd user2

# Cấu hình apache với subversion


# Chạy lệnh sau sẽ mở trình chỉnh sửa nano, chỉnh của file dav_svn.conf
sudo nano /etc/apache2/mods-enabled/dav_svn.conf

# Sau đó paste đoạn sau vào file đó:


<Location /svn>

DAV svn
SVNParentPath /var/lib/svn

AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user

</Location>
# Sau khi paste thành công ấn ctrl + X, rồi ấn Y, rồi enter là chỉnh sửa
thành công (nên dùng lệnh mở file ở trên kiểm tra lại)
# Khởi động lại apache
sudo service apache2 restart
B3: Kiểm tra xem SVN server đã hoạt động chưa
- Tìm địa chỉ IP của máy ảo Ubuntu, bằng cách sau:
# Chạy lệnh sau
ip addr show

Tìm dòng có inet và có địa chỉ IP ví dụ như trong hình trên: inet
192.168.249.130/24
 Ip là 192.168.249.130
- Tiếp theo ta dùng trình duyệt web bất kì trên máy thật Window hoặc
máy ảo Ubuntu, đi đến URL: http://192.168.249.130/svn/myrepo/
Trong đó: http:// + IP Ubuntu + /svn/ + Tên repository của bạn
- Nếu server đã cấu hình và chạy thành công, sẽ hiện lên kết quả như
sau:
- Sau đó đăng nhập bằng user SVN đã tạo ở bước 2

- Cài đặt, cấu hình và khởi chạy server thành công!


V. Cài đặt Tortoise SVN trên window và kết nối, làm việc
với repo Trong SVN server
1. Cài đặt Tortoise SVN cho window
B1: Tìm kiếm Tortoise SVN trên trình duyệt web và tải về
B2: Chạy file cài đặt là làm theo các yêu cầu
B3: Khi cài đặt thành công, mở File Explore hoặc ở trên màn hình
Desktop ta click chuột phải
Ta thấy một số chức năng của Tortoise SVN hiện ra
2. Kết nối, làm việc với repo
B1: Tải dữ liệu từ repository về máy. Ta sử dụng SVN Checkout
Click chuột phải và chọn SVN Checkout

B2: Nhập URL của repo vào URL of repository, chọn nơi chứa repo
trên window của bạn ở Checkout directory. Rồi chọn OK
B3: Cửa sổ xác thực người dùng hiện lên, nhập username, password để
có quyền truy cập vào repository, OK
Cửa sổ thông tin checkout hiện lên, đã checkout thành công
B4: Mở folder myrepo, click chuột phải. Các tùy chọn trong tortoise
hiện lên. Ta có thể thấy được các chức năng cơ bản như: checkout, add,
commit, branch, switch, merge, revert, update, show log, repo-browser.

B5: Kết nối đến repo myrepo thành công, bắt đầu quy trình như thường
lệ

You might also like