Không phải tất cả các file hay mọi thay đổi xảy ra trên thư mục làm việc đều cần được commit vào repository. Các file mã biên dịch, các file logs, các file tạm thời của môi trường phát triển (chẳng hạn .idea
, .node_modules...
) là các ví dụ điển hình. Chúng ta có thể “bảo” Git đừng track (làm lơ) các file đó, thông qua chức năng gitignore và gitexcule.
Nội dung của bài viết này sẽ trả lời câu hỏi How cho các kỹ thuật:
- Sử dụng gitignore để tránh hành động track các file
- Chỉ bỏ qua các file trên hệ thống hiện tại
- Bỏ qua các file trên tất cả các repository của hệ thống hiện tại
- Nhả bỏ một file đã được commit ra khỏi repository
Sử dụng gitignore để tránh hành động track các file
Tạo các tập tin .gitignore
Tạo một tập tin có tên .gitignore
vào đâu đó trên thư mục làm việc. Bất kỳ file nào được liệt kê vào đây sẽ ngay lập tức được làm lơ khi Git tổ chức staging – điều có nghĩa là các thay đổi sẽ không được đưa vào commit.
touch .gitignore
Git áp dụng .gitignore
vào các file của thư mục mà nó đứng. Mặc dù không có hạn chế nào cả về số lượng lẫn vị trí, chúng ta nên đặt một file .gitignore
duy nhất vào thư mục root của dự án để tránh lộn xộn.
Cấu hình tập tin .gitignore
Sửa .gitignore
như một tập tin text thông thường.
vim gitignore
Nội dung là dấu hiệu nhận diện tên file, phần mở rộng, hay đường dẫn. Bạn có thể sẽ muốn tham khảo tài liệu đầy đủ tại đây.
# Jetbrains IDEs files
*.iml
.idea
# ng project file
.node_modules
.builds
.outs
Commit tập tin gitignore
Sự hiện diện của .gitignore
là đủ để gitignore hoạt động. Nhưng hành động đưa repository giúp lưu tồn lâu dài cũng như chia sẻ cấu hình gitignore với các nhà phát triển khác.
git add .gitignore
git commit
Lờ một tập các file, chỉ trên hệ thống hiện tại
Việc sử dụng gitignore thường kéo theo hành động bổ sung .gitignore
vào repository và chia sẻ với các nhà phát triển khác. Nếu chỉ muốn làm lơ trên máy tính hiện tại, có thể chỉnh sửa tập tin .git/info/exclude
trên repository. Tập tin này có cấu trúc và tác dụng tương tự như .gitignore
, nhưng nó không được chia sẻ với các repository khác,
vim .git/info/exclude
Làm lơ một tập các file, trên toàn bộ các repository của hệ thống
Bạn có thể đặt ở đâu đó một tập tin gitignore có tác dụng trên tất cả các repository của hệ thống hiện tại, sau đó sử dụng lệnh git info
: để khai báo vị trí của file này cho Git:
git config core.excludesfile C:\Users\_\.gitignore_global
Nhả bỏ một tập tin đã được commit ra khỏi repository
Tạm thời nhả bỏ
Với hành động này, bạn tạm thời làm lơ những thay đổi trên một tập tin đã được commit, nhưng không chia sẻ hành động đó với các nhà phát triển khác. Điều này hay xảy ra khi bạn đặt chỉnh sửa cấu hình dự án (các file package.json
, build.gradle
…) khác với những người khác:
git update-index --skip-worktree <file>
Để tiếp tục track tập tin như cũ:
git update-index --no-skip-worktree <file>
Một cách làm khác là chỉ định Git “giả sử” rằng file không hề được thay đổi:
git update-index --assume-unchanged <file>
Trong trường hợp đó, sử dụng câu lệnh sau đây để tiếp tục track tập tin như cũ:
git update-index --no-assume-unchanged <file>
Nhả bỏ vĩnh viễn
Việc liệt kê một tập tin đã được commit từ trước vào .gitignore
là không đủ ý nghĩa để nhả bỏ vĩnh viễn một file.
Các câu lệnh dưới đây bỏ tập tin ra khỏi repository, nhưng không xóa tập tin ra khỏi thư mục hiện hành:
git rm --cached <file>
Sau đó bạn có thể commit thao tác nhả bỏ:
git commit
Cũng như bổ sung tập tin vào .gitignore
, nếu muốn.