Thắc mắc về Git

Mọi người giải thích giúp em cái mô hình hoạt động của git được không ạ, em không phân biệt được các khái niệm như worrking tree,staging area vs local repository và tại sao trong hình lại có 2 kiểu clone: 1 kiểu clone về working tree còn 1 cái clone về local repository.Em có tra cứu tài liệu trên mạng nhưng mỗi nguồn họ lạ icos các định nghĩa khác nhau

Để dễ hiễu nhé, đầu tiên giả sử ta có 1 repo (repository - kho chứa) trên 1 git server (GIthub, Bitbucket,…), ta có thể nói đó là Remote Repo. Ta muôn đóng góp, chỉnh sửa source code của repo đó thì ta dùng lệnh clone để tạo 1 nhân bản của repo về máy tính của mình. sau khi clone xong ta có được 1 local repo.

Lúc này, remote repo trên server và local repo của máy tính bạn tuy cùng nội dụng file, tài liệu này nọ, nhưng 2 repo này có thể không đồng bộ hóa trong tương lai, nghĩa là nếu remote repo có sự thay đổi gì đó như thêm file, sửa file thì dưới local repo của bạn sẽ không nhận được sự thay đổi này. Để cập nhật những thay đổi từ remote repo, bạn phải dùng lệnh fetch hoặc pull để kéo những thay đổi về cho local repo. Giả sử bạn sửa file A dưới local repo, thì khi kéo về, git nhận thấy file A cũng được chỉnh sửa từ remote repo, nếu bạn dùng fetch thi git sẽ không merge (hợp lại) các thay đổi từ 2 phía, còn pull thì có thể.

Khi bạn làm việc với các file ở local repo nhưng chưa stage (kiểu như đánh dấu, tổ chức) các thay đổi từ các file đó thì có nghĩa các thay đổi này vẫn đang ở working directory. Sau khi stage các thay đổi đó, thì chúng sẽ được đưa qua staging area (khu vực mà các thay đổi sẵn sàng cho việc commit). Cuối cùng thì bạn chỉ cần commit để chốt các thay đổi này rồi dùng lệnh push để đẩy commit mới nhất từ local của mình lên server.

Mình cũng tìm hiểu git được vài tháng nên kiến thức có thể thiếu sót nên rất mong cao nhân khác bổ sung thêm.

2 Likes

Chào em,

Về câu hỏi này anh đã có một bài viết trên trang web của anh, em có thể đọc nhé

Câu hỏi của em thì đọc bài này

Kiến thức nền về Git | Sociss Class

Sau đó để hiểu hơn về cách ứng dụng thì em đọc thêm hai bài này nhé

Tự học GIT từ cơ bản đến nâng cao (bài 1) | Sociss Class

Tự học GIT từ cơ bản đến nâng cao (Bài 2) | Sociss Class

Qua ba bài viết này mà em vẫn chưa hiểu được thì có thể inbox cho anh trên diễn đàn hoặc qua fanpage nhé

Facebook Fanpage : https://www.facebook.com/sociss.edu.vn/

Nguyễn Hữu Quyền.

1 Like

Quản lý mã nguồn với GIT - Sử dụng GIT - ZendVN: https://www.youtube.com/playlist?list=PLv6GftO355Atx3v9_ZAu8hQEiAg-Nj3P3

Ai vẽ cái hình mà khó hiểu quá :disappointed_relieved:

Theo như hình thì các bước như thế này (giả sử ai-đó hoặc bạn đã tạo remote repository trước, ví dụ tạo trên Github, Gitlab, Bitbucket…, sau đó bạn clone về):

  1. Clone từ remote repository về. Working Copy (Working Tree hay Working Directory) là chỉ thư mục git hiện tại bạn đang làm việc. Local Repository có thể coi là 1 “database” do git tạo ra để quản lý file, lịch sử file, commit, branch… (database này được lưu trong thư mục con .git)
    VD:
git clone github.com/abc/repo
cd repo

==> thư mục repo chính là Working Copy. Trong thư mục repo này sẽ có 1 thư mục con là .git, nó nằm trên máy của bạn nên gọi là Local Repository
2. Khi bạn thay đổi file nào đó thì bạn đang làm việc trên Working Copy, những file thay đổi sẽ được liệt kê khi chạy lệnh git status (nếu chạy trên terminal Linux thì nó là các file được tô chữ màu đỏ)
3. Khi muốn áp dụng những thay đổi ở bước 2, thì đầu tiên chạy lệnh git add file, file này sẽ được cho vào 1 vùng gọi là Staging Area (git status => các file chữ màu xanh)
4. Sau khi file đã ở trong Staging Area, chạy lệnh git commit -m ... thì những thay đổi sẽ được ghi vào Local Repository và lưu lịch sử git log.
5. Khi có commit thay đổi ở Local Repository thì chạy lệnh git push sẽ đưa các thay đổi này lên remote repository. Lưu ý: bạn chỉ có thể git push nếu bạn có quyền write vào remote repository.
6. git fetch là download code mới nhất từ remote repository về và git sẽ lưu nó và 1 vùng gọi là FETCH_HEAD, nhưng nó không ảnh hưởng gì đến Working Copy, muốn áp dụng vào local repository và working copy thì sẽ chạy lệnh git merge. git pull = git fetch + git merge

Về cơ bản là thế, nhưng cái flow này chỉ dùng cho team nhỏ 1, 2 người, mọi người đều có quyền ghi vào remote repository, không chia branch. Trong thực tế làm việc tùy theo từng team sẽ quy định flow làm việc, ví dụ (chưa cần đọc cũng được, học về branch đã mới hiểu được).

Tài liệu để pro git:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?