Continue edit basic.txt
[gitmagic.git] / vi / basic.txt
blob3882a72b98247740abe302a307d738beea9aae45
1 == Vài mẹo Cơ bản ==
3 Thay vì lao vào cả một biển lệnh với Git, hãy sử dụng các ví dụ cơ bản để bắt đầu.
4 Mặc dù chúng rất đơn giản, nhưng tất cả chúng đều rất hữu dụng.
5 Quả thực là vậy, trong tháng đầu tiên sử dụng Git Tôi chưa bao giờ vượt qua những gì nói trong chương này.
7 === Ghi lại State ===
9 Bạn muốn thử một điều gì đó quyết liệt ư? Trước khi làm điều đó, thực hiện các lệnh sau trong thư mục hiện hành chứa các văn bản mà bạn muốn quản lý:
11  $ git init
12  $ git add .
13  $ git commit -m "My first backup"
15 Bây giờ nếu như các thay đổi của bạn không như mong đợi, hãy phục hồi lại bản cũ:
17  $ git reset --hard
19 Lưu lại state lần nữa:
21  $ git commit -a -m "Another backup"
23 === Thêm, Xóa, Đổi tên ===
25 Lệnh ở trên chỉ giữ dấu vết các tệp tin và hiện diện tại thời điểm bạn chạy lệnh *git add*. Nếu bạn thêm các tệp tin hay thư mục, bạn sẽ phải thông báo với Git:
27  $ git add readme.txt Documentation
29 Tương tự như vậy, nếu bạn muốn Git bỏ qua các tệp tin nào đó:
31  $ git rm kludge.h obsolete.c
32  $ git rm -r incriminating/evidence/
34 Git xóa bỏ những tệp tin nếu như bạn chưa làm vậy.
36 Đổi tên tệp tin thì cũng giống như là việc bạn gỡ bỏ tên cũ và đặt vào tên mới. Sử dụng lệnh *git mv* có cú pháp rất giống lệnh *mv*. Ví dụ:
38  $ git mv bug.c feature.c
40 ===  Chức năng Undo/Redo  ===
42 Đôi khi bạn chỉ muốn quay trở lại và bỏ đi những thay đổi trong quá khứ tại một thời điểm nào đó bởi vì chúng tất cả đã sai. Thì lệnh:
44  $ git log
46 sẽ hiển thị cho bạn danh sách các lần commit gần đây cùng với giá trị băm SHA1:
48 ----------------------------------
49 commit 766f9881690d240ba334153047649b8b8f11c664
50 Author: Bob <bob@example.com>
51 Date:   Tue Mar 14 01:59:26 2000 -0800
53     Replace printf() with write().
55 commit 82f5ea346a2e651544956a8653c0f58dc151275c
56 Author: Alice <alice@example.com>
57 Date:   Thu Jan 1 00:00:00 1970 +0000
59     Initial commit.
60 ----------------------------------
62 Chỉ vài ký tự của giá trị băm là đủ để chỉ ra một commit cụ thể;
63 một cách khác là chép và dán giá trị băm. Gõ:
65  $ git reset --hard 766f
67 để phục hồi lại state đã chỉ ra và xóa bỏ tất cả các lần commit mới hơn kể từ đó.
69 Một lúc nào đó bạn lại muốn nhảy tới một cái cũ hơn. Trong trường hợp này thì gõ:
71  $ git checkout 82f5
73 Nó giúp bạn quay lại đúng thời điểm đó, trong khi vẫn giữ lại những lần commit mới hơn. Tuy nhiên, giống như cỗ máy thời gian trong các bộ phim khoa học viễn tưởng, nếu bây giờ bạn sửa và commit, bạn sẽ ở trong một thực tại khác, bởi vì hành động của bạn bây giờ đã khác với chúng trong lần đầu tiên ở tại đây.
75 Có cách thực tế hơn là sử dụng 'branch', và <<branch, chúng ta có nhiều điều để nói về nó sau này>>. Bây giờ, chỉ cần nhớ là
77  $ git checkout master
79 sẽ mang chúng ta trở về hiện tại. Ngoài ra, để không phải oán trách Git, luôn luôn
80 commit hay reset các thay đổi của bạn trước khi chạy lệnh checkout.
82 To take the computer game analogy again:
84 - *`git reset --hard`*: lấy cái cũ đã lưu lại và xóa tất cả các games mới hơn cái vừa lấy.
86 - *`git checkout`*: lấy một cái cũ, nhưng chỉ chơi với nó, the game state will deviate from the newer saves you made the first time around. Any saved games you make now will end up in a separate branch representing the alternate reality you have entered. <<branch, Chúng tôi sẽ nói sau>>.
88 You can choose only to restore particular files and subdirectories by appending them after the command:
90  $ git checkout 82f5 some.file another.file
92 Hãy cẩn thận, như là lệnh *checkout* có thể âm thầm ghi đè lên các tệp tin. Để
93 ngăn ngừa rủi ro như thế, hãy commit trước khi chạy lệnh checkout, nhất là khi
94 mới học sử dụng Git. Tóm lại, bất kỳ khi nào bạn không chắc chắn về một lệnh nào đó, dù có là lệnh của Git hay không, đầu tiên hãy chạy lệnh *git commit -a*.
96 Bạn không thích việc cắt dán ư? Hãy sử dụng:
98  $ git checkout :/"My first b"
100 để nhảy tới lần commit mà bắt đầu với thông điệp đã cho.
101 Bạn cũng có thể yêu cầu state thứ 5 kể từ cuối cùng:
103  $ git checkout master~5
105 === Sự quay lại ===
107 Trong một phiên tòa, events can be stricken from the record. Cũng giống thế, bạn có thể chọn lệnh commit để undo.
109  $ git commit -a
110  $ git revert 1b6d
112 sẽ chỉ undo lần commit với giá trị băm đã chỉ ra. Sự quay trở lại được ghi nhận như là một lần
113 commit mới, bạn có thể xác nhận bằng lệnh *git log*.
115 === Tạo Changelog ===
117 Một số dự án yêu cầu có http://en.wikipedia.org/wiki/Changelog[changelog].
118 Tạo một cái bằng cách gõ:
120  $ git log > ChangeLog
122 === Tải về các Tệp tin ===
124 Lấy về một bản sao của một dự án quản lý bằng Git bằng cách gõ:
126  $ git clone git://server/path/to/files
128 Ví dụ, để lấy tất cả các tệp tin mà tôi đã dùng để tạo ra cho trang mạng này là:
130  $ git clone git://git.or.cz/gitmagic.git
132 Chúng ta sẽ có nhiều điều để nói về lệnh *clone* sớm thôi.
134 === The Bleeding Edge ===
136 Nếu bạn đã tải về một bản sao của một dự án sử dụng *git clone*, bạn có thể nâng cấp lên phiên bản cuối cùng với lệnh:
138  $ git pull
140 === Instant Publishing ===
142 Giả sử bạn đã tạo được script và bạn muốn chia sẻ nó với người khác. Bạn có thể bảo họ tải về từ máy tính của mình, nhưng nếu họ làm như thế trong khi bạn đang cải tiến script hay có những thay đổi mang tính thử nghiệm, họ có thể gặp trục trặc.  Dĩ nhiên, đây là lý do tại sao chu kỳ phát hành phần mềm lại tồn tại. Những người phát triển có thể làm việc trên một dự án thường xuyên, như họ chỉ đưa ra những đoạn mã mà họ cảm thấy nó có thể dùng được để tránh ảnh hưởng đến người khác.
144 Thực hiện điều này với Git, trong thư mục làm việc của Git:
146  $ git init
147  $ git add .
148  $ git commit -m "First release"
150 Sau đó nói với những người cùng sử dụng hãy chạy:
152  $ git clone your.computer:/path/to/script
154 để tải script về. Giả định là họ truy cập thông qua ssh. Nếu không, chạy *git daemon* và nói với người sử dụng là chạy lệnh sau để thay thế:
156  $ git clone git://your.computer/path/to/script
158 Kể từ lúc này, bất cứ khi nào mã nguồn của bạn đã có thể sử dụng được, chỉ việc thực hiện:
160  $ git commit -a -m "Next release"
162 và những người sử dụng có thể cập nhật dữ liệu của họ bằng cách chuyển tới thư mục làm việc tương ứng và gõ:
164  $ git pull
166 Your users will never end up with a version of your script của bạn mà bạn không muốn họ thấy.
168 === Tôi Phải Làm Gì? ===
170 Tìm tất cả các thay đổi kề từ lần bạn commit lần cuối bằng lệnh:
172  $ git diff
174 Hay từ hôm qua:
176  $ git diff "@{yesterday}"
178 Hay giữa một bản nào đó và bản trước đây 2 bản:
180  $ git diff 1b6d "master~2"
182 Trong từng trường hợp, đầu ra là một bản vá cái mà có thể được áp dụng với *git apply*.
183 Try also:
185  $ git whatchanged --since="2 weeks ago"
187 Thường thường, tôi sẽ dùng http://sourceforge.net/projects/qgit[qgit]
188 để thay thế cách ở trên, bởi vì nó có giao diện đồ họa bóng bẩy, hay
189 http://jonas.nitro.dk/tig/[tig], có giao diện dòng lệnh làm việc rất tối với
190 các máy có kết nối chậm. Một lựa chọn khác là cài đặt máy chủ web, chạy lệnh *git instaweb*
191 và sử dụng bất kỳ trình duyệt web nào.
193 === Bài tập===
195 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?
197 Ở đây chúng ta có ít nhất 3 giải pháp. Giả thiết chúng ta đang ở D:
199   1. Sự khác nhau giữa A và B là việc các tệp tin đã bị gỡ bỏ. Chúng ta có thể tạo miếng vá tương ứng với sự khác biệt này và apply nó:
201    $ git diff B A | git apply
203   2. Since we saved the files back at A, chúng ta có thể lấy lại:
205    $ git checkout A foo.c bar.h
207   3. We can view going from A to B as a change we want to undo:
209    $ git revert B
211 Lựa chọn nào là tốt nhất? Cách nào bạn thích nhất. Nó là dễ dàng để có được thứ mà bạn muốn với Git, và thường là có nhiều cách để thực hiện được điều đó.