You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: vi/basic.txt
+1-1
Original file line number
Diff line number
Diff line change
@@ -187,7 +187,7 @@ Cũng có thể dùng lệnh:
187
187
188
188
Thường thường, tôi duyệt lịch sử bằng http://sourceforge.net/projects/qgit[qgit] để thay thế cách ở trên, bởi vì nó có giao diện đồ họa bóng bẩy, hay http://jonas.nitro.dk/tig/[tig], có giao diện dòng lệnh làm việc rất tốt với các máy có kết nối mạng chậm. Một lựa chọn khác là cài đặt máy chủ web, chạy lệnh *git instaweb* và sử dụng bất kỳ trình duyệt web nào.
189
189
190
-
=== Bài Tập===
190
+
=== Bài Tập===
191
191
192
192
Coi A, B, C, D là 4 lần commit thành công, nơi mà B giống A ngoại trừ một số tệp tin bị xóa bỏ. Chúng ta muốn thêm các tệp tin đó trở lại D. Chúng ta thực hiện điều này bằng cách nào?
Copy file name to clipboardExpand all lines: vi/clone.txt
+24-8
Original file line number
Diff line number
Diff line change
@@ -17,8 +17,7 @@ Khởi tạo kho chứa Git và commit các tệp tin trên một máy tính. Sa
17
17
$ git commit -a
18
18
$ git pull other.computer:/path/to/files HEAD
19
19
20
-
sẽ lấy về một trạng thái của các tệp tin trên máy tính khác về máy bạn đang làm việc. Nếu bạn vừa tạo ra một sự chỉnh sửa
21
-
xung đột trong cùng một tệp tin , Git sẽ cho bạn biết và bạn có thể commit lại sau khi đã sửa chữa chúng.
20
+
sẽ lấy về một trạng thái của các tệp tin trên máy tính khác về máy bạn đang làm việc. Nếu bạn vừa tạo ra một sự chỉnh sửa xung đột trong cùng một tệp tin , Git sẽ cho bạn biết và bạn có thể commit lại sau khi đã sửa chữa chúng.
22
21
23
22
=== Quản lý theo cách Cũ ===
24
23
@@ -33,7 +32,7 @@ Trên máy chủ trung tâm, khởi tạo 'kho bare' ở một thư mục nào
33
32
$ mkdir proj.git
34
33
$ cd proj.git
35
34
$ git init --bare
36
-
$ # one-line variant: GIT_DIR=proj.gitgit init
35
+
$ touch proj.git/git-daemon-export-ok
37
36
38
37
Khởi động dịch vụ Git daemon nếu cần:
39
38
@@ -44,11 +43,11 @@ và khởi tạo kho Git. Cách thường thấy nhất là điền vào mẫu c
44
43
45
44
'Push' dự án của bạn lên máy chủ trung tâm bằng lệnh:
46
45
47
-
$ git push git://central.server/path/to/proj.git HEAD
46
+
$ git push central.server/path/to/proj.git HEAD
48
47
49
48
Để lấy về mã nguồn, các nhà phát triển phần mềm chỉ cần gõ:
50
49
51
-
$ git clone git://central.server/path/to/proj.git
50
+
$ git clone central.server/path/to/proj.git
52
51
53
52
Sau khi thay đổi, các nhà phát triển phần mềm sẽ lưu lại các thay đổi trên máy tính của mình:
54
53
@@ -69,7 +68,24 @@ Gửi thay đổi của mình lên máy chủ trung tâm:
69
68
Nếu máy chủ trung tâm có thay đổi bởi hành động của một người phát triển phần mềm khác, quá trình
70
69
push sẽ bị lỗi, và anh ta phải pull về bản mới nhất, xử lý các xung đột khi trộn, sau đó thử lại.
71
70
72
-
=== Kho Thuần ===
71
+
Người dùng phải có quyền truy cập SSH mới có thể thực hiện được lệnh pull và push ở trên.
72
+
Tuy nhiên, ai cũng có thể lấy mã nguồn về bằng lệnh::
73
+
74
+
$ git clone git://central.server/path/to/proj.git
75
+
76
+
Giao thức git nguyên bản thì cũng giống như là HTTP: ở đây không cần xác thực, do vậy ai cũng có thể
77
+
lấy về dự án. Do vậy, theo mặc định, việc push thông qua giao thức git là
78
+
không được phép.
79
+
80
+
=== Mã nguồn riêng tư ===
81
+
82
+
Với một dự án nguồn-đóng, bỏ quên lệnh touch, và chắc chắn là chưa từng
83
+
tạo ra file nào có tên `git-daemon-export-ok`. Kho chứa từ giờ trở đi không thể lấy về
84
+
thông qua giao thức git; chỉ những người có khả năng truy cập bằng SSH mới có thể thấy nó. Nếu tất cả
85
+
các kho chứa đều đóng, việc chạy git daemon là không cần thiết nữa bởi vì tất cả
86
+
việc truyền thông bây giờ đều thông qua SSH.
87
+
88
+
=== Kho thuần ===
73
89
74
90
Kho thuần (bare) được đặt tên như vậy vì nó không chứa thư mục làm việc; nó chỉ chứa các tệp tin thường là ẩn trong thư mục phụ `.git`. Hay nói cách khác, nó chứa lịch sử mã nguồn của một dự án, và không bao giờ giữ dữ liệu còn đang dang dở của bất kỳ phiên bản nào.
75
91
@@ -82,7 +98,7 @@ thư mục làm việc.
82
98
83
99
Nhiều lệnh Git gặp lỗi trên kho thuần trừ phi biến môi trường `GIT_DIR` được đặt với giá trị là đường dẫn đến kho chứa, hay tùy chọn `--bare` được áp dụng.
84
100
85
-
=== Push đối lập với pull ===
101
+
=== Push ngược với pull ===
86
102
87
103
Tại sao chúng tôi lại giới thiệu lệnh push, thay vì trông cậy vào lệnh pull
88
104
quen thuộc? Trước hết, việc pull gặp lỗi trên kho thuần: thay vào đó bạn phải dùng lệnh 'fetch',
@@ -96,7 +112,7 @@ Tuy nhiên, ngoài trường hợp này ra, chúng ta còn nản lòng với vi
96
112
97
113
Tóm lại, khi bạn học Git, chỉ push khi đích là kho thuần; nếu không thì dùng pull.
98
114
99
-
=== Rẽ Nhánh Dự Án ===
115
+
=== Rẽ Nhánh một Dự Án ===
100
116
101
117
Bạn chán ngấy cách mà dự án mà bạn đang làm việc chạy? Bạn nghĩ mình có thể làm tốt hơn thế? Thế thì trên máy chủ của mình:
Copy file name to clipboardExpand all lines: vi/history.txt
+34-11
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
== Bài Học về Lịch Sử ==
2
2
3
3
Một hệ quả tất yếu của đặc tính phân tán của Git là việc lịch sử có thể biên soạn lại một cách
4
-
dễ dàng. Nhưng nếu bạn xáo trộn quá khứ, hãy cẩn thận: chỉ biên soạn lại quá khứ trong lịch sử
4
+
dễ dàng. Nhưng nếu bạn xáo trộn quá khứ, hãy cẩn thận: chỉ biên soạn lại các phần trong lịch sử
5
5
chỉ khi bạn sở hữu nó một mình. Cũng giống như việc các quốc gia tranh cãi không kết thúc xem ai là người
6
6
tận tâm hành động nào là tàn ác, nếu một người khác có một bản sao mà lịch sử của nó lại khác với
7
7
cái của bạn, bạn sẽ gặp rắc rối ngay khi cần tương tác với họ.
@@ -25,9 +25,11 @@ Bạn muốn thêm vài chỉnh sửa vào lần cuối mình đã commit ư? Th
25
25
26
26
$ git commit --amend -a
27
27
28
-
=== ... Và Nhiều Lần mộtlúc ===
28
+
=== ... Và Sau đó là Nhiều Lần ===
29
29
30
-
Hãy giả sử vấn đề trục trặc ở lần commit cách đây mười lần. Trong một buổi làm việc dài, bạn đã tạo ra hàng tá các lần commit. Nhưng bạn không hoàn toàn hài lòng với cách mà chúng được tổ chức, và một số lần commit cần được soạn lại phần mô tả. Thế thì hãy gõ:
30
+
Giả sử vấn đề trục trặc ở lần commit cách đây mười lần. Sau một buổi làm việc dài, bạn đã
31
+
tạo ra hàng tá các lần commit. Nhưng bạn không hoàn toàn hài lòng với cách mà chúng được
32
+
tổ chức, và một số lần commit cần được soạn lại phần mô tả. Thế thì hãy gõ:
31
33
32
34
$ git rebase -i HEAD~10
33
35
@@ -37,25 +39,43 @@ và 10 lần commit cuối sẽ xuất hiện trong $EDITOR yêu thích của b
37
39
pick a311a64 Reordered analogies in "Work How You Want"
38
40
pick 100834f Added push target to Makefile
39
41
40
-
Thế thì:
42
+
Lần commit cũ đứng trước lần mới hơn trong danh sách, không giống như kết quả khi chạy lệnh `log`.
43
+
Ở đây, 5c6eb73 là lần commit cũ nhất, và 100834f là mới nhất. Thế thì:
41
44
42
-
-Xóa bỏ các lần commit bằng cách xóa các dòng tương ứng.
43
-
-Đặt lại các lần commit bằng các đặt lại các dòng.
44
-
- Thay thế `pick` với:
45
+
- Xóa bỏ các lần commit bằng cách xóa các dòng tương ứng. Giống như lệnh revert, nhưng không
46
+
ghi biên bản: nó sẽ coi như là lần commit đó chưa từng bao giờ tồn tại.
47
+
- Đặt lại thứ tự các lần commit bằng cách thay đổi thứ tự các dòng.
48
+
- Thay thế `pick` bằng:
45
49
* `edit` để đánh dấu lần commit đó là dành cho việc tu bổ.
46
50
* `reword` để thay đổi phần chú giải.
47
51
* `squash` để hòa trộn với lần commit trước.
48
52
* `fixup` để hòa trộn với lần commit trước và bỏ qua việc ghi lại phần chú giải.
49
53
50
-
Ghi lại và thoát ra. Nếu bạn đánh dấu một lần commit dành cho việc 'edit', thế thì
51
-
chạy:
54
+
Ví dụ, chúng ta chẳng hạn thay thế `pick` ở dòng thứ hai bằng `squash`:
52
55
53
-
$ git commit --amend
56
+
pick 5c6eb73 Added repo.or.cz link
57
+
squash a311a64 Reordered analogies in "Work How You Want"
58
+
pick 100834f Added push target to Makefile
59
+
60
+
Sau đó chúng ta ghi lại thay đổi và thoát ra. Git trộn lần a311a64 vào 5c6eb73. Vì vậy *squash* trộn
61
+
với lần kế trước nó: có thể nghĩ đây là quá trình ``nén dữ liệu''.
62
+
63
+
Hơn thế nữa, Git sau đó tổ hợp nhật ký của chúng và hiện tại và chỉnh sửa lại. Lệnh
64
+
*fixup* bỏ qua bước này; việc sửa nhật ký đơn giản là bỏ qua.
54
65
55
-
Cách khác, chạy:
66
+
Nếu bạn đánh dấu một lần commit bằng *edit*, Git đưa bạn trở lại quá khứ, tới lần
67
+
commit lâu nhất đó. Bạn có thể tu bổ một lần commit cũ như đã mô tả ở phần trên,
68
+
và thậm chí tạo ra các lần commit mới ở chỗ này. Một khi bạn đã hài lòng với việc
69
+
``retcon'', hãy chạy 'cỗ máy thời gian' bằng cách chạy lệnh:
56
70
57
71
$ git rebase --continue
58
72
73
+
Git sửa commits cho tới *edit* kế tiếp, hoặc tới hiện tại nếu không còn việc gì cần phải làm.
74
+
75
+
Bạn còn có thể bãi bỏ việc rebase bằng lệnh:
76
+
77
+
$ git rebase --abort
78
+
59
79
Do vậy cứ commit thoải mái và thường xuyên bởi vì bạn có thể dọn dẹp cho gọn gàng sau này bằng lệnh rebase.
60
80
61
81
=== Thay Đổi Riêng Sắp Xếp Sau ===
@@ -70,6 +90,9 @@ cờ *--onto* và tránh xa sự tương tác với các máy tính khác.
70
90
71
91
Xem thêm trong *git help rebase* để thấy được chi tiết các ví dụ dành cho lệnh đáng kinh ngạc này. Bạn có thể chia cắt các lần commit. Bạn còn có thể xắp xếp lại các nhánh của một cấu trúc cây.
72
92
93
+
Hãy cẩn thận: rebase là một lệnh mạnh mẽ. Với những lần rebases phức tạp, trước hết hãy tạo ra
94
+
một bản sao lưu dự phòng bằng lệnh *git clone*.
95
+
73
96
=== Viết Lại Lịch Sử ===
74
97
75
98
Thỉnh thoảng, bạn muốn việc quản lý mã nguồn giống việc người ta sơn vẽ chân dung một
Copy file name to clipboardExpand all lines: vi/intro.txt
+2-2
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ Tôi sử dụng cách ví von để giới thiệu về hệ thống quản lý
4
4
5
5
=== Công Việc giống như Trò Chơi ===
6
6
7
-
Tôi đã chơi trò chơi trên máy tính suốt từ bé đến giờ. Ngược lại, tôi chỉ bắt đầu sử dụng hệ thống quản lý mã nguồn khi đã trưởng thành. Tôi tin rằng không chỉ có tôi như thế, và việc so sánh giữa hai điều đó sẽ làm có các khái niệm trở nên dễ hiểu, dễ giải thích hơn.
7
+
Tôi đã chơi trò chơi trên máy tính suốt từ bé đến giờ. Ngược lại, tôi chỉ bắt đầu sử dụng hệ thống quản lý mã nguồn khi đã trưởng thành. Tôi tin rằng không chỉ có tôi như thế, và việc so sánh giữa hai điều đó sẽ làm cho các khái niệm trở nên dễ hiểu, dễ giải thích hơn.
8
8
9
9
Hãy nghĩ việc biên soạn mã nguồn, tài liệu cũng giống như việc chúng ta đang chơi trò chơi trên máy tính. Một khi bạn đã làm được kha khá, bạn sẽ muốn ghi lại thành quả công việc của mình. Để làm điều đó, bạn chỉ việc bấm vào nút 'Save' trong chương trình biên soạn của mình.
10
10
@@ -40,7 +40,7 @@ Việc khởi tạo bản sao như thế có vẻ hơi xa hoa, đặc biệt là
40
40
41
41
Một quan niệm phổ biến là hệ thống phân tán không thích hợp với các dự án có yêu cầu một kho chứa trung tâm chính thức. Không điều gì có thể chà đạp lên sự thật. Chụp ảnh ai đó không có nghĩa là lấy đi linh hồn họ. Cũng như thế, nhân bản kho chính cũng không làm giảm đi sự quan trọng của nó.
42
42
43
-
Tóm lại, một hệ thống phân tán đã thiết kế tốt thì làm bất cứ công việc nào cũng khá hơn một hệ thống quản lý mã nguồn tập trung. Tài nguyên mạng thường thì tốn kém hơn các tài nguyên nội bộ. Chúng ta sẽ nói đến các hạn chế của hệ thống phân tán sau, sự so sánh như sau thường đúng: hệ thống phân tán tốt hơn.
43
+
Tóm lại, một hệ thống phân tán đã thiết kế tốt thì làm bất cứ công việc nào cũng khá hơn một hệ thống quản lý mã nguồn tập trung. Tài nguyên mạng thường thì tốn kém hơn các tài nguyên nội bộ. Chúng ta sẽ nói đến các hạn chế của hệ thống phân tán sau, sự so sánh như sau thường đúng: hệ thống phân tán thường tốt hơn.
44
44
45
45
Một dự án nhỏ có thể chỉ cần dùng một phần nhỏ các đặc tính được đưa ra bởi một
46
46
hệ thống như thế, nhưng việc sử dụng một hệ thống không có khả năng mở rộng cho một dự án nhỏ thì cũng giống như việc sử dụng
Copy file name to clipboardExpand all lines: vi/preface.txt
+13-11
Original file line number
Diff line number
Diff line change
@@ -12,13 +12,13 @@ Thay vì đi sâu vào chi tiết, chúng tôi đưa ra phác thảo cách làm
12
12
13
13
.Bản dịch
14
14
15
-
- link:/\~blynn/gitmagic/intl/zh_cn/[Tiếng Trung Giản thể]: dịch bởi JunJie, Meng và JiangWei. Đã chuyển đổi sang:/~blynn/gitmagic/intl/zh_tw/[Tiếng Trung Phồn thể] thông qua lệnh +cconv -f UTF8-CN -t UTF8-TW+.
15
+
- link:/\~blynn/gitmagic/intl/zh_cn/[Tiếng Trung Giản thể]: dịch bởi JunJie, Meng và JiangWei. Đã chuyển đổi sang: link:/~blynn/gitmagic/intl/zh_tw/[Tiếng Trung Phồn thể] thông qua lệnh +cconv -f UTF8-CN -t UTF8-TW+.
16
16
- link:/~blynn/gitmagic/intl/fr/[Tiếng Pháp]: dịch bởi Alexandre Garel; và đồng thời được xuất bản tại http://tutoriels.itaapy.com/[itaapy].
17
17
- link:/~blynn/gitmagic/intl/de/[Tiếng Đức]: dịch bởi Benjamin Bellee và Armin Stebich. Armin ; và đồng thời xuất bản http://gitmagic.lordofbikes.de/[bản dịch tiếng Đức trên website của chính mình].
18
18
- http://www.slideshare.net/slide_user/magia-git[Tiếng Bồ Đào Nha]: dịch bởi Leonardo Siqueira Rodrigues [http://www.slideshare.net/slide_user/magia-git-verso-odt[định dạng ODT]].
19
19
- link:/~blynn/gitmagic/intl/ru/[Tiếng Nga]: dịch bởi Tikhon Tarnavsky, Mikhail Dymskov và một số người khác.
20
20
- link:/~blynn/gitmagic/intl/es/[Tiếng Tây Ban Nha]: dịch bởi Rodrigo Toledo và Ariset Llerena Tapia.
21
-
- link:/~blynn/gitmagic/intl/vi/[Tiếng Việt]: dịch bởi Trần Ngọc Quân và đồng thời xuất bản bản dịch này trên http://vnwildman.users.sourceforge.net/gitmagic.html[trang Web cá nhân của mình].
21
+
- link:/~blynn/gitmagic/intl/vi/[Tiếng Việt]: dịch bởi Trần Ngọc Quân và đồng thời xuất bản bản dịch này trên http://vnwildman.users.sourceforge.net/gitmagic/[trang Web cá nhân của mình].
22
22
23
23
.Các định dạng khác
24
24
@@ -33,32 +33,34 @@ Tôi gửi lời cảm ơn đến những người đã dịch quyển sách nà
33
33
Tôi rất cảm kích vì có được số lượng độc giả rộng lớn có được bởi những người
34
34
đã được nêu tên ở trên.
35
35
36
-
Dustin Sallings, Alberto Bertogli, James Cameron, Douglas Livingstone, Michael Budde, Richard Albury, Tarmigan, Derek Mahar, Frode Aannevik, Keith Rarick, Andy Somerville, Ralf Recker, Øyvind A. Holm, Miklos Vajna, Sébastien Hinderer, Thomas Miedema, Joe Malin, và Tyler Breisacher đã đóng góp trong việc sửa chữa và cải tiến.
36
+
Dustin Sallings, Alberto Bertogli, James Cameron, Douglas Livingstone, Michael Budde, Richard Albury, Tarmigan, Derek Mahar, Frode Aannevik, Keith Rarick, Andy Somerville, Ralf Recker, Øyvind A. Holm, Miklos Vajna, Sébastien Hinderer, Thomas Miedema, Joe Malin, Tyler Breisacher và Sonia Hamilton đã đóng góp trong việc sửa chữa và cải tiến nội dung.
37
37
38
38
François Marier đã bảo trì gói Debian do Daniel
39
39
Baumann khởi xướng.
40
40
41
41
Tôi cũng gửi lời cảm ơn tới sự giúp đỡ và sự tán dương của các bạn. Tôi muốn
42
-
trích dẫn ra ở đây, nhưng làm như thế có vẻ hơi lố bịch.
42
+
trích dẫn những lời đó ra đây, nhưng làm như thế có vẻ hơi lố bịch, tự cao tự đại.
43
43
44
44
Nếu tôi có sai sót gì, xin hãy thông tin hay gửi bản vá cho tôi!
45
45
46
-
.Nơi lưu giữ Git miễn phí
47
-
48
-
- http://repo.or.cz/[http://repo.or.cz/] lưu trữ các dự án miễn phí. Đây là địa chỉ lưu giữ Git đầu tiên. Được thành lập và bảo trì bởi một trong số những người phát triển Git đầu tiên.
49
-
- http://gitorious.org/[http://gitorious.org/] là một địa chỉ lưu giữ Git khác nhằm vào các dự án nguồn mở.
50
-
- http://github.com/[http://github.com/] lưu giữ các dự án nguồn mở miễn phí, và dự án riêng có thu phí.
51
-
46
+
*Nơi có dịch vụ Git miễn phí*: Những địa chỉ sau đây cho phép lưu trữ các dự án công cộng miễn phí.
52
47
Trân thành cảm ơn các máy chủ đã lưu giữ bản hướng dẫn này.
53
48
49
+
- http://repo.or.cz/[repo.or.cz]
50
+
- http://gitorious.org/[Gitorious]
51
+
- http://github.com/[GitHub] lưu giữ các dự án riêng có thu phí.
52
+
- http://www.assembla.com/[Assembla]: lưu giữ các dự án riêng có thu phí, nhưng dù sao thì một gigabyte đầu tiên là miễn phí.
53
+
54
54
=== Giấy phép sử dụng ===
55
55
56
56
Hướng dẫn này được phát hành dựa trên Giấy Ghép Công phiên bản 3 http://www.gnu.org/licenses/gpl-3.0.html[the GNU General Public License version 3]. Đương nhiên, nội dung của quyển sách được quản lý bằng Git,
57
57
và bạn có thể dễ dàng có được nó bằng cách gõ:
58
58
59
59
$ git clone git://repo.or.cz/gitmagic.git # Tạo ra thư mục "gitmagic".
0 commit comments