1.状态问题
1.1 ?
1.1.1 文件/目录未被添加到版本库
- 该文件是新创建的 ,还没有执行
svn add
。 - 该文件未被纳入 SVN 管理 ,即使提交(
svn commit
)也不会包含它。
1.1.2 常见场景
- 手动新建了文件或目录,但未通过
svn add
添加。 - 从其他位置复制了文件到工作副本,但未关联 SVN。
- 自动生成的临时文件(如编译产物、日志文件等)。
1.1.3如何解决 ? 状态
如果文件需要纳入版本控制
- 使用
svn add <文件名>
将其添加到版本库:
bash
svn add filename.txt
之后文件状态会变为 A
(Added),下次提交时会包含。
如果文件不需要版本控制
忽略文件 :
使用 svn:ignore
属性将其标记为忽略(避免每次 svn st
都显示 ?
):
bash
svn propset svn:ignore "filename.txt" .
或忽略整个目录:
bash
svn propset svn:ignore "temp_dir" .
注意!
一定要加 . 否则报错
如果文件无用,可直接删除:
bash
rm filename.txt
1.2 !
1.2.1 常见情况:
- 手动删除了文件 (未通过
svn delete
删除)。 - 文件被移动或重命名 (但未使用
svn move
)。 - 磁盘损坏或文件被误删。
- 文件权限问题导致 SVN 无法访问。
1.2.2 你确实想删除该文件
如果文件是 故意删除 的,应该用 svn delete
正式删除:
bash
svn delete core
然后提交更改:
bash
svn commit -m "正式删除文件"
1.2.3文件被误删,想恢复
如果文件是 意外删除,可以:
- 恢复文件(从回收站或备份)。
- 执行
svn revert
撤销删除状态(如果文件还在回收站):
bash
svn revert 文件/目录名
如果文件已彻底丢失,可以重新检出:
bash
svn update 文件/目录名
示例
示例 1:文件 test.txt
显示 !
bash
$ svn st
! test.txt
修复方法:
- 如果确实要删除:
bash
svn delete test.txt
svn commit -m "删除 test.txt"
- 如果是误删:
bash
svn revert test.txt # 如果文件还在回收站
或
svn update test.txt # 重新检出
总结:
状态 | 含义 | 解决方案 |
---|---|---|
! |
文件被 手动删除 (未用 svn delete ) |
svn delete (确认删除) svn revert (恢复) svn update (重新检出) |
~ |
文件被 非版本化文件替换(如普通文件变链接) | 检查文件类型,用 svn revert 恢复原状 |
注意 svn revert
svn revert
仅恢复显式指定的路径,而不会递归恢复子目录和文件。(即内容没有恢复)
解决:递归恢复整个目录
使用 --depth infinity
强制递归恢复所有内容:
bash
svn revert --depth infinity test
这会恢复 test/
及其所有子文件和目录。