SVN: is scheduled for addition, but is missing

本文介绍在使用SVN进行代码提交时遇到已标记为添加但实际已删除的文件导致的提交失败问题,并提供了解决方案,即如何将文件状态回滚到未版本化的状态。

删除文件夹后点commit提交,但是报错,报错内容如下:

提示 "svn: Commit failed (details follow): svn: '/***/xxx.c' is scheduled for addition, but is missing "

原因:之前用SVN提交过的文件,被标记为"add"状态,等待被加入到仓库。若此时你把这个文件删除了,SVN提交的时候还是会尝试提交这个文件,虽然它的状态已经是 "missing"了。


解决:在命令行下用 "svn revert xxx.c --depth infinity",在图形界面下,右键--Revert,选中那个文件。这样就告诉SVN把这个文件退回到之前的状态 "unversioned",也就是不对这个文件做任何修改


<think> 我们面对两个问题: 1. 解决SVN提交时出现的错误:E155010: 'E:\Xgame\Game-master\Bundles\StandaloneWindows64\DefaultPackage\2025-09-14-930' is scheduled for addition, but is missing 2. 如何标记不添加Bundles目录下的文件(即忽略Bundles目录下的文件,不纳入版本控制) 分析错误: 根据错误信息,该文件(或目录)已经被标记为“计划添加”(scheduled for addition),但在提交时发现它已经缺失(被删除或移动)。 在SVN中,当一个文件被`svn add`后,它的状态变为“A”(添加),但如果在提交之前这个文件被删除了,那么提交时就会报这个错误。 解决方案有两种: a) 如果这个文件确实不需要了,我们可以使用`svn delete`或者`svn revert`来取消添加操作。 b) 如果这个文件是误删除的,我们需要将它恢复回来,然后再提交。 但是,根据用户的需求,我们不仅需要解决这个错误,还要忽略Bundles目录下的文件(即不纳入版本控制)。因此,我们选择方案a)来取消添加操作,并且设置忽略规则来避免以后再次添加。 具体步骤: 步骤1: 取消缺失文件的添加状态(使用`svn revert`) 由于缺失的文件路径是:`E:\Xgame\Game-master\Bundles\StandaloneWindows64\DefaultPackage\2025-09-14-930` 我们可以进入该目录,然后执行: ```cmd svn revert --depth=infinity "2025-09-14-930" ``` 或者,如果这个目录已经不存在,我们可以直接使用完整路径: ```cmd svn revert "E:\Xgame\Game-master\Bundles\StandaloneWindows64\DefaultPackage\2025-09-14-930" ``` 注意:`revert`命令会撤销对该文件/目录的所有未提交的更改,包括添加操作。 步骤2: 为了避免以后再次添加Bundles目录下的文件,我们需要设置SVN的忽略属性。 我们可以设置整个Bundles目录被忽略,但是注意:SVN的忽略属性只能作用于未版本控制的文件(即还未被添加的文件)。如果已经被添加,则需要先删除(并提交)才能被忽略。 因此,我们可能需要先删除已经被添加但不需要版本控制的Bundles目录下的文件(如果存在的话),然后设置忽略。 具体操作: a) 删除已经被添加的Bundles目录(如果确定不再需要版本控制): ```cmd svn delete Bundles ``` 但是注意:这样会从版本库中删除,如果只是不想版本控制但需要保留本地文件,则应该: ```cmd svn delete --keep-local Bundles ``` 然后提交删除操作。但是,如果Bundles目录下有很多子目录,而且已经被添加,那么我们需要递归删除。 然而,根据错误提示,我们只是其中一个目录出现了问题,所以可能并不是整个Bundles目录都被添加了。因此,我们考虑只对Bundles目录设置忽略属性,这样以后就不会添加里面的文件。 b) 设置忽略属性: 进入`E:\Xgame\Game-master`目录,然后执行: ```cmd svn propset svn:ignore "Bundles" . ``` 这样设置后,当前目录(即Game-master)会忽略Bundles目录。但是,这样设置的是当前目录的忽略属性,只忽略当前目录下的Bundles目录(如果Bundles目录在更深层级,则需要在对应的目录设置)。 但是,我们可能希望忽略的是`Bundles`目录及其所有子目录和文件。所以,我们设置忽略`Bundles`: ```cmd svn propset svn:ignore "Bundles" . ``` 然后提交这个属性的修改: ```cmd svn commit -m "设置忽略Bundles目录" ``` 但是,注意:如果Bundles目录已经被添加(即已经在版本控制中),那么设置忽略属性对它无效。因此,我们需要先确保Bundles目录没有被添加(即状态不是A或者不是版本控制下的文件)。 所以,我们需要先检查Bundles目录的状态: ```cmd svn status Bundles ``` 如果状态是“A”(已添加)或者“?”(未添加)或者其他?如果是“A”,那么我们需要先删除(并保留本地): ```cmd svn delete --keep-local Bundles ``` 然后提交删除操作(注意:这样就从版本库中移除了Bundles目录,但本地保留),然后再设置忽略属性。 如果状态是“?”(未添加),那么直接设置忽略属性即可。 步骤3: 提交更改(包括属性设置和可能的删除操作) 但是,我们当前的问题中,有一个特定的目录(2025-09-14-930)已经被标记为添加但缺失,所以我们先要解决这个错误,然后才能设置忽略。 因此,综合步骤: 1. 回到工作副本的根目录(E:\Xgame\Game-master) 2. 查看状态,确认错误文件的状态以及Bundles目录的状态: ```cmd cd /d E:\Xgame\Game-master svn status ``` 3. 对缺失的文件(或目录)执行revert(取消添加状态): ```cmd svn revert "Bundles\StandaloneWindows64\DefaultPackage\2025-09-14-930" ``` 如果这个路径已经不存在,可以直接写完整路径,或者使用通配符?注意:svn revert不支持通配符,所以必须指定完整路径。 如果不知道确切路径,可以使用`svn status`查看,然后对每个状态为`A`并且后面跟着`!`(表示缺失)的文件执行revert。 4. 然后,我们查看Bundles目录是否在版本控制中: - 如果Bundles目录已经被添加(状态为A),那么我们需要删除(并保留本地): ```cmd svn delete --keep-local Bundles ``` - 如果Bundles目录已经被版本控制(状态为正常,没有标记),那么我们需要删除(并保留本地)然后提交删除,之后设置忽略(这样以后就不会再添加了)。 5. 设置忽略属性(在Game-master目录下): ```cmd svn propset svn:ignore "Bundles" . ``` 或者,如果已经存在忽略属性,我们可以追加: ```cmd svn propedit svn:ignore . ``` 然后在打开的编辑器中,新增一行“Bundles”,保存退出。 6. 提交更改: ```cmd svn commit -m "解决E155010错误并忽略Bundles目录" ``` 注意:如果Bundles目录下的文件已经被添加,那么忽略属性只对未被添加的文件有效。所以,我们必须先确保Bundles目录不被版本控制(即先删除并提交)。 另外,如果Bundles目录很大,而且有很多子目录,我们可能需要递归地删除(如果已经被添加到版本控制)。但是,使用`svn delete --keep-local`会保留本地文件,所以不会影响本地开发。 最后,由于用户要求只使用SVN,所以我们没有使用其他工具。 流程图: ```mermaid graph TD A[进入工作副本根目录] --> B[svn status 查看状态] B --> C[对缺失文件执行svn revert] C --> D{Bundles目录是否在版本控制中?} D -->|是| E[svn delete --keep-local Bundles] D -->|否| F[设置svn:ignore属性] E --> F F --> G[提交更改] ``` 相关问题: 1. SVN忽略属性(svn:ignore)和Git的.gitignore有什么区别? 2. 如何递归设置SVN忽略整个目录及其子目录? 3. SVN出现E155010错误的其他原因及解决方法? 4. 如何恢复被`svn delete --keep-local`删除的版本控制文件? 5. SVN中如何查看已设置的忽略规则? 参考: [^1]: 本文中提到的SVN操作命令,如svn revert, svn delete, svn propset等,均来源于SVN官方文档。 </think> ### 解决 SVN 错误 E155010 及忽略 Bundles 目录文件的方法 #### 🔧 错误原因分析 错误 `E155010: '路径' is scheduled for addition, but is missing` 表示: 1. 文件/目录已被标记为待添加 (`svn add`) 2. 但在提交前被物理删除或移动 3. SVN 找不到该路径对应的实体文件[[^1]] 在您的情况中,问题出现在 `Bundles\StandaloneWindows64\DefaultPackage\2025-09-14-930` 路径。 #### 🛠️ 解决步骤 ```cmd cd /d E:\Xgame\Game-master ``` 1. **取消缺失文件的添加标记** ```cmd svn revert "Bundles\StandaloneWindows64\DefaultPackage\2025-09-14-930" ``` - `revert` 命令会撤销对该路径的所有待处理操作 - 输出应显示:`已恢复 'Bundles\StandaloneWindows64\DefaultPackage\2025-09-14-930'` 2. **清理工作副本状态** ```cmd svn cleanup ``` - 修复工作副本的元数据不一致问题 - 特别适用于文件系统操作导致的冲突[[^3]] 3. **验证状态** ```cmd svn status Bundles ``` - 确认目标路径不再显示 `A` (待添加) 或 `!` (缺失) 状态标记 #### 📌 永久忽略 Bundles 目录的方法 ```mermaid graph LR A[定位父目录] --> B[设置忽略属性] B --> C[提交属性变更] ``` 1. **在父目录设置忽略属性** ```cmd cd Bundles\.. // 进入Bundles的上级目录 svn propset svn:ignore Bundles . ``` - 此命令将 `Bundles` 目录添加到忽略列表 - 使用 `.` 表示当前目录 2. **验证属性设置** ```cmd svn propget svn:ignore . ``` - 应输出:`Bundles` 3. **提交属性变更** ```cmd svn commit -m “永久忽略Bundles目录” ``` #### ⚠️ 重要注意事项 1. **忽略生效条件**: - 仅对**未版本化**的文件/目录有效 - 已添加到版本库的路径需先执行: ```cmd svn delete --keep-local Bundles svn commit -m “从版本控制移除Bundles目录” ``` 2. **递归忽略**: - 若需忽略子目录,使用: ```cmd svn propset svn:ignore "*" Bundles ``` 3. **全局忽略**: - 在 `~/.subversion/config` 中添加: ```ini global-ignores = *.tmp *.log build/ ``` #### ✅ 最终验证 ```cmd svn status ``` - 应不再显示 Bundles 目录下的文件状态 - 提交时不会包含 Bundles 目录的内容
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值