# GIT thật dễ, dùng với VS code càng dễ hơn!
(*Lưu hành nội bộ - dành cho non-technical team*)
Mình sẽ học những nội dung sau
- Git là gì
- Lí do phải sử dụng git
- Nó hoạt động như thế nào
- Làm việc nhóm với các thành viên trong team như thế nào
- Cơ bản về Github
Kết quả mong muốn
- Có thể sử dụng git để quản lý các nội dung trong công việc
- Chia sẻ các nội dung công việc với các thành viên khác bằng git
---
## Git là gì?
Git hiểu một cách đơn giản là ứng dụng quản lý các file và cung cấp các khả năng để làm việc chia sẻ giữa nhiều người.
---
## Tại sao chúng ta cần git?
- Vì nó lưu được lịch sử đã được chỉnh sửa, đánh dấu các version dễ dàng
- Vì nó giúp các bạn chia sẻ với những người trong team dễ hơn, chỉnh sửa, cập nhật nhanh chóng giữa các member
***Tác dụng phụ**
Dễ dàng giấu các thông tin bí mật đối với những người khác, đặc biệt đối với những người không biết gì về git
- Lưu thông tin người yêu cũ trong máy mà không sợ bị phát hiện
- Lưu các link film hay về cuộc sống mà không sợ ai phát hiện
- Và rất nhiều usecase khác tùy từng trường hợp cụ thể với từng người.
Các bạn sẽ được hướng dẫn đầy đủ ở phần thực hành*

---
## Git hoạt động như thế nào?
### Git workflow
#### Sơ đồ

**Giải thích**
*Untracked*: file chưa được theo dõi/quản lý bởi git. Những file này sẽ không có tác dụng gì khi thực hiện các thao tác với git. Là những file mới tạo, hoặc những file trước đó đã được thêm vào git và bị xóa đi
*Tracked*: File đã được thêm vào git và được quản lý bởi git, mọi thay đổi trên file đều được git ghi lại với 3 trạng thái sau:
- *Staged*: Những file đã được sẵn sàng cho việc đánh version
- *Committed*: Những file đã được đánh version, và không có sự thay đổi nào
- *Modified*: Những file đã được thay đổi sau khi đã được đánh version trước đó.
*Việc đánh version còn được biết đến với hành động `commit` các thay đổi trên các file ở staged*
#### Thực hành git với VS code
1. Tạo Thư mục `training`, và mở bằng ứng dụng VS Code
2. Mở ứng dụng terminal trong VS Code, vào đường dẫn của thư mục và khởi tạo git để quản lý thư mục bằng lệnh `git init`
3. Mở thư mục bằng VS code
Quan sát sự thay đổi trạng thái của các file
- Tạo file `demo.md` với có nội dung `Toi dang hoc git`
- File vừa tạo đang có trạng thái nào?
- Add file `demo.md` vào git
- Quan sát file đang ở trạng thái nào?
- Tạo một file khác tên `demo-1.md` có nội dung `Git that de`
- Quan sát file mới tạo đang ở trạng thái nào?
- Trạng thái của file demo và demo-1 có gì khác nhau?
- Tiến hành commit:
- Sự thay đổi trạng thái của 2 file ntn?
- Tiến hành commit file `demo-1.md`
- Chỉnh sửa file `demo-1.md` bằng cách thêm 1 dòng nữa, có nội dung `Toi da biet commit`
- Quan sát trạng thái của file vừa được thay đổi
- Tiến hành tạo file `demo-2.md` có nội dung `Git de hoc qua troi`
- Quan sát xem trạng thái file vừa tạo ntn?
- Tiến hành add các file demo-1, demo-2 vào staged
- Commit các file vừa được add vào staged

Tổng hợp các thao tác được hỗ trợ bởi VS code
---
## Làm việc nhóm
### Nhánh/Branch
**Mục đích**: Tránh việc nhân bản thư mục để chỉnh sửa, tránh thay đổi các nội dung đang có. Chúng ta có kĩ thuật quản lý các nhánh.
Các team member có thể dễ dàng phát triển nội dung nhưng không xung đột với các member khác
#### Các thao tác với nhánh
- Tạo nhánh
[Video hướng dẫn tạo nhánh](https://share.getcloudapp.com/jkuD4dkn)
- Chuyển sang nhánh khác
[Video hướng dẫn chuyển nhánh](https://share.getcloudapp.com/6quPYK47)
#### Thực hành với nhánh
- Tạo nhánh `nyc-group`
- Chỉnh sửa file demo-2.md
- Xóa file demo.md
- Tạo file `ncy1-memory.md` có nội dung: `Em la nguoi yeu dau tien, da trang, mat xinh`
- Tạo file `ncy2-memory.md` có nội dung: `Em la nguoi con gai diu dang, de thuong`
- Commit sự thay đổi của các file trên
- Chuyển qua nhánh `master` và quan sát xem sự thay đổi các file ở trên.
- Chuyển về nhánh first-branch và quan sát sự thay đổi của các file
---
## Bài tập về nhà
- Tiếp tục sử dụng thư mục `git-training`
- Tạo nhánh mới từ `master`, với tên `git-knowledge`
- Tạo một file có tên: `git-basic-part-1.md`, quan sát trạng thái của file sau khi tạo
- Commit để đánh version file với nội dung: `add file git basic`
- Bổ sung nội dung tóm tắt về git mà mọi người đã được học hôm nay vào file, quan sát trạng thái của file sau khi
- Commit thay đổi với nội dung: `basic git`
- Tải sơ đồ trạng thái của git về thư mục git
- Chỉnh sửa file thêm cảm nhận buổi học vào file ở trên
- Commit thay đổi của cả 2 fike với nội dung: `add feeling when learning git and git diagram`
- Chuyển qua lại giữa các nhánh để quan sát sự thay đổi của file
- Mở thư mục git-training bằng ứng dụng `Finder` trên mac để quan sát sự thay đổi khi chuyển qua lại giữa các nhánh