forked from git/git-reference
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.html
118 lines (102 loc) · 5.03 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
---
layout: reference
---
<div class="box">
<h2>Giới thiệu</h2>
<div class="block">
<p>
Trang web này để tham khảo về Git: một trang để tham khảo nhanh
khi bạn học hoặc sử dụng Git, chỉ chứa những lệnh quan trọng và hay
dùng nhất của Git. Các lệnh được nhóm lại thành từng mục,
sẽ được đến với những tùy chọn phổ biến nhất.
</p>
<p>
Mỗi mục liên kết tới mục khác; mỗi trang cũng có tham khảo tới tài
liệu chuyên sâu hơn (ví dụ liên kết tới trang tài liệu chính thức
hoặc các phần trong tài liệu <a href="http://progit.org">Pro Git book</a>),
để giúp các bạn muốn nắm chắc hơn về Git.
</p>
<p>
Trước tiên ta sẽ tìm hiểu về nguyên lý cơ bản của Git.
</p>
</div>
</div>
<div class="box">
<h2>Ý tưởng của Git</h2>
<div class="block">
<p>
Điều đầu tiên hết sức quan trọng mà bạn phải biết, là Git rất khác
biệt so với Subversion, Perforce hoặc bất kỳ cách quản lý mã nguồn
nào bạn từng biết. Vì thế, để học Git được mau chóng, tốt nhất là
bạn hãy quên mọi thứ bạn biết về Subversion, CVS, ... để bắt đầu
suy nghĩ theo cách hoàn toàn khác với Git.
</p>
<p>
Hãy bắt dầu từ số không. Giả sử bạn đang thiết kế một hệ thống để
quản lý mã nguồn mới. Câu hỏi đặt ra là: phương án đơn giản nhất trước
khi phải cần các công cụ mạnh như Subversion, Perforce,.. là gì?
Câu trả lời có thể là bạn chỉ việc chép thư mục qua một nơi mới,
nhưng cách hay làm để sao lưu dữ liệu.
</p>
<pre> $ cp -R project project.bak </pre>
<p>
Theo cách này, bạn dễ dàng phục hồi lại các tập tin bị thay đổi không
như ý, hoặc bạn có thể so sánh hai thư mục để có được tìm xem có
có sự thay đổi nào đã thực hiện.
</p>
<p>
Nếu việc sao chép như trên diễn ra thường xuyên hơn, bạn có thể dùng
thêm các tên thư mục chứa thông tin về ngày tháng:
</p>
<pre> $ cp -R project project.2010-06-01.bak </pre>
<p>
Điều này dẫn tới kết quả là bạn sẽ có rất nhiều bản sao khác nhau của
dự án. Những bản sao này có thể dùng để chia sẻ với người khác, bằng
cách nén một trong các bản sao và đặt chúng lên một máy phục vụ web:
các lập trình viên khác có thể tải về bản sao, xem xét và thực hiện
các miếng vá thích hợp:
</p>
<pre>
$ wget http://sample.com/project.2010-06-01.zip
$ unzip project.2010-06-01.zip
$ cp -R project.2010-06-01 project-my-copy
$ unzip project.2010-06-01.zip
$ cd project-my-copy
$ # (thay đổi vài thứ trong mã nguồn)
$ diff project-my-copy project.2010-06-01 > change.patch
$ (gửi miếng vá change.patch)</pre>
<p>
Khi nhận được miếng vá, lập trình viên chính của dự án sẽ xem xét
và thực hiện vá vào một bản sao nào đó của dự án.
</p>
<p>
Thực tế, quá trình tạo bản sao, chia sẻ và vá như trên là nguyên lý
làm việc của nhiều hệ thống quản lý mã nguồn, đặc biệt là của những
dự án mã nguồn mở.
</p>
<p>
Bây giờ, cũng theo nguyên lý khá hiệu quả đó, ta sẽ xây dựng một
công cụ nhanh hơn và đơn giản hơn: thay vì quản lý phiên bản của từng
tập tin trong dự án (như cách làm của Subversion), ta xây dựng công
cụ để tạo và quản lý các bản sao của toàn bộ dự án, mà ta không phải
tạo ra các bản sao mới của toàn bộ các tập tin (như cách sao chép
đã mô tả ở trên.)
</p>
<p>
Ý tưởng vừa nói mô tả bản chất hoạt động của Git. Bạn sẽ nhờ Git
để tạo bản sao của toàn bộ dự án, bằng lệnh <code>git commit</code>
(xác nhận), nhưng Git đủ thông minh để tạo ra một danh sách chỉ gồm
các tập tin có thay đổi vào lúc xác nhận và thực hiện tạo bản sao
chỉ với danh sách đó. Hầu hết các lệnh còn lại của Git sẽ làm việc
với các danh sách mà lệnh <code>git commit</code> tạo ra (so sánh,
liệt kê), thay vì với toàn bộ các tập tin có trong thư mục.
</p>
<center><img src="/images/snapshots.png"/></center>
<p>
Đơn giản hơn, bạn có thể nghĩ Git như một công cụ để so sánh và
trộn các bản sao của một dự án. Đừng nghĩ Git như công cụ để quản
lý phiên bản của từng tập tin như Subversion.
</p>
</div>
</div>
<p><a href="/creating">Lấy và Tạo dự án »</a></p>