-
Notifications
You must be signed in to change notification settings - Fork 4
/
03s-using-github.md.erb
141 lines (83 loc) · 9.39 KB
/
03s-using-github.md.erb
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
---
title: Sử dụng Git & GitHub
slug: github
date: 0003/01/02
number: 3.5
sidebar: true
contents: Tìm hiểu cách sử dụng GitHub trong suốt cuốn sách này.
paragraphs: 33
---
[GitHub] (https://github.com/) là một kho lưu trữ dữ liệu cho các dự án mã nguồn mở dựa trên hệ thống quản lý version [Git] (http://git-scm.com/), và chức năng chính của nó là làm cho việc chia sẻ mã nguồn và cộng tác trên các dự án được dễ dàng hơn. Nhưng nó cũng là một công cụ học tập tuyệt vời. Trong chương sidebar này, chúng ta sẽ lướt qua một vài cách sử dụng GitHub giúp bạn đi suốt cuốn sách *Khám phá Meteor*.
Chương Sidebar này giả định bạn không quen với Git và GitHub. Nếu bạn đã quen thuộc với cả hai, bạn có thể bỏ qua chương này để đi tiếp!
### Commit
Khối làm việc cơ bản của một kho git là *commit*. Bạn có thể tưởng tượng commit như là một bản chụp lại trạng thái của mã nguồn tại một thời điểm.
Thay vì chỉ đơn giản là cung cấp cho bạn mã thành phẩm cho Microscope, chúng tôi đã thực hiện những bản chụp tại mỗi bước cho bạn, và bạn có thể xem tất cả chúng trực tuyến trên GitHub.
Ví dụ, đây là trạng thái của [commit cuối cùng trong chương trước] (https://github.com/DiscoverMeteor/Microscope/commit/chapter3-2):
<%= screenshot "s3-1", "A Git commit as shown on GitHub." %>
Thứ mà bạn đang nhìn thấy là “diff” (viết tắt cho “difference” - thay đổi) của file `post_item.js`, hay nói cách khác là thay đổi được tạo bởi commit hiện tại. Trong trường hợp này, chúng ta đã tạo file `post_item.js` từ trạng thái trống, vì vậy tất cả nội dung của nó được đánh dấu với màu xanh.
Hãy so sánh với một ví dụ từ [commit sau này trong cuốn sách] (https://github.com/DiscoverMeteor/Microscope/commit/chapter13-1):
<%= screenshot "s3-2", "Modifying code." %>
Lần này, chỉ có các dòng đã sửa đổi được đánh dấu màu xanh.
Và tất nhiên, đôi khi bạn không thêm hoặc thay đổi dòng mã, mà [xóa chúng] (https://github.com/DiscoverMeteor/Microscope/commit/chapter12-2):
<%= screenshot "s3-3", "Deleting code." %>
Chúng ta đã được thấy tác dụng của GitHub lần đầu tiên: thấy được sơ lược những thay đổi về code.
### Truy vấn code của một commit
Màn hình hiển thị commit của Git cho chúng ta thấy những thay đổi trong commit đó, nhưng đôi khi chúng ta cũng muốn biết được những file *đã không* thay đổi, để chắc chắn rằng mọi đoạn code làm đúng chức năng của nó trong bước hiện tại.
GitHub cũng có thể giúp chúng ta làm việc này. Khi bạn đang ở trên một trang commit, bấm vào button **Browse code**:
<%= screenshot "s3-5", "The Browse code button." %>
Bây giờ bạn sẽ có quyền truy cập vào repo với *trạng thái của một commit cụ thể*:
<%= screenshot "s3-6", "The repository at commit 3-2." %>
GitHub không cung cấp cho chúng ta nhiều gợi ý về commit mà chúng ta đang theo dõi, nhưng bạn có thể so sánh với hiển thị của nhánh master “bình thường” để thấy được cấu trúc file có sự thay đổi:
<%= screenshot "s3-7", "The repository at commit 14-2." %>
### Truy cập local một commit
Chúng ta vừa thấy làm thế nào để truy cập toàn bộ code của một commit trực tuyến trên GitHub. Nhưng sẽ như thế nào nếu bạn cũng muốn làm điều tương tự ở local? Ví dụ, bạn muốn chạy ứng dụng local tại một commit cụ thể nào đó để thấy được hoạt động của nó tại thời điểm đó.
Để làm được điều này, chúng ta sẽ bắt đầu thực hành lần đầu (trong cuốn sách này) với tiện ích dòng lệnh `git`. Cho người mới bắt đầu, [chắc chắn rằng bạn đã cài đặt Git](http://git-scm.com/downloads). Sau đó **clone** (hay nói cách khác, tải một bản copy về local) repository Microscope với:
~~~bash
git clone git@github.com:DiscoverMeteor/Microscope.git github_microscope
~~~
`github_microscope` ở cuối câu lệnh đơn giản chỉ là tên của thư mục local mà bạn muốn clone ứng dụng vào. Giả định rằng bạn đã có một thư mục `microscope` tồn tại, hãy chọn một tên thư mục khác (không nhất thiết phải trùng tên với repo GitHub).
Hãy `cd` vào repository để chúng ta có thể bắt đầu sử dụng tiện ích dòng lệnh `git`:
~~~bash
cd github_microscope
~~~
Bây giờ khi mà chúng ta đã clone repository từ GitHub, chúng ta đã thực sự tải *toàn bộ* code của ứng dụng, nghĩa là chúng ta đang có code ở commit cuối cùng.
May mắn là, có một cách để quay ngược trở lại và “check out” (kiểm tra lại) một commit cụ thể nào đó mà không ảnh hưởng tới các phần khác. Hãy thử lệnh sau:
~~~bash
git checkout chapter3-1
Note: checking out 'chapter3-1'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at a004b56... Added basic posts list template and static data.
~~~
Git thông báo cho chúng ta biết rằng chúng ta đang ở trạng thái “detached HEAD”, nghĩa là theo Git, chúng ta có thể quan sát commit trong quá khứ nhưng không thể thay đổi chúng. Bạn có thể suy nghĩ nó giống như là một chiếc gậy phù thuỷ điều tra quá khứ thông qua quả cầu chiêm tinh.
(Lưu ý rằng Git cũng có các lệnh cho phép bạn *thay đổi* commit trong quá khứ. Điều này cũng giống như là cỗ máy vượt thời gian trở về một thời điểm trong quá khứ và chạm vào một con bướn, nhưng nó nằm ngoài phạm vi của phần giới thiệu này).
Lý do bạn có thể đơn giản gõ `chapter3-1` là do chúng tôi đã tạo nhãn trước đó cho tất cả commit của Microscope với ký hiệu của từng chương. Nếu không phải vậy, bạn đã cần phải tìm ra **hash** của commit hoặc một định danh đơn trị nào đó.
Một lần nữa, GitHub giúp chúng ta làm việc dễ dàng hơn. Bạn có thể tìm ra hash của commit tại góc dưới bên phải của phần xanh da trời trên ô chứa phần đầu commit, giống như hình sau:
<%= screenshot "s3-4", "Finding a commit hash." %>
Hãy cùng thử với hash thay vì dùng nhãn như trước:
~~~bash
git checkout c7af59e425cd4e17c20cf99e51c8cd78f82c9932
Previous HEAD position was a004b56... Added basic posts list template and static data.
HEAD is now at c7af59e... Augmented the postsList route to take a limit
~~~
Cuối cùng, làm thế nào để chúng ta thoát khỏi việc nhìn vào quả cầu ma thuật và quay trở lại hiện tại? Chúng ta sẽ bảo Git rằng chúng ta muốn điều chỉnh về nhánh **master**:
~~~bash
git checkout master
~~~
Lưu ý rằng bạn cũng có thể chạy lệnh `meteor` tại bất kỳ thời điểm nào, ngay cả khi trong trạng thái “detached HEAD”. Có thể bạn sẽ phải chạy lệnh `meteor update` trước nếu như Meteor phàn nàn về việc thiếu package, vì package không nằm trong Git repo của Microscope.
### Viễn cảnh lịch sử
Sau đây là một kịch bản phổ biến khác: bạn nhìn vào một file và thấy rằng đã có một vài thay đổi so với trước đó. Có điều là, bạn không nhớ ra *khi nào* file đó đã thay đổi. Bạn có thể tìm kiếm từng commit một cho tới khi bạn thấy commit đúng, tuy nhiên cũng có cách dễ dàng hơn bằng việc dùng tính năng **History** của GitHub.
Đầu tiên, truy cập vào file của bạn trên GitHub, sau đó định vị button “History”:
<%= screenshot "s3-8", "GitHub's History button." %>
Bây giờ bạn đã có được danh sách những commit mà ảnh hưởng tới file đó:
<%= screenshot "s3-9", "Displaying a file's history." %>
### Trò chơi đổ lỗi
Để kết thúc, hãy cùng nhìn vào button **Blame**:
<%= screenshot "s3-10", "GitHub's Blame button." %>
Hiển thị gọn gàng này giúp chúng ta thấy được ai đã thay đổi file, và với commit nào (hay nói cách khác, ai để đổ lỗi khi mà mọi thứ không còn hoạt động như ý):
<%= screenshot "s3-11", "GitHub's Blame view." %>
Bây giờ Git - và cả GitHub - đã trở thành một công cụ khá phức tạp, do vậy chúng tôi không hi vọng có thể giải thích tất cả mọi thứ trong một chương đơn lẻ. Thực tế, chúng ta đã chỉ lướt ngắn gọn qua bề nổi của những công cụ này. Nhưng hi vọng, một chút kiến thức này sẽ giúp bạn theo dõi suốt cuốn sách này.