Khi bạn thực hiện commit đối với bất kỳ kho lưu trữ Git nào, bạn sẽ chọn các tệp bạn muốn chuyển và thực hiện commit với chúng. Nhưng sẽ có những tệp không cần phải commit, GitIgnore xuất hiện với nhiệm vụ thực hiện việc xác nhận để Git phân loại các tệp. Vậy GitIgnore là gì?
GitIgnore là gì?
GitIgnore là một tệp trong Git giúp chúng bỏ qua các tệp không muốn sử dụng hoặc không muốn theo dõi. Thông qua GitIgnore, bạn có thể gán các tệp tạm thời không muốn nhận commit. Những tệp này không có tác dụng với các nhà phát triển và các dự án khác.
GitIgnore cũng có thể bao gồm các mẫu cho Git nhận biết một phiên bản tổng quát của tệp cần bỏ qua. Ví dụ như tệp *.log để bỏ qua các tệp có phần mở rộng .log.
GitIgnore hoạt động như thế nào?
Trong GitIgnore, mỗi dòng trong một tệp .gitignore chỉ định một mẫu đường dẫn đến tệp. Khi quyết định bỏ qua một tệp, thư mục sẽ theo đường dẫn đã phát hiện và Git thường kiểm tra các mẫu GitIgnore từ nhiều nguồn, theo thứ tự trước sau để có thể loại bỏ cụ thể.
Nguồn ở đây nghĩa là những khoanh vùng trong GitIgnore có thể bị chồng và xen lẫn vào nhau, hay được xác định từ nhiều tệp GitIgnore khác nhau. Git sẽ xem xét điều này và hướng đến GitIgnore thỏa mãn nhiều mẫu kê khai nhất có thể.
Các mẫu được sử dụng trong GitIgnore là gì?
Quá trình sử dụng *.log để bỏ qua các tệp mở rộng .log, được gọi là một mẫu trong tệp .gitignore. Trong một số tình huống, chúng có tùy chọn sử dụng các mẫu. GitIgnore tìm mẫu trong nội dung và thực thi theo mẫu. Một số mẫu được sử dụng như:
- Blank line – Hoạt động như một dấu phân cách chỉ để dễ đọc, không có ý nghĩa kỹ thuật.
- #<line> – Nếu bạn bắt đầu một dòng bằng #, mẫu sẽ được dùng như một nhận xét.
- \ # – Trường hợp này nếu # là một phần của mẫu. Ví dụ, nếu tên thư mục là #Tinohost thì việc chỉ định trực tiếp #Tinohost sẽ được coi là nhận xét, đây được viết là \ #Tinohost.
- <name>/ – Thao tác này sẽ chỉ tìm kiếm trong các thư mục. Ví dụ thư mục Tinohost thì sẽ tìm kiếm chỉ một thư mục có tên Tinohost chứ không phải bất kỳ tệp nào có tên Tinohost.
- **/<name> – Mẫu này sẽ tìm kiếm một thư mục hoặc tên tệp theo <name>. Ví dụ, **/Tinohost, đồng nghĩa với việc Tinohost phù hợp trong tất cả các thư mục.
- <name>/** – Mẫu này phù hợp với mọi thứ bên trong thư mục <name>. Ví dụ, Tinohost/** sẽ tìm kiếm tất cả các thư mục bên trong Tinohost.
Tệp mẫu GitIgnore
GitIgnore có thể sử dụng trong tất cả các ngôn ngữ, phần mềm, công nghệ và công cụ mà bạn đang dùng trực tiếp trên phần mềm Git. Vì vậy, khi một nhà phát triển đang thực hiện dự án của mình trên môi trường phát triển tích hợp (IDE), họ sẽ tạo GitIgnore để tránh commit. Dưới đây là một số tệp mẫu cho bạn tham khảo.
- Tệp mẫu Java GitIgnore: Sử dụng cho một dự án đã phát triển bằng Java
- Tệp mẫu GitIgnore Dot Net (.NET): Sử dụng cho một dự án đã được phát triển trong Dot Net
- Tệp mẫu GitIgnore hoàn thành: Bạn có thể truy cập các tệp mẫu GitIgnore cho các phần mềm, công cụ và ngôn ngữ khác nhau.
Một số quy tắc khi sử dụng GitIgnore
- Bất kỳ dòng nào bắt đầu bằng dấu thăng (#) sẽ là một nhận xét.
- Dùng \ để đối tượng thoát khỏi ký tự đặc biệt.
- Ký tự / có nghĩa là quy tắc chỉ áp dụng cho các tệp và thư mục nằm trong cùng một thư mục.
- Dấu hoa thị (*) có nghĩa là bất kỳ số ký tự nào, bao gồm số 0.
- Dấu chấm hỏi (?) thay thế cho 0 hoặc một ký tự.
- Dấu chấm than (!) chỉ định quy tắc đảo ngược, bao gồm các tệp đã bị loại trừ bởi một mẫu trước đó.
- Các cách dòng trống sẽ bị bỏ qua, bạn chỉ có thể sử dụng chúng để thêm không gian và làm cho tệp dễ đọc hơn.
- Thêm / vào cuối bỏ qua toàn bộ đường dẫn thư mục.
Tệp GitIgnore cục bộ và toàn cục
Cục bộ
Tệp GitIgnore cục bộ được đặt trong thư mục gốc ở kho lưu trữ Git của bạn. Tệp này chỉ hoạt động trên một kho lưu trữ cụ thể và phải được commit với kho lưu trữ đó.
Toàn cục
Tệp GitIgnore toàn cục được đặt ở thư mục gốc và nằm trong thư mục chính của bạn. Tệp này ảnh hưởng đến mọi kho lưu trữ của bạn sử dụng trên máy tính, không cần phải commit với kho lưu trữ.
Nhiều nhà phát triển sử dụng GitIgnore cục bộ trong dự án của họ và rất ít khi sử dụng tệp GitIgnore toàn cục. Lợi thế của GitIgnore toàn cục là việc không cần phải commit sử dụng tệp đó, cũng như thực hiện thay đổi ảnh hưởng đến tất cả các kho lưu trữ của bạn.
GitIgnore mang lại những lợi ích gì?
- Giúp bạn giữ cho kho mã của mình sạch sẽ bằng việc bỏ qua các tệp không mong muốn.
- Giữ cho kích thước kho lưu trữ của bạn luôn được kiểm soát, điều này rất quan trọng khi bạn đang thực hiện những dự án lớn.
- Mọi yêu cầu kiểm soát, đẩy và kéo của bạn được chọn lọc sạch sẽ.
Làm thế nào để sử dụng GitIgnore?
Để giúp bạn quyết định những tệp nào cần thêm vào thư mục GitIgnore, hãy bắt đầu với câu hỏi:
- Tệp có sử dụng hoặc liên quan đến dự án của bạn không?
- Các tệp có được sử dụng bởi những người khác trong cùng nhóm với bạn không?
- Tệp này có phải được tạo ra bởi một quy trình khác không?
Nếu các tệp không được sử dụng bởi dự án hoặc các thành viên khác trong nhóm của bạn, các tệp này có thể bỏ qua. Trong trường hợp tệp được tạo ra bởi một quy trình khác, bạn có thể đưa vào GitIgnore.
Một số tệp phổ biến cần bỏ qua
- OS files: dưới định dạng Text được phát triển bởi ObjectScript.
- Application files: dưới định dạng XML được phát triển bởi Microsoft.
- Language files: dưới định dạng N/A được phát triển bởi N/A.
- Package managers: là một tập hợp các phần mềm dùng để quản lý và tự động hóa việc cài đặt, nâng cấp, gỡ bỏ các phần mềm
- Credentials: Hệ thống thông tin cho phép người dùng truy cập bằng cách đăng nhập tài khoản để dễ dàng hơn trong việc quản lý thông tin và các tài nguyên khác.
- Artifacts: là bất kỳ thứ gì được tạo ra để có thể phát triển một phần mềm.
Trong một số trường hợp, GitIgnore có thể là một giải pháp tốt nhất giúp bạn xử lý các vấn đề về tệp trong dự án. Có thể, khi chưa cần đến, bạn sẽ không nhận thấy lợi ích của GitIgnore, nhưng chúng rất có ý nghĩa với một số nhà phát triển khác. Hy vọng bài viết có thể mang đến cho bạn những kiến thức hữu ích về GitIgnore.
Một số câu hỏi thường gặp liên quan đến GitIgnore
Có thể đưa các tệp bảo mật hay các khóa API vào GitIgnore được không?
Được. Để bảo mật, các tệp khóa bảo mật và khóa API được thêm vào GitIgnore, nghĩa là chúng đều được lưu trữ trong thư mục. Mọi commit đều được ghi lại trong lịch sử thỏa thuận repo của Git. Nếu một khóa được gửi, ngay cả khi bị gỡ xuống thì một bản ghi của khóa vẫn tồn tại.
GitIgnore có ảnh hưởng như thế nào đến dự án?
GitIgnore có mức độ ảnh hưởng lên mọi nhánh file và thư mục trong một dự án. Một dự án trung bình thường chỉ sử dụng một GitIgnore để hoạt động. Đối với các dự án lớn bạn có thể tách GitIgnore vào từng thư mục để quản lý.
Theo dõi các tệp trong Git như thế nào?
Khi bạn đang làm việc với các tệp, GitIgnore cho Git biết tệp nào cần bỏ qua khi commit với dự án. Git sẽ xem mọi tệp và phân loại theo 3 trường hợp.
- Untracked: Tệp thuộc các thay đổi chưa được tổ chức hoặc commit.
- Tracked: Tệp thuộc các thay đổi đã được tổ chức hoặc commit.
- Ignored: Các tệp thuộc trường hợp yêu cầu Git bỏ qua.
Tại sao cần bỏ qua các tệp trong Git?
Có rất nhiều lý do chủ quan lẫn khách quan dẫn đến việc loại bỏ các tệp, một số lý do phổ biến nhất như.
- Các tệp chứa các dữ liệu nhạy cảm.
- Các tệp dành riêng cho hệ thống và không cần tồn tại trên các bản sao của máy.
- Việc loại trừ một số tệp không cần thiết để duy trì các quy tắc và bảo mật của hệ thống.