01/10/2018, 13:28
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
Bài liên quan
Để 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.
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.
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á
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ề):
.git
)VD:
==> thư mục
repo
chính là Working Copy. Trong thư mụcrepo
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 Repository2. 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ềnwrite
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ệnhgit 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: