III. Các thao tác với git và github
===========================
Git
là một phần mềm dùng để quản lý phiên bản của mã nguồn tương tự như SVN
nhưng có nhiều ưu điểm hơn, Git
đang được sủ dụng rộng rãi hiện nay.
Tuy nhiên trong bài viết này, tôi sẽ nói về git một cách "cá nhân" hơn, mang tính chia sẻ những cái tôi hay làm và hướng tới những người là sysadmin. Mong nhận được ý kiến đóng góp của các bạn.
Git
và Github
khác nhau như thế nào?
Lấy ví dụ, bạn có một đoạn script dài 20 dòng, hôm sau bạn tối ưu nó đi, chỉ còn 15 dòng, một ngày khác bạn sửa ở script đó một vài chỗ. Git ghi lại những thời điểm thay đổi đó của bạn và source code của bạn tại thời điểm đó.
Github là một trang web, cho phép bạn lưu source code của mình lên đó. Sự kết hợp hoàn hảo giữa Git và Github mang lại một sự thuận tiện không hề nhỏ cho người dùng. Bạn có thể thay đổi đoạn code của mình mọi lúc mọi nơi mà không sợ bị ghi đè lên hay bị mất dữ liệu do hỏng hóc vì dữ liệu của bạn được lưu cả trên trang web Github và máy cá nhân. Bạn cũng có thể khôi phục được code của mình về một thời điểm bất kỳ nào đó.
Github có bản free và mất phí. Với Github free thì source code của bạn sẽ công khai, có nghĩa là ai cũng có thể xem code của bạn. Nó phù hợp với các phần mềm nguồn mở, và cũng có thể trở thành một blog cá nhân của chính các bạn như các trang blogspot, wordpress,...
Muốn có thể tạo một kho code bí mật của riêng mình thì bạn phải trả phí.
Đối với cá nhân tôi thì github free là quá đủ cho mục đích lưu trữ và chia sẻ thông tin.
Cần phải làm gì để có thể sử dụng Github
?
Tôi chắc chắn rằng một khi bạn đã đọc đến đây thì bạn đã biết thực hiện bước trên như thế nào :)
Markdown
Bạn có thể bỏ qua bước này nếu bạn đã biết hoặc các bạn xác định không sử dụng nó để viết.
Theo cá nhân tôi thì các bạn nên viết bằng Markdown trong Github vì nó sẽ mang lại sự tường minh cho bài viết của bạn.
Bạn chỉ cần bỏ ra khoảng 2h là đã có thể sử dụng ngôn ngữ này như ý muốn.
Sau đó tạo các repo tùy mục đích, clone nó về client và code.
Bước này tôi sẽ hướng dẫn chi tiết hơn ở phần sau.
Ngôn ngữ này khá đơn giản, bạn có thể đọc tại đây để biết cách sử dụng.
Nhưng với tôi, tôi không dùng hết từng ấy thứ cho nên tôi chỉ nhớ một số cái tôi hay dùng, cách tôi dùng như sau:
Tạo một file có tên bất kỳ với đuôi .md. Có thể dùng notepad
, notepad++
, vi
, nano
,... hay bất cứ thứ gì mà bạn muốn.
Một số phương pháp tôi hay sử dụng để viết:
Markdown sử dụng kí tự # để bắt đầu cho các thẻ tiêu đề, có thể dùng từ 1 đến 6 ký tự # liên tiếp. Mức độ riêu đề giảm dần từ 1 đến 6
Tùy mục đích và ý thích bạn có thể sử dụng cách này để thể hiện các chỉ mục khác nhau.
Ví dụ:
# 1.Tiêu đề cấp 1
## 2.Tiêu đề cấp 2
###### 6.Tiêu đề cấp 6
Để chèn hyperlink bạn chỉ cần paste luôn linh đó vào file .md
https://github.com
Hoặc bạn cũng có thể sử dụng cú pháp sau để thu ngắn đường dẫn của link
[Github](https://github.com)
Kết quả là:
Để chèn ảnh thì bạn hãy sử dụng cú pháp sau:
<img src="https://github.com/hocchudong/git-github-for-sysadmin/raw/master/link_anh_cua_ban">
Tôi thường sử dụng công cụ Lightshot để chụp ảnh màn hình và up hình đó lên trang http://i.imgur.com/ để lấy đường dẫn ảnh đưa vào Github
Hai công cụ này khá dễ sử dụng, bạn chỉ cần chụp màn hình bằng Lightshot ấn Ctrl + C để copy và Ctrl + V để paste vào trình duyệt tại trang web http://i.imgur.com/
**từ cần in đậm**
từ cần in đậm
*từ cần in nghiêng*
từ cần in nghiêng
Để bo một đoạn text thì bạn chỉ cần sử dụng cú pháp sau:
`đoạn cần bo`
Kết quả là: đoạn cần bo
Để làm nổi bật một đoạn, chẳng hạn như một đoạn shell hay file cấu hình bạn có thể sử dụng cú pháp như ví dụ sau:
```sh
auto eth0
iface eth0 inet static
ipaddress 10.10.10.10
netmask 255.255.255.0
gateway 10.10.10.1
dns-nameservers 8.8.8.8
```
Kết quả như sau:
auto eth0
iface eth0 inet static
ipaddress 10.10.10.10
netmask 255.255.255.0
gateway 10.10.10.1
dns-nameservers 8.8.8.8
Để sử dụng gạch đầu dòng bạn chỉ cần sử dụng cú pháp sau:
- Gạch đầu dòng thứ nhất
- Thụt với đầu dòng 1
- Thụt với đầu dòng 1
- Gạch đầu dòng thứ hai
- Thụt với đầu dòng 2
- Thụt với đầu dòng 2
Gạch đầu dòng thứ nhất
Thụt với đầu dòng 1
Thụt với đầu dòng 1
Gạch đầu dòng thứ hai
Thụt với đầu dòng 2
Thụt với đầu dòng 2
Bạn có thể sử dụng cú pháp sau để tạo bảng:
| Cột 1 Hàng 1 | Cột 2 | Cột 3| Cột 4 |
|--------------|-------|------|-------|
| Hàng 2 | 2 x 1 | 2 x 2 | 2 x 3 | 2 x 4 |
| Hàng 3 | 3 x 1 | 3 x 2 | 3 x 3 | 3 x 4 |
| Hàng 4 | 4 x 1 | 4 x 2 | 4 x 3 | 4 x 4 |
Kết quả:
Cột 1 Hàng 1 | Cột 2 | Cột 3 | Cột 4 | |
---|---|---|---|---|
Hàng 2 | 2 x 1 | 2 x 2 | 2 x 3 | 2 x 4 |
Hàng 3 | 3 x 1 | 3 x 2 | 3 x 3 | 3 x 4 |
Hàng 4 | 4 x 1 | 4 x 2 | 4 x 3 | 4 x 4 |
Sử dụng trang http://markdownlivepreview.com/ paste vào đó đoạn markdown bạn viết và xem trước để chỉnh sửa cho phù hợp.
Bạn cũng có thể sử dụng những đoạn markdown của người khác đã viết trước để tham khảo.
Như vậy bạn đã có thể trình bày github của mình một cách sáng sủa bằng markdown.
Git là một công cụ để quản lý mã nguồn, nhưng tôi không phải là một coder nên tôi sẽ không sử dụng Git theo cách mà các coder hay sử dụng. Tôi sử dụng git và github để lưu trữ các file cấu hình của mình, các script, viết các bài hướng dẫn, các bản nháp,... Các repo là những nơi tôi phân loại, lưu trữ những thứ bên trên và nó được lưu cả ở máy trạm và ở server github. Để làm việc với repo thì bạn phải hiểu về nó. Một số điều bạn cần biết là:
Ba trạng thái của một repo:
Như hình trên bạn có thể thấy có 3 điểm cần lưu ý:
Working dir: đây là nơi bạn thực hiện các thao tác chỉnh sửa với file mã nguồn của mình, nó có thể là eclipse, netbean, notepad++,...
Stagging area: những sự thay đổi của bạn với file mã nguồn được lưu lại, giống như bạn ấn Save trong một file notepad.
Git directory: nơi lưu trữ mã nguồn của bạn (ở đây là github)
Tương ứng với 3 vị trí này ta có các hành động:
Add: lưu file thay đổi (mang tính cục bộ) - tương ứng với câu lệnh git add
Commit: Ghi lại trạng thái thay đổi tại máy local (ví dụ như bạn có thể ấn Save nhiều lần với file README.md nhưng chỉ khi commit thì trạng thái của lần ấn Save cuối cùng trước đó mới được lưu lại) - tương ứng với câu lệnh git commit
Push: Đẩy những thay đổi từ máy trạm lên server - tương đương lệnh git push
Pull: đồng bộ trạng thái từ server về máy trạm - tương đương lệnh git pull
Với OS là Ubuntu:
apt-get install git
Với OS là Fedora, Centos
yum instal git
Các thiết lập ban đầu:
git config --global user.name "Duc NC"
git config --global user.email nguyencongduc3112@gmail.com
git config --global core.editor vi
git config --list
Liên kết với tài khoản github bằng SSH
ssh-keygen -t rsa
Enter file in which to save the key (/root/.ssh/id_rsa): [Press enter]
Enter passphrase (empty for no passphrase): [Press enter]
Enter same passphrase again: [Press enter]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
Nếu bạn nhập passphrase thì hãy nhớ pass này!
Kết quả:
ls ~/.ssh/
id_rsa id_rsa.pub known_hosts
ssh-agent -s
ssh-add ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub
copy đoạn mã này
Truy cập đường dẫn sau https://github.com/settings/ssh (đảm bảo bạn đã đăng nhập vào github), chọn Add SSH key, đặt tên cho key này tại Title
và paste nội dung vừa copy vào ô Key
Lúc này bạn đã có thể commit lên github tại máy local mà không cần nhập username và password.
Download tại địa chỉ: https://windows.github.com/
Cài đặt bình thường, yêu cầu phải có .NET 4.5
Giao diện của chương trình:
Thêm tài khoản Github:
Click vào tool and options (hình bánh răng cạnh biểu tượng Sync) chọn options, Add account. Khai báo username và password trên github.
Tại mục Configure git thêm Tên và email của mình
Click Update
Tạo một repo mới trên trang github.com
Clone repo đó về bằng một trong các cách sau:
Linux
SSH:
git clone git@github.com:ducnc92/demo1.git
hoặc: git clone git@github.com:ducnc92/demo1.git /opt/demo
để clone vào thư mục /opt/demo
đối với phương pháp này các bạn cần nhập passphrase của ~/.ssh/id_rsa (có thể không cần nếu bạn không đặt passphrase)
HTTPS:
git clone https://github.com/ducnc92/demo1.git
hoặc: git clone https://github.com/ducnc92/demo1.git /opt/demo
để clone vào thư mục /opt/demo
Để lấy các link SSH, HTTPS này ta làm như sau: Click vào các hyperlink HTTPS hoặc SSH rồi click Copy to clipboard.
Ở đây tôi sử dụng lệnh git clone git@github.com:ducnc92/demo1.git
Lúc này trong thư mục hiện tại sẽ có thêm thư mục demo1 chứa các file trong repo trên github.
Chuyển vào thư mục này:
cd demo1/
ls
Lúc này sẽ thấy trong thư mục này có file README.md
. Để sửa file này ta có thể sử dụng bất cứ trình soạn thảo nào, chẳng hạn vi, nano, gedit,...
vi README.md
Thêm vào nội dung như sau:
Xin chao!
Toi la Ducnc.
Tạo một thư mục mới, chẳng hạn tên là script để chứa các script của tôi.
mkdir script
Tạo một script mới trong thư mục đó.
vi script/script1.sh
#!/bin/sh
echo "Hello Python Vietnam"
sleep 10
bằng cách tương tự các bạn có thể tạo thêm nhiều thư mục, file hướng dẫn, cấu hình, script,... tùy ý
Để thực hiện hành động add
ta sử dụng lệnh sau
git add README.md để
add
file README.md
hoặc git add *
để add tất cả các file hiện có.
Để thự hiện hành động commit file README.md ta thực hiện lệnh
git commit README.md
hoặc git commit *
để commit tất cả.
ta nên thêm tham số -m để ghi lại một comment cho hành động đó
git commit README.md -m "ducnc sua doi"
Lúc này các thay đổi của bạn đã được lưu lại trên máy cục bộ. Để đồng bộ lên server Github ta thực hiện lệnh:
git push origin master
=> nhập passphrase (nếu bạn đặt passphrase ở mục 1.1.) với phương pháp clone ssh hoặc nhập username, password nếu clone bằng https
Lúc này trở lại trang github.com và xem repo script
lúc đầu sẽ thấy các commit của ta đã được đẩy lên.
Một cách khác nếu bạn không muốn thực hiện clone về máy như bước trên thì bạn có thể làm như sau:
Tạo một repo mới trên github.com mà không tạo file README.md (giả sử ở đây là repo demo2)
Tại máy local tạo một thư mục để chứa repo mới này. Ví dụ:
mkdir /opt/demo2
cd /opt/demo2
git remote add origin $git-url
trước khi push. Tham khảo ví dụ sau:vi README.md
git add README.md
git commit README.md
hoặc git commit README.md -m noi dung
git remote add origin git@github.com:ducnc92/demo2.git
git push origin master
Sau đó nhập passphrase(nếu cần) hoặc username + password (nếu sử dụng SSH)
Giả sử trên server github của bạn có những thay đổi mà máy local chưa cập nhật những thay đổi đó. Bạn thực hiện lệnh sau:
cd cd /opt/demo1/
git pull
Tạo repo trên github.com tự như mục 2.1.1.
Tạo repo bằng phần mềm Github
Other
. Chọn chuột phải vào repo đó và chọn Open in Explorer
để sửa nội dung của repo này.Publish this repository
và thực hiện như hình sau. Chú ý cần chọn Organization đặt repo này.Click vào dấu cộng, chọn tab Clone, lựa chọn tổ chức mong muốn và chọn repo cần clone
Để chỉnh sửa nội dung của repo này ta chọn chuột phải vào nó và chọn Open in Explorer
Lúc đó chương trình Windows Explorer sẽ mở ra thư mục chứa repo của github, bạn có thể chỉnh sửa các file trong này, tạo xóa thư mục,... một cách bình thường.
Trở lại với chương trình Github ta sẽ thấy dòng uncommited changes
tại repo ta vừa sửa. Bạn hãy điền vào đó comment và ấn commit to master
Lúc này sự thay đổi của bạn với mã nguồn đã được ghi lại trên máy local, để đồng bộ nó lên server github bạn hãy ấn vào biểu tượng Sync
ở góc trên cùng bên phải.
Sau khi đồng bộ xong, quay trở lại repo trên trang github.com.
Để đồng bộ những thay đổi trên github.com về máy local (pull) ta cũng click vào biểu tượng Sync
như bên trên.
Để tạo một nhóm cho nhiều người cùng làm việc ta làm như sau:
Truy cập URL: https://github.com/settings/organizations, chọn New Organizations
Đặt tên và email cho tổ chức
Tại mục Choose the organization’s plan
chọn Open Source để miễn phí, nhưng lúc này các Repo trong tổ chức sẽ là public.
Lúc này vào trang cá nhân của bạn sẽ thấy tại mục Organizations có tổ chức mới vừa tạo. Để cấu hình tổ chức này ta click thẳng vào nó.
Ở đây tôi sẽ tạo một team mới như hình sau:
Các member của team này có quyền write với các repo của team.
Với 3 mức: Read Access, Write Access, Admin Access Github cho phép chúng ta phân quyền tới các thành viên của nhóm.
Để mời một người dùng khác vào team, ta click vào team đó và search tên của người dùng cần tìm
Sau đó hệ thống sẽ yêu cầu bạn nhập password để xác thực, nếu thành công, một email xác nhận sẽ được gửi đến người được mời và người này sẽ xác nhận có tham gia vào tổ chức hay không.
Để tạo một repo cho tổ chức, ta chỉ cần click vào tổ chức đó, sau đó chọn Create new Repostory
. Các hành động clone, add, commit,... làm như bình thường.
Sẽ cập nhật và bổ sung sau
Giả sử bạn đang theo dõi repo của tôi và thấy có một số chỗ cần sửa đổi, bạn có thể comment ý kiến của mình vào Repo đó. Sau đó người quản trị sẽ xem xét, thay đổi và trả lời bạn.
Để làm việc này bạn cần vào repo đó, click vào Issue
. Ví dụ như hình sau:
Sau đó chọn New issue
(màu xanh) để tạo một issue mới.
Lúc này tại Repo của người quản trị sẽ thấy một Issue mới, người quản trị có thể click vào Issue này để xem, sau đó xem xét sửa đổi, comment lại. Khi sửa đổi hoàn tất thì sẽ đóng issue đó lại.
Bằng cách tạo issue, bạn có thể đăng các câu hỏi, thắc mắc của mình cho chủ của repo đó.
Bài viết trên tôi tổng hợp lại những kiến thức thu được khi sử dụng git và github cho công việc của tôi (sys admin), hi vọng nó giúp các bạn một phần nào đó.
Chắc chắn bài viết còn có nhiều thiếu sót, mong các bạn thông cảm và gửi feedback cho tôi để hoàn thiện thêm.
Liên lạc của tôi:
Email: nguyencongduc3112@gmail.com
Skype: khong_giong_ai
Xin chân thành cảm ơn!