【SVN】设置忽略规则
设置SVN忽略规则
如只提交.cpp .h文件。
在项目根目录的 .svnignore
文件中添加以下规则:
# 忽略所有文件和目录
*
# 但不忽略 .cpp 和 .h 文件
!*.cpp
!*.h
递归应用属性
# 获取所有目录并递归设置 svn:ignore 属性
Get-ChildItem -Directory -Recurse | ForEach-Object {svn propset svn:ignore -F .\.svnignore $_.FullName
}
提交属性变更
svn commit -m "Apply svn:ignore recursively to track only .cpp and .h files"
问题原因分析
-
已跟踪文件不会自动忽略
SVN 的svn:ignore
规则仅对未被版本控制的文件生效。如果.dll
、.ilk
等文件之前已被svn add
过,即使添加了忽略规则,它们仍会被提交。 -
忽略规则未正确应用到所有子目录
虽然递归设置了svn:ignore
,但可能存在以下情况:- 某些目录的属性设置失败(权限问题或路径包含特殊字符)。
- 子目录中存在独立的
svn:ignore
属性覆盖了全局规则。
1. 清理已跟踪的非代码文件
# PowerShell 命令
Get-ChildItem -File -Recurse | Where-Object {$_.Extension -notin @('.cpp', '.h')
} | ForEach-Object {svn delete --keep-local $_.FullName
}# 提交删除操作
svn commit -m "Remove non-code files from version control"
强制重新应用忽略规则
# 重新递归设置 svn:ignore 属性
Get-ChildItem -Directory -Recurse | ForEach-Object {Write-Host "Setting svn:ignore for $($_.FullName)"svn propset svn:ignore -F .\.svnignore $_.FullName
}# 提交属性变更
svn commit -m "Reapply svn:ignore recursively"