Removed BOM from Vietnamese files.
[gitmagic/gitmagic.git] / vi / clone.txt
blobfc6d29f0b0cc904cf67ddfe1a35aaa4a28db994e
1 == Nhân Bản ==
3 Trong các hệ thống quản lý mã nguồn trước đây, checkout là tác vụ cơ bản để lấy các tệp tin về. Bạn lấy về toàn bộ các tập tin được lưu giữ trong từng phiên bản riêng biệt.
5 Với Git và các hệ thống quản lý mã nguồn phân tán, clone là tác vụ cơ bản. Để lấy các tệp tin, bạn tạo một 'clone' (bản sao) của toàn bộ kho chứa. Nói cách khác, bạn thực tế là một bản sao của máy chủ trung tâm. Bất kỳ cái gì bạn thể làm được với kho chứa chính thì cũng làm được ở đây.
7 === Đồng bộ hóa Các Máy tính ===
9 Tôi có thể tạo gói tarball hay sử dụng lệnh *rsync* để sao lưu (backup) và đồng bộ hóa dữ liệu. Nhưng thỉnh thoảng, tôi biên tập trên laptop của mình, nhưng lúc khác lại trên máy tính để bàn, và chúng có thể không có sự trao đổi được với nhau.
11 Khởi tạo kho chứa Git và commit các tệp tin trên một máy tính. Sau đó trên máy tính kia chạy lệnh:
13  $ git clone other.computer:/path/to/files
15 để tạo một bản sao thứ hai cho các tệp tin và kho chứa. Từ giờ trở đi,
17  $ git commit -a
18  $ git pull other.computer:/path/to/files HEAD
20 sẽ lấy (pull) một state 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.
23 === Quản lý theo cách Cũ ===
25 Khởi tạo kho Git cho các tệp tin của bạn:
27  $ git init
28  $ git add .
29  $ git commit -m "Lần commit khởi tạo"
31 Trên máy chủ trung tâm, khởi tạo 'kho bare' ở một thư mục nào đó:
33  $ mkdir proj.git
34  $ cd proj.git
35  $ git init --bare
36  $  # one-line variant: GIT_DIR=proj.git git init
38 Khởi động dịch vụ Git daemon nếu cần:
40  $ git daemon --detach  # nó có thể đã hoạt động rồi
42 Để làm một máy chủ chạy dịch vụ Git, làm theo các chỉ dẫn sau để cài đặt
43 và khởi tạo kho Git. Cách thường thấy nhất là điền vào form trên trang web.
45 'Push' dự án của bạn lên máy chủ trung tâm bằng lệnh:
47  $ git push git://central.server/path/to/proj.git HEAD
49 Để lấy về mã nguồn, các nhà phát triển phần mềm chỉ cần gõ:
51  $ git clone git://central.server/path/to/proj.git
53 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:
55  $ git commit -a
57 Để cập nhật lên bản mới nhất:
59  $ git pull
61 Mọi xung đột phải được xử lý trước, sau đó mới commit:
63  $ git commit -a
65 Gửi thay đổi của mình lên máy chủ trung tâm:
67  $ git push
69 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 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.
72 === Kho Bare ===
74 Kho bare (kho trần) đượ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ữ snapshot của bất kỳ phiên bản nào.
76 Kho bare có vai trò hoạt động giống như máy chủ trung tâm trong các hệ thống
77 quản lý mã nguồn tập trung: thư mục chủ dự án của bạn. Các nhà phát triển phần mềm clone
78 dữ liệu dự án của bạn ở đây, và push các thay đổi chính thức lên đó. Thông thường nó
79 đặt tại máy chủ mà máy này đôi khi còn làm một số việc khác nữa. Sự phát triển
80 xảy ra trên bản sao, vì vậy thư mục chủ của kho chứa có thể hoạt động mà không cần
81 thư mục làm việc.
83 Nhiều lệnh Git gặp lỗi trên kho bare 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.
85 === Push đối lập với pull ===
87 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 quen thuộc? Trước hết, việc pull gặp lỗi trên kho trần: thay vào đó bạn phải dùng lệnh 'fetch',
89 lệnh này chúng ta sẽ nói sau. Nhưng dù là chúng ta giữ kho chứa thông thường trên
90 máy chủ trung tâm, việc pull lên nó hơi cồng kềnh. Chúng ta phải
91 đăng nhập vào máy chủ trước, và cung cấp cho lệnh pull địa chỉ mạng
92 của máy chúng ta đang pull từ đó. Chương trình tường lửa có thể gây trở ngại, và điều gì xảy ra khi chúng ta không
93 có khả năng truy cập shell máy chủ trong chỗ đầu tiên đó?
95 Tuy nhiên, ngoài trường hợp này ra, chúng ta còn nản lòng với việc push lên kho chứa, bởi vì tình trạng hỗn loạn có thể xảy khi thư mục đích có chứa thư mục làm việc.
97 Tóm lại, khi bạn học Git, chỉ push khi đích là kho bare; nếu không thì dùng pull.
99 === Rẽ Nhánh Dự Án ===
101 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:
103  $ git clone git://main.server/path/to/files
105 Tiếp theo, nói với mọi người về việc nhánh rẽ từ dự án tại máy chủ của bạn.
107 Từ bây giờ trở đi, bạn có thể trộn các sự thay đổi từ dự án gốc với lệnh:
109  $ git pull
111 === Sao Lưu Không Giới Hạn ===
113 Bạn muốn lưu trữ dự án của mình ở nhiều nơi khác nhau ư? Nếu dự án của bạn có nhiều người cùng phát triển, bạn không cần phải làm gì cả! Mỗi một bản sao đều đồng thời có tác dụng như một bản sao lưu dự phòng. Không chỉ mỗi trạng thái hiện hành mà cả các mục lịch sử trong dự án của mình. Nhờ có giá trị băm bằng mật mã, nếu bản sao của người nào đó bị hỏng, nó sẽ được phát hiện ngay sau khi họ liên lạc với những người khác.
115 Nếu dự án của bạn không phổ biến, hãy tìm máy chủ lưu giữ bản sao của mình càng nhiều càng tốt.
117 Người mắc bệnh hoang tưởng sẽ luôn luôn ghi ra 20-byte giá trị băm SHA1 cuối cùng của HEAD ở đâu đó an toàn. Nó phải an toàn, không riêng tư. Ví dụ, xuất bản nó lên báo giấy cũng tốt, bởi vì rất khó để thay đổi tất cả các bản sao của nó.
119 === Làm nhiều việc cùng lúc ===
121 Bạn muốn làm nhiều việc cùng một lúc trên một dự án. Thế thì hãy commit dự án của bạn và chạy:
123  $ git clone . /some/new/directory
125 Nhờ có http://en.wikipedia.org/wiki/Hard_link[liên kết cứng], việc nhân bản nội bộ
126 yêu cầu ít không gian và thời gian hơn so với việc sao lưu thông thường.
128 Bây giờ bạn có thể làm hai công việc độc lập nhau cùng một lúc. Ví dụ như, bạn
129 có thể biên soạn trên bản sao này trong khi bản sao kia đang được biên dịch. Tại bất kỳ thời điểm nào, bạn cũng có thể commit
130 và pull các thay đỏi từ một bản sao khác:
132  $ git pull /the/other/clone HEAD
134 === Guerilla  ===
136 Bạn đang làm việc cho một dự án có sử dụng hệ thống quản lý mã nguồn cũ, và bạn lại muốn sử dụng Git? Thế thì hãy khởi tạo kho chứa Git trong thư mục bạn đang làm việc:
138  $ git init
139  $ git add .
140  $ git commit -m "Lần commit khởi tạo"
142 sau đó clone nó:
144  $ git clone . /some/new/directory
146 Bây giờ hãy chuyển đến thư mục mới đó và làm việc ở đây thay vì chỗ cũ, sử dụng Git để thỏa mãn tình yêu của mình. Đôi khi, bạn sẽ muốn đồng bộ hóa với những người khác nữa, trong trường hợp đó hãy chuyển tới thư mục nguyên bản (original), đồng bộ hóa bằng cách sử dụng một hệ thống quản lý mã nguồn khác, và gõ:
148  $ git add .
149  $ git commit -m "Đồng bộ hóa với những người khác"
151 Sau đó chuyển tới thư mục mới và chạy:
153  $ git commit -a -m "Mô tả về các thay đổi của mình"
154  $ git pull
156 Thủ tục đem lại các thay đổi của bạn tới những người khác nữa trên hệ thống quản lý mã nguồn khác. Thư mục mới có chứa các tệp tin mà bạn thay đổi. Chạy các lệnh mà hệ thống quản lý mã nguồn khác cần để tải chúng lên kho chứa trung tâm.
158 Subversion, có lẽ là hệ thống quản lý mã nguồn tập trung tốt nhất, được sử dụng bởi vô số các dự án. Lệnh *git svn* sẽ tự động hóa những việc đã nói ở trên dành cho Subversion, bạn cũng có thể làm như thế để http://google-opensource.blogspot.com/2008/05/export-git-project-to-google-code.html[xuất dự án Git thành Subversion].
160 === Mercurial ===
162 Mercurial là hệ thống tương tự như hệ thống quản lý mã nguồn có thể làm việc gần giống như Git. Với  plugin `hg-git`, người sử dụng Mercurial có thể push và pull từ kho Git mà không mất mát gì.
164 Lấy plugin `hg-git` dành cho Git bằng cách:
166  $ git clone git://github.com/schacon/hg-git.git
168 hay là sử dụng Mercurial:
170  $ hg clone http://bitbucket.org/durin42/hg-git/
172 Thật buồn là tôi không biết rằng có một plugin tương tự dành cho Git. Vì vậy, tôi ủng hộ Git hơn Mercurial khi dùng cho kho chứa chính, dù là bạn thích Mercurial hơn. Với một dự án Mercurial, thường thường một người tình nguyện duy trì  kho Git song song cho tương thích với người sử dụng Git, cũng phải cảm ơn plugin `hg-git`, một dự án Git tự động tiếp nhận người sử dụng Mercurial.
174 Mặc dù plugin có thể chuyển đổi Mercurial sang Git bằng cách push tới một kho rỗng, công việc này là dễ dàng với script `hg-fast-export.sh`, đã sẵn dùng từ:
176  $ git clone git://repo.or.cz/fast-export.git
178 Để chuyển đổi, trong một thư mục rỗng hãy chạy:
180  $ git init
181  $ hg-fast-export.sh -r /hg/repo
183 sau khi đặt script vào trong biến môi trường `$PATH`.
185 === Bazaar ===
187 Chúng tôi đề cập vắn tắt về Bazaar bởi vì nó là hệ thống quản lý mã nguồn phân tán
188 miễn phí và phổ biến nhất chỉ sau Git và Mercurial.
190 Bazaar có lợi thế vì phát triển sau, có tuổi tương đối trẻ; những người thiết kế ra nó có thể học hỏi được nhiều từ các sai lầm trong quá khứ, và tránh được vết xe đổ. Ngoài ra, các nhà phát triển còn lưu tâm đến khả năng chuyển đổi và tương tác với các hệ thống quản lý mã nguồn khác.
192 Plugin `bzr-git` giúp người dùng Bazaar làm việc với kho Git trong chừng mực nào đó. Chương trình chuyển đổi Bazaar thành Git, và có thể làm hơn thế nữa, trong khi `bzr-fast-export` thích hợp nhất cho việc chuyển đổi một lần duy nhất.
194 === Tại sao Tôi sử dụng Git ===
196 Trước tiên, tôi chọn Git bởi tôi nghe nói nó làm được việc phi thường là có thể quản lý mã nguồn cho một thứ khó quản lý như kernel của hệ điều hành Linux. Tôi chưa bao giờ nghĩ đến việc chuyển sang cái khác. Git làm được những việc thật đáng ngưỡng mộ, và tôi chưa từng bao giờ gặp các vấn đề với sai sót của nó. Do tôi hoạt động chủ yếu trên Linux, phát hành trên các nền tảng khác không phải là điều mà tôi quan tâm.
198 Ngoài ra, tôi thích lập trình bằng ngôn ngữ C và bash scripts để thực thi như là Python script: ở đây có rất ít sự phụ thuộc, và tôi đam mê với những hệ thống thi hành nhanh chóng.
200 Tôi đã nghĩ về việc làm thế nào để Git có thể phát triển, xa hơn nữa là tự mình viết một công cụ tương tự như Git, nhưng đây không phải là bài tập có tính thực tế. Khi tôi hoàn thành dự án của mình, dù sao đi nữa tôi vẫn sẽ dùng Git, với lợi thế là có thể chuyển đổi từ hệ thống cũ sang một cách nhanh chóng.
202 Theo lẽ tự nhiên, những thứ cần thiết cho bạn và những thứ bạn mong muốn có lẽ khác nhau, và bạn có thể tốt hơn nếu ở một hệ thống khác. Dù sao đi nữa, bạn sẽ không bao giờ phải hối tiếc vì đã chọn Git.