SVN ? ! 的解决

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 常见情况:

  1. 手动删除了文件 (未通过 svn delete 删除)。
  2. 文件被移动或重命名 (但未使用 svn move)。
  3. 磁盘损坏或文件被误删
  4. 文件权限问题导致 SVN 无法访问

1.2.2 你确实想删除该文件

如果文件是 故意删除 的,应该用 svn delete 正式删除:

bash 复制代码
svn delete core

然后提交更改:

bash 复制代码
svn commit -m "正式删除文件"

1.2.3文件被误删,想恢复

如果文件是 意外删除,可以:

  1. 恢复文件(从回收站或备份)。
  2. 执行 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/ 及其所有子文件和目录

相关推荐
技术策划Boring2 天前
什么是 SVN Blame 以及如何使用
svn
小疙瘩5 天前
Windows 11 安装SVN 服务端和客户端
svn
长沙红胖子Qt9 天前
SVN培训笔记(三):使用sourceTree管理svn项目添加、修改、删除和下载指定版本操作
svn·sourcetree
长沙红胖子Qt14 天前
SVN培训笔记(二):使用sourceTree通过git桥接管理svn项目
git·svn·sourcetree·sourcetree管理svn
Snower_202214 天前
CentOS 7 搭建 SVN 服务器(精简版教程)
linux·运维·服务器·svn·centos
siqiangming15 天前
将SVN项目迁移到Git,保留提交记录
git·svn
小趴菜不能喝17 天前
Linux 搭建SVN服务
linux·运维·svn
在下小孙18 天前
Git与SVN常用指令
git·svn
Albert Edison23 天前
【Git】多人协作二(不同分支下)
git·elasticsearch·svn·github
秃秃秃秃哇23 天前
svn学习记录
svn