Cách viết Gitignore Pattern hiệu quả
December 15, 2021
## 1) First Slash vs Last Slash (`/{pattern}` vs `{pattern}/`)
Ký tự "/" (slash) ở đầu và cuối pattern thường dễ bị chúng ta bỏ sót khi khai báo các pattern. Việc CÓ và KHÔNG có khai báo các slash này sẽ cho các kết quả ignore khác nhau.
* First Slash - ký tự Slash đầu pattern, nếu có nó, ý nghĩa là pattern này tính từ ROOT DIRECTORY (directory chứa `.gitignore`, thường là root của repository). Nếu pattern không có Root Slash thì git sẽ ignore tất cả path thoả điều kiện CONTAIN pattern này ở vị trí bất kỳ của path.
* Last Slash - ký tự Slash cuối pattern, nếu có nó, ý nghĩa là pattern này apply cho DIRECTORY. Nếu không có slash cuối này, pattern sẽ apply cho cả FILE và DIRECTORY.
Đến đây, các bạn sẽ nhận ra rằng, tuy thỉnh thoảng chúng ta không để ý đến những slash này, nhưng trường hợp KHÔNG thường có kết quả cover luôn trường hợp CÓ sử dụng slash, dẫn đến kết quả ignore VÔ TÌNH vẫn đúng ý đồ tác giả.
## 2) Directory Pattern `{**}/` Ignore file với path có chứa 0 hay nhiều sub-directory chỉ định. Dấu ** chỉ dùng để match directory. `{sub}/` Ignore file với path có chứa sub-directory chỉ định.
## 3) Name Pattern (`*, ?, [09], [az]`) Name Pattern có thể sử dụng độc lập hoặc kết hợp với Directory Pattern để thoả mãn cả 2 yêu cầu về directory và file name. Name-Pattern gồm các pattern dưới đây. * `{name.type}` ignore file có name và type chỉ định. * Dấu * đại diện cho nhiều ký tự, ví dụ: * `*.{type}` ignore file có type chỉ định. * `{name}.*` ignore file có name chỉ định. * `{name}*.{type}` ignore file với name có postfix chỉ định, type xác định. * Dấu ? đại diện cho 1 ký tự bất kỳ. * [09] đại diện cho 1 ký tự bất kỳ từ 0 --> 9. * [az] đại diện cho 1 ký tự bất kỳ từ a --> z.
Lưu ý: * Dấu (*) có thể sử dụng cho File Name và Directory Name, trong khi (**) chỉ dùng cho Directory Name. * Các Regex (?, [09], [az]) chỉ sử dụng được cho File Name. * Cách và vị trí sử dụng các regex (?, [09], [az]) trong pattern tương tự dấu (*).
## 4) Negative Ignore (`!`) Dấu (!) dùng để cho phép commit các case đặc biệt nếu trước đó đã bị ignore.
// SAMPLE 1
*.log # ignore tất cả file *.log
!important.log # cho phép commit pattern important.log
// SAMPLE 2
debug[09].log # ignore debug0.log, debug1.log,..., debug9.log
debug[!13].log # cho phép commit pattern debug1.log, debug2.log, debug3.log.
// SAMPLE 3
debug[09].log # ignore 0,1,2,3,4,...,9
debug[!13].log # cho phép 1,2,3
debug2.log # ignore 2 (pattern khai báo sau có độ ưu tiên cao hơn)
# => KẾT QUẢ CUỐI: sẽ ignore 0,2,4,5,...9
## 5) Sample
// ignore file has specific extension *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar // ignore files by specific directory's name node_modules/ build/ xcuserdata/ ## XCode's User settings // ignore file by specific name, directory's name. // In fact, if you make file with name .npm or .env, Git also ignore them. .npm .env // ignore file in specific directory from ROOT. /.npm/ // ignore file's name with "png" postfix and dir-path with "fastlane/screenshots/" fastlane/screenshots/**/*.png




Office
Benefit & Welfare
Event
Training