init translate drawbacks.txt
[gitmagic.git] / vi / clone.txt
blob050e53052ee2a1caa604d7d138f54b87493a935f
1 == Lệnh Clone ==
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 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ẽ 'pull' 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 === Classic Source Control ===
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 "Initial commit"
31 Trên máy chủ trung tâm, khởi tạo 'bare repository' ở 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 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 Để check out 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
71 khi trộn, sau đó thử lại.
73 === Kho Bare ===
75 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.
77 Kho bare có vai trò hoạt động giống như máy chủ trung tâm trong các hệ thống
78 quản lý mã nguồn tập trung: the home of your project. Các nhà phát triển phần mềm clone
79 dữ liệu dự án của bạn ở đây, và push các thay đổi chính thức lên đó. Typically it
80 resides on a server that does little else but disseminate data. Development
81 occurs in the clones, so the home repository can do without a working
82 directory.
84 Nhiều lệnh Git commands gặp lỗi fail on bare repositories 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.
86 === Push versus pull ===
88 Why did we introduce the push command, rather than rely on the familiar pull
89 command? Trước hết, pulling fails on bare repositories: instead you must 'fetch',
90 a command we later discuss. But even if we kept a normal repository on the
91 central server, pulling into it would still be cumbersome. We would have to
92 login to the server first, and give the pull command the network address of the
93 machine we're pulling from. Firewalls may interfere, and what if we have no
94 shell access to the server in the first place?
96 Tuy nhiên, ngoài trường hợp này ra, we discourage pushing into a repository, 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.
98 Tóm lại, khi học Git, chỉ push khi đích là kho bare; nếu không thì dùng pull.
100 === Rẽ nhánh Dự án ===
102 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:
104  $ git clone git://main.server/path/to/files
106 Tiếp theo, nói với mọi người về nhánh rẽ từ dự án của bạn tại máy chủ của bạn.
108 Từ giờ trở đi, bạn có thể trộn các sự thay đổi từ dự án gốc với lệnh:
110  $ git pull
112 === Ultimate Backups ===
114 Want numerous tamper-proof geographically diverse redundant archives? 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 clone đều đồng thời có tác dụng như một bản sao lưu dự phòng. Not just of the current state, but of your project's entire history. Thanks to cryptographic hashing, if anyone's clone becomes corrupted, it will be spotted as soon as they try to communicate with others.
116 Nếu dự án của bạn không phổ biến, hãy tìm càng nhiều máy chủ lưu giữ bản clone của bạn càng nhiều càng tốt.
118 The truly paranoid should always write down the latest 20-byte giá trị băm SHA1 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ó.
120 === Light-Speed Multitask ===
122 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:
124  $ git clone . /some/new/directory
126 Git lợi dụng liên kết cứng (hard links) và sự chia sẻ tệp tin càng nhiều càng an toàn để tạo bản sao (clone) này, so it will be ready in a flash, và bây giờ bạn có thể làm hai việc độc lập cùng một lúc. Ví dụ như, bạn soạn thảo trên bản sao này trong khi đó lại dịch trên cái kia.
128 Bất kỳ lúc nào, bạn cũng có thể commit và pull các thay đổi từ một bản sao (clone) khác.
130  $ git pull /the/other/clone HEAD
132 === Guerilla  ===
134 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:
136  $ git init
137  $ git add .
138  $ git commit -m "Initial commit"
140 sau đó clone nó:
142  $ git clone . /some/new/directory
144 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 to your heart's content. Đô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õ:
146  $ git add .
147  $ git commit -m "Sync with everyone else"
149 Sau đó chuyển tới thư mục mới và chạy:
151  $ git commit -a -m "Description of my changes"
152  $ git pull
154 The procedure for giving your changes to everyone else depends on the other version control system. The new directory contains the files with your changes. Run whatever commands of the other version control system are needed to upload them to the central repository.
156 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].
158 === Mercurial ===
160 Mercurial là hệ thống quản lý mã nguồn is a similar version control system that can almost seamlessly work in tandem with 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ì.
162 Lấy plugin `hg-git` dành cho Git bằng cách:
164  $ git clone git://github.com/schacon/hg-git.git
166 hay là sử dụng Mercurial:
168  $ hg clone http://bitbucket.org/durin42/hg-git/
170 Thật buồn là tôi hay rằng có am unaware of an analogous plugin dành cho Git. Vì vậy, tôi ủng hộ Git hơn Mercurial để for the main repository, dù là bạn thích Mercurial. Với một dự án Mercurial, usually a volunteer maintains a parallel Git repository to accommodate Git users, whereas thanks to the `hg-git` plugin, a Git project automatically accommodates Mercurial users.
172 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ừ:
174  $ git clone git://repo.or.cz/fast-export.git
176 Để chuyển đổi, trong một thư mục rỗng hãy chạy:
178  $ git init
179  $ hg-fast-export.sh -r /hg/repo
181 sau khi đặt script vào trong biến môi trường `$PATH`.
183 === Bazaar ===
185 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
186 miễn phí và phổ biến nhất chỉ sau Git và Mercurial.
188 Bazaar has the advantage of hindsight, as it is relatively young; its designers could learn from mistakes of the past, and sidestep minor historical warts. Ngoài ra, its developers are mindful of portability and interoperation with other version control systems.
190 Plugin `bzr-git` giúp người dùng Bazaar làm việc với kho Git to some extent. The `tailor` program chuyển đổi Bazaar thành Git, and can do so incrementally, trong khi `bzr-fast-export` thích hợp nhất cho one-shot conversions.
192 === Tại sao Tôi sử dụng Git ===
194 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ư nhân (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ộ, and I've yet to be bitten by its flaws. Do tôi hoạt động chủ yếu trên Linux, issues on other platforms are of no concern.
196 Ngoài ra, Thôi thích lập trình bằng ngôn ngữ C và bash scripts to executables such as Python scripts: there are fewer dependencies, và tôi I'm addicted to fast running times.
198 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, but only as an academic exercise. Had I completed my project, I would have stayed with Git anyway, as the gains are too slight to justify using an oddball system.
200 Rất tự nhiên, những thứ cần thiết và 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.