.gitignore使用指南
目錄
- 什么是.gitignore
- 為什么需要.gitignore
- 如何創建.gitignore文件
- .gitignore文件的語法規則
- 忽略單個文件
- 忽略目錄
- 忽略特定類型的文件
- 不忽略特定文件或目錄
- 遞歸匹配
- 示例.gitignore文件
- 注意事項
- 更多特殊場景匹配規則
- 忽略多個特定后綴的文件
- 忽略特定目錄下的所有隱藏文件
- 跨平臺使用差異
- 路徑分隔符差異
- 大小寫敏感性差異
- 忽略特定前綴的文件
- 忽略特定后綴的文件
- 與其他工具集成
- 與IDE集成
- 與持續集成工具集成
- 更復雜的匹配規則
- 忽略特定目錄下的特定文件
- 忽略特定目錄下的所有文件
- 不同項目類型的最佳實踐
- Python項目
- Java項目
- JavaScript項目
- Go項目
- C++項目
- 更復雜的匹配規則
- 忽略特定目錄下特定后綴的文件
- 忽略特定目錄下特定前綴的文件
- 忽略特定目錄下特定后綴和前綴的文件
什么是.gitignore
.gitignore
是一個文本文件,用于告訴Git哪些文件或目錄在版本控制中應該被忽略。當你執行 git add
命令時,Git會參考 .gitignore
文件的內容,不會將其中指定的文件添加到暫存區。
為什么需要.gitignore
在項目開發過程中,有些文件是不需要進行版本控制的,例如:
- 編譯生成的文件:如
.class
、.pyc
等。 - 日志文件:如
.log
文件。 - 臨時文件:如
.tmp
文件。 - 依賴文件:如
node_modules
目錄。
使用 .gitignore
可以避免將這些文件添加到版本庫中,減少版本庫的大小,同時也可以避免不必要的文件沖突。
如何創建.gitignore文件
在項目根目錄下創建一個名為 .gitignore
的文件,可以使用以下命令:
touch .gitignore
.gitignore文件的語法規則
忽略單個文件
要忽略單個文件,只需在 .gitignore
文件中寫入該文件的名稱,例如:
test.txt
這將忽略項目根目錄下的 test.txt
文件。
忽略目錄
要忽略整個目錄,在目錄名稱后面加上斜杠 /
,例如:
logs/
這將忽略項目根目錄下的 logs
目錄及其所有子目錄和文件。
忽略特定類型的文件
可以使用通配符 *
來忽略特定類型的文件,例如:
*.log
這將忽略所有以 .log
結尾的文件。
不忽略特定文件或目錄
如果你想在忽略某個目錄的同時,不忽略其中的某個文件或子目錄,可以使用 !
符號,例如:
logs/
!logs/important.log
這將忽略 logs
目錄下的所有文件,但不忽略 logs/important.log
文件。
遞歸匹配
使用 **
可以進行遞歸匹配,例如:
**/*.log
這將忽略項目中所有目錄下的 .log
文件。
示例 .gitignore
文件
以下是一個常見的 .gitignore
文件示例,適用于Python項目:
# Byte-compiled / optimized / DLL files__pycache__/*.pyc*.pyo*.pyd# C extensions*.so# Distribution / packagingdist/build/*.egg-info/# Logs and databases*.log*.sql*.sqlite# IDEs and editors.idea/.vscode/*.iml
注意事項
- .gitignore 文件只對未被跟蹤的文件有效:如果一個文件已經被Git跟蹤,即使在
.gitignore
文件中添加了該文件,Git仍然會繼續跟蹤它。如果你想忽略已經被跟蹤的文件,可以使用git rm --cached
命令將其從版本庫中移除。 - .gitignore 文件的位置:
.gitignore
文件通常放在項目根目錄下,但也可以在子目錄中創建.gitignore
文件,子目錄中的.gitignore
文件只對該子目錄及其子目錄有效。 - .gitignore 文件的優先級:子目錄中的
.gitignore
文件會覆蓋父目錄中的.gitignore
文件。
更多特殊場景匹配規則
忽略多個特定后綴的文件
可以使用 |
結合正則表達式來忽略多個特定后綴的文件,需要在 .gitignore
文件中使用正則表達式模式,同時要確保 Git 支持正則表達式模式匹配。例如:
*.(log|tmp|bak)
這將忽略所有以 .log
、.tmp
或 .bak
結尾的文件。
忽略特定目錄下的所有隱藏文件
可以使用 /
結合特定目錄和隱藏文件的前綴 .
來忽略特定目錄下的所有隱藏文件,例如:
/logs/.*
這將忽略 logs
目錄下的所有隱藏文件。
跨平臺使用差異
路徑分隔符差異
在 Windows 系統中,路徑分隔符是反斜杠 \
,而在 Linux 和 macOS 系統中,路徑分隔符是正斜杠 /
。在 .gitignore
文件中,應該始終使用正斜杠 /
作為路徑分隔符,因為 Git 會自動處理不同系統的路徑分隔符差異。例如:
logs/
無論是在 Windows、Linux 還是 macOS 系統中,這個規則都會正確忽略 logs
目錄。
大小寫敏感性差異
在 Windows 和 macOS 系統中,文件系統默認是大小寫不敏感的,而在 Linux 系統中,文件系統默認是大小寫敏感的。這意味著在 .gitignore
文件中,大小寫的匹配規則可能會有所不同。例如:
Test.txt
在 Windows 和 macOS 系統中,這個規則會忽略 Test.txt
、test.txt
等文件,而在 Linux 系統中,只會忽略 Test.txt
文件。如果需要在不同系統中保持一致的匹配規則,建議在 .gitignore
文件中使用一致的大小寫。
忽略特定前綴的文件
可以使用 *
結合特定前綴來忽略以特定字符串開頭的文件,例如:
prefix_*
這將忽略所有以 prefix_
開頭的文件。
忽略特定后綴的文件
除了使用 *
忽略特定后綴的文件,還可以使用 ?
來匹配單個字符,例如:
*.log?
這將忽略所有以 .log
開頭,后面跟一個任意字符的文件。
與其他工具集成
與IDE集成
許多集成開發環境(IDE)可以自動識別 .gitignore
文件,并在文件瀏覽和搜索中排除被忽略的文件。例如,在IntelliJ IDEA中,被 .gitignore
文件忽略的文件會以灰色顯示,并且不會出現在項目搜索結果中。
與持續集成工具集成
在持續集成(CI)環境中,.gitignore
文件可以幫助排除不必要的文件,減少構建時間和資源消耗。例如,在Jenkins或GitLab CI/CD中,構建過程會自動遵循 .gitignore
文件的規則,只處理需要的文件。
更復雜的匹配規則
忽略特定目錄下的特定文件
可以使用 /
結合特定目錄和文件名來忽略特定目錄下的特定文件,例如:
/logs/*.log
這將忽略 logs
目錄下的所有 .log
文件。
忽略特定目錄下的所有文件
可以使用 /
結合特定目錄來忽略特定目錄下的所有文件,例如:
/logs/
這將忽略 logs
目錄下的所有文件。
不同項目類型的最佳實踐
Python項目
# Byte-compiled / optimized / DLL files
__pycache__/
*.pyc
*.pyo
*.pyd# C extensions
*.so# Distribution / packaging
/dist/
/build/
*.egg-info/# Logs and databases
*.log
*.sql
*.sqlite# IDEs and editors
.idea/
.vscode/
*.iml
Java項目
# Compiled class file
*.class# Log file
*.log# BlueJ files
*.ctxt# Mobile Tools for Java (J2ME)
.mtj.tmp/# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
JavaScript項目
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
nyan-debug.log*# Runtime data
pids
*.pid
*.seed
*.pid.lock# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov# Coverage directory used by tools like istanbul
coverage# nyc test coverage
.nyc_output# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt# Bower dependency directory (https://bower.io/)
bower_components# node-waf configuration
.lock-wscript# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release# Dependency directories
node_modules/
jspm_packages/# TypeScript v1 declaration files
typings/# TypeScript cache
.tscache
Go項目
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib# Test binary, built with "go test -c"
*.test# Output of the go coverage tool, specifically when used with LiteIDE
*.out
C++項目
# Compiled Object files
*.slo
*.lo
*.o
*.obj# Precompiled Headers
*.gch
*.pch# Compiled Dynamic libraries
*.so
*.dylib
*.dll# Fortran module files
*.mod
*.smod# Executables
*
更復雜的匹配規則
忽略特定目錄下特定后綴的文件
可以使用 /
結合特定目錄和后綴來忽略特定目錄下特定后綴的文件,例如:
/logs/*.log
這將忽略 logs
目錄下的所有 .log
文件。
忽略特定目錄下特定前綴的文件
可以使用 /
結合特定目錄和前綴來忽略特定目錄下特定前綴的文件,例如:
/logs/prefix_*
這將忽略 logs
目錄下所有以 prefix_
開頭的文件。
忽略特定目錄下特定后綴和前綴的文件
可以使用 /
結合特定目錄、前綴和后綴來忽略特定目錄下特定后綴和前綴的文件,例如:
/logs/prefix_*.log
這將忽略 logs
目錄下所有以 prefix_
開頭且以 .log
結尾的文件。
以上就是 .gitignore
文件的基本使用指南以及更多特殊匹配規則和不同項目類型的最佳實踐等內容,希望對你有所幫助。