Sử dụng git trong ubuntu
I. GitHub là gì Github http://github.com , còn được gọi là social network dành cho developer đi vào hoạt động tháng 2 năm 2008. Là một dịch vụ sử dụng hệ thống quản lý phân tán GIT giúp người dùng lưu trữ source code cho các dự án. Tính năng của GIT có mọi tính năng của một source control ...
I. GitHub là gì
Github http://github.com , còn được gọi là social network dành cho developer đi vào hoạt động tháng 2 năm 2008. Là một dịch vụ sử dụng hệ thống quản lý phân tán GIT giúp người dùng lưu trữ source code cho các dự án. Tính năng của GIT có mọi tính năng của một source control như SVN và hơn thế nữa.
Github được viết bằng Ruby on Rails. GitHub cung cấp dịch vụ thương mại và cả tài khoản miễn phí cho các dự án nguồn mở. Theo khảo sát của người sử dụng Git vào năm 2009, Github hiện đang là server Git lưu trữ source code phổ biến nhất hiện nay (Ngoài ra, Gitorious http://gitorious.org cũng là server Git hoạt động giống Github được chú ý đến).
439000 developer tạo hơn 1 triệu 350 ngàn repositories là một con số khá ấn tượng, cùng với một số khách hàng lớn của github như Twitter, Facebook, Yahoo … cho thấy tính phổ biến của Github, cũng như cộng đồng lập trình thế giới tín nhiệm nó như thế nào.
II. Cách thức làm việc với GitHub
Làm việc với GitHub nói riêng hay hệ thống GIT nói chung có 2 workflow chính là local workflow và server workflow.
Bạn có thể làm mọi chuyện thay đổi source code ở local, sau khi đã thay đổi xong, bạn sẽ commit nhưng thay đổi đó lên server và bản lên server phải là bản hoàn chỉnh một tính năng nào đó, hoặc fix bug xong, test xong hoặc ít nhất bản đó phải chạy được.
Không được commit code dở dang, chưa qua test lên repository server sẽ làm ảnh hưởng đến các thành viên khác, ngược lại bạn có thể làm điều đó ở repository local (Bạn cũng có thể tạo một branch ở server cho việc commit code dở dang hay tính năng chưa hoàn thành như từng làm với SVN, nó sẽ chiếm space ở server cũng như làm mất thời gian của bạn vào việc tương tác kết nối với server. Vậy tại sao không commit nó lên repository local nhỉ, vừa nhanh thao tác lại không mất space của server.)
Từ repository của github ta có thể theo phương thức của Git tạo bản build cho production site (trên đây cũng là một repository server) bằng cách push thay đổi (đã qua test kỹ càng) lên nó.
Khi tương tác với repository server (cập nhật hay thay đổi) GITHUB đòi hỏi mã chứng nhận “Bạn là ai” thông qua so sánh SSH key ở local của bạn và SSH key trên server tương ứng với account mà bạn đã đăng ký với GITHUB trước đó.
1. Làm việc với repository ở local với 2 command thường dùng là git add và git commit
- git add: add file đã thay đổi vào stage
- git commit: commit các file đã add vào stage lên repository ở local
2. Làm việc với repository ở server github
Sau khi đã code ở local , cuối cùng khi có một bản ổn định và hoàn tất (có thông qua test) ta sẽ quyết định cập nhật nó lên repository server với
- push: push thay đổi từ repository local lên repository server
- fetch: cập nhật thay đổi từ repository server về repository local
- pull/rebase: sao chép source code từ server về local workspace (tương đương checkout của SVN)
III. SSH key
Chúng ta đều biết thông thường để kết nối với server sẽ cần username và password. Với git, để kết nối với server nó chứng thực máy bạn với server bằng ssh key.
ssh key sẽ có 2 key, một private key và một public key. Bạn sẽ tạo cả 2 key trong máy tính của bạn và đưa public key cho server chứa repo mà bạn muốn kết nối vào. Như vậy là máy tính của bạn đã được chứng thực. Sau này mỗi lần bạn lấy code từ server về hoặc đưa code lên server sẽ không cần nhập username và password nữa.
Chẳng may máy tính của bạn chứa repo quan trọng và nếu lỡ một ai đó đánh cắp máy tính của bạn. Bạn không muốn người ta can thiệp và repo của bạn thì chỉ việc lên repo server và xóa cái public key là xong. Ta có thể tao SSH key như sau:
- Khởi động Gitbash
- cd ~/.ssh
- ssh-keygen –t rsa –C “youraddress@email.com” (Bỏ qua phần đặt tên)
- Mở file “id_rsa.pub” trong thư mục “C:Users<Tên>.ssh”, copy nội dung vào trong Github account của bạn trên máy chủ: https://github.com/settings/ssh (Vào Add SSH key)
- Test kiểm tra: ssh –T git@github.com (Nếu nhận được dòng thông báo “Hi username! You’ve successfully authenticated, but Github does not provide shell access.” nghĩa là cài đặt đã thành công.
IV. Các lệnh hay sử dụng trong git
Sau khi Git client được cài đặt và cấu hình đúng, bước tiếp theo là khởi tạo Git trên máy cá nhân của bạn và tạo ra các tương tác thực sự tới Github.
1. Khởi tạo thư mục repo trên máy client (máy của lập trình viên)
- mkdir C:<Tên repo>
- cd <Tên repo>
- git init
2. Kết nối tới Github repo
- git remote add remote_name git@github.com:(Tên repo)
3. Luôn cập nhật nội dung từ server trước khi tải nội dung mới từ client lên
- git pull git@github.com:(Tên repo) master
4. Kiểm tra trạng thái thay đổi
- git status
5. Đưa những file vào danh sách trước khi commit (bỏ qua nếu không có file mới được tạo)
- git add . ( Add tất cả các file có thay đổi)
- git add <đường dẫn file> ( Add 1 file)
6. Commit những thay đổi trước khi push lên server
- git commit -a -m “Thông tin ngắn gọn về thay đổi này” (-a Tất cả thay đổi)
7. Tải lên server nhánh chủa người phát triển
- git push <remote-name> <branch-name>
- Ví dụ : git push abc work
8. Tải lên server nhánh master
- git push -u origin master
9. Xem toàn bộ các nhánh đang có
- git branch -a
10. Tạo nhánh mới
- git branch <tên mới>
11. Chuyển nhánh
- git checkout <tên nhánh>
12. Xóa nhánh
- git branch -d <Tên branch>
V. Ví dụ
Giả sử hiện tại ta đang có branch master là develop, và 1 branch đang phát triển là work trên remote: kieu.
1. Trước khi code 1 phần mới ta cần update code
- git pull origin develop
2. Khi muốn commit code
-
Kiểm tra các thay đổi: git status
-
Kiểm tra 1 file có thay đổi gì?: git diff <đường dẫn file>
-
Add file trước khi commit: git add . ( add all) hoặc git add <file> ( add tường file)
-
Commit file: git commit -m"<comment>"
-
Đưa file đã add lên remote( kieu): git push kieu work
-
Sau đó ta lên github để pull requet yêu cầu merge
3. Khi có nhiều hơn 1 commit cho 1 pull ta cần rebase các commit?
Kiểm tra các commit đã commit : git log --online
-
Ta được như sau:
HEAD~0 33b3d8c backgrou
HEAD~1 e418e5b backgrou
HEAD~2 d72cb5d update rspec
HEAD~3 4668538 fix conversion logs rspec
HEAD~4 38caae6 backgrou
HEAD~5 45d34d6 error page
-
Ta muốn rebase 2 commit đầu tiên ta sử dụng lệnh:
git rebase -i d72cb5d hoặc git rebase -i HEAD~2
-
Thay <pick> commit cần ghép thành <f>. Save và exit.
-
Sau khi xong, nếu đã từng push code lên github.com thì lần này phải push -f
4. Khi muốn lấy 1 commit từ branch A sang branch B
-
Tại branch A ta dùng: git log --online để kiểm tra commit mà lấy ID của commit cần chuyển sang B
fefc202 fb_lg
11d9b91 Merge pull request #856 from username
454b623 Update RSPEC
230f7e4 Update ja.yml
f488266 Merge pull request #854 from username/commit
350320b Conversion New
-
Tại branch B ta dùng lệnh: git cherry-pick 454b623 để đưa commit 454b623 Update RSPEC sang branch B
5. Khi tạo ra các file không mong muốn bạn cần loạt bỏ nó khi commit?
-
Giả sử file: Gemfile là file ta không muốn commit. dùng lệnh sau để loạt bỏ nó khi commit code:
git update-index --assume-unchanged Gemfile