Hướng dẫn cơ bản về git cho người mới bắt đầu


Git là gì? Tại sao lại sử dụng git?

Vào 1 ngày đẹp trời, 2 anh A và B cùng bắt tay vào thực hiện 1 dự án (xây dựng 1 website eCommerce cho khách hàng chẳng hạn). Tất nhiên, khối lượng công việc khá nhiều nên 2 người chia nhau làm các chức năng hay feature cho dự án đó. Bạn cứ thử tưởng tượng mà xem, anh A viết code rồi gửi cho anh B, anh B viết code rồi gửi cho anh A, vậy bạn nghĩ họ sẽ làm thế nào để có thể có được code của nhau để tiếp tục phát triển dự án. Có thể họ sẽ gửi file qua email hay lên paste code lên đâu đó rồi share link cho nhau ?? Lúc đó nảy sinh 1 vấn đề, giả sử anh A vô tình viết sai code dẫn đến phần mềm bị lỗi, gỡ lỗi mãi chưa được hoặc chỉ đơn giản là quay lại đoạn code trước mà anh ta thấy tối ưu hơn chẳng hạn thì giờ làm thế nào? Chắc chắn là không được và cứ thế, 2 người lại tiếp tục xây dựng lại tính năng đó và tiếp tục gửi code cho nhau như vậy !


Tiến hành cài đặt git

1. Trên Linux:

2. Trên Window:


1 số thao tác cơ bản khi sử dụng Git - Github

git config --global user.name "Your name"
git config --global user.email "youremail@gmail.com"
1. Các thao tác cơ bản:
mkdir test_repo  # lệnh tạo thư mục
cd test_repo  # truy cập vào thư mục test_repo
git init

Lệnh này sẽ khởi tạo 1 thư mục .gitbên trong thư mục làm việc cuả bạn, là nơi chứa các thiết lập về git cũng như thông tin về kho chứa. Bạn có thể thấy 1 thông báo rằng đã khởi tạo 1 kho chứa thành công

(venv) ╭─phanhoang@phanhoang-PC ~/workspace
╰─➤  mkdir test_repo
(venv) ╭─phanhoang@phanhoang-PC ~/workspace
╰─➤  cd test_repo
(venv) ╭─phanhoang@phanhoang-PC ~/workspace/test_repo
╰─➤  git init
Initialized empty Git repository in /home/phanhoang/workspace/test_repo/.git/
(venv) ╭─phanhoang@phanhoang-PC ~/workspace/test_repo  ‹master›
╰─➤  ls -a
.  ..  .git
(venv) ╭─phanhoang@phanhoang-PC ~/workspace/test_repo  ‹master›
╰─➤  touch README.md
(venv) ╭─phanhoang@phanhoang-PC ~/workspace/test_repo  ‹master*›
╰─➤  git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        README.md

nothing added to commit but untracked files present (use "git add" to track)
(venv) ╭─phanhoang@phanhoang-PC ~/workspace/test_repo  ‹master*›
╰─➤  git add README.md
(venv) ╭─phanhoang@phanhoang-PC ~/workspace/test_repo  ‹master*›
╰─➤  git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   README.md
(venv) ╭─phanhoang@phanhoang-PC ~/workspace/test_repo  ‹master*›
╰─➤  git commit -m 'add README.md'
[master (root-commit) 43e1e93] add README.md
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md
(venv) ╭─phanhoang@phanhoang-PC ~/workspace/test_repo  ‹master›
╰─➤  git status
On branch master
nothing to commit, working directory clean
commit 43e1e9398960d2d686bae38a05c269152228b157
Author: huyhoang17 <hoangphan0710@gmail.com>
Date:   --- --- - --:--:-- ---- +0700

    add README.md
(END)

2. Thao tác với Github:

╰─➤  ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/phanhoang/.ssh/id_rsa): /home/phanhoang/.ssh/id_rsa_test
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/phanhoang/.ssh/id_rsa_test.
Your public key has been saved in /home/phanhoang/.ssh/id_rsa_test.pub.
The key fingerprint is:
4a:8d:bc:ec:27:5a:c6:01:da:14:a6:61:57:7b:c3:f5 phanhoang@phanhoang-PC
The key's randomart image is:
+--[ RSA 2048]----+
|  o +..   .      |
| . = . o . .     |
|  . o . +   E    |
|   + o + .       |
|  . . = S        |
|     + +         |
|      B          |
|     +. .        |
|    ...o         |
+-----------------+
(venv) ╭─phanhoang@phanhoang-PC ~
╰─➤  cat /home/phanhoang/.ssh/id_rsa_test.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC05XxMT7Nu9X//DrANSxMMP/HcWFD6ntBX0VkXqplIkq9BmHqQr4c6rclfI5P8A8ZMKaNHiH91OjdbJYqkYvW4tvvHl3qDVcc1/5q81iW3MZeCmCroa0Z7cTCD6eHVZcXoHGq/sZ2BBirBckdoKBb9/chJdEzvEPhpQ9ar3SiQNuOuVuiObkgg67sUuZj/2VazV9usVp962aSxrsnwEesTgnIqkLbErHCAaYgaPz4RsH+xYHwogRXF+PzAFF90ec0hPpJCcktKuaiP80JmMR3nPBgnFfu0/ZmgeO28FvA5nkxJTYN+4hQI4bEC6ZCums0MpX7wfSD/iKsRwTctOZMR phanhoang@phanhoang-PC

Add SSH key

Create Repo

git remote add origin `tên đường dẫn đến repo của bạn`
git clone `tên đường dẫn tới repo của bạn`
(venv) ╭─phanhoang@phanhoang-PC ~
╰─➤  git clone git@github.com:huyhoang17/test.git
Cloning into 'test'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
(venv) ╭─phanhoang@phanhoang-PC ~
╰─➤  ls | grep test
test
(venv) ╭─phanhoang@phanhoang-PC ~/test  ‹master›
╰─➤  cd test
(venv) ╭─phanhoang@phanhoang-PC ~/test  ‹master›
╰─➤  echo "Hello Git, Github" >> README.md
(venv) ╭─phanhoang@phanhoang-PC ~/test  ‹master*›
╰─➤  ls
README.md
(venv) ╭─phanhoang@phanhoang-PC ~/test  ‹master*›
╰─➤  git add README.md
(venv) ╭─phanhoang@phanhoang-PC ~/test  ‹master*›
╰─➤  git commit -m "add README.md"
[master (root-commit) 026a01e] add README.md
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
(venv) ╭─phanhoang@phanhoang-PC ~/test  ‹master›
╰─➤  git status
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

nothing to commit, working directory clean
(venv) ╭─phanhoang@phanhoang-PC ~/test  ‹master›
╰─➤  git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 237 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:huyhoang17/test.git
 * [new branch]      master -> master

BINGO !

(venv) ╭─phanhoang@phanhoang-PC ~/test  ‹master›
╰─➤  git pull
Updating 026a01e..0e3215d
Fast-forward
 abc.py | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 abc.py
(venv) ╭─phanhoang@phanhoang-PC ~/test  ‹master›
╰─➤  ls
abc.py  README.md

Phụ lục