我在一个开发团队工作,我们没有完全分开的代码 . 因此,当我处理某事长达一周时,我需要在我提交更改之前进行更新 . 但是当我这样做时,所有已删除的文件都将被恢复 . 我知道有SVN删除操作,但是对每个删除的文件或目录都很烦人 .
有什么诀窍,如何防止这个功能?
所以,这基本上不是一个新的答案,但现有的似乎都不适合你的确切问题(以及我经常遇到的问题) .
这是我的方法:如果您删除了文件,并且不希望它们在必要的更新期间恢复:
使用TortoiseSVN函数"Check for modifications"
按状态排序列表
选择状态为"missing"的所有文件
右键单击,删除
当然这是“SVN删除”,但这样你就不必在实际删除文件时这样做,并且能够批量标记所有文件 .
这里有两种删除 .
从文件系统中删除( rm 或 delete ) .
rm
delete
从版本控制中删除( svn delete ) .
svn delete
确保你知道你在做什么 . 如果您只是从文件系统(本地计算机)中删除,那么当您要求更新到存储库中的最新版本时,您将 should 获取该文件 .
如果要从版本控制中删除,则它是svn change 操作,并且在运行 svn commit 之前不会应用于存储库 . 在其他人更新之后,svn将从其存储库中删除该文件 .
svn commit
请注意,这并不意味着无法获取文件的副本 . SVN保留每个修订的完整历史记录,因此如果您请求具有该文件副本的非当前修订版,您将获得该修订版中的 svn delete d文件的副本 .
在极少数情况下,您确实希望文件也从历史记录中删除,您需要执行一些脚本编写 . 基本上,您将创建一个新的存储库,模仿旧存储库(减去文件) . 去做这个
对于从1到当前的每个修订号 .
从旧存储库中获取文件 .
删除有问题的文件 .
提交到新存储库
请记住,这可能有点难以做好,因为您需要提出保存元数据的解决方案,如文件权限,提交消息,svn属性,提交时间和提交用户名 .
我强烈建议不要以这种方式重建你的历史,除非有一些全球压倒一切的理由这样做,比如法院命令 .
您必须通过svn删除文件 . 它必须“知道”你想删除它们 . 如果您不使用svn删除它们,它们似乎丢失了,因此更新会恢复它们 .
步骤是:
在本地删除:$ svn删除somefile
将删除提交到存储库$ svn commit -m“删除文件'somefile'”
我想您可能会问如何获得一份工作副本,您可以在任何给定时间只处理项目的一部分,而根本不在项目的其他部分 .
此外,我认为您说的是您当前的方法是检查整个项目,然后手动删除您不想看到的项目 .
更好的方法是使用“稀疏结账”的概念 .
在最近的版本中,TortoiseSVN在结帐对话框中有一个“选择项目”按钮 . 这允许您使用复选标记选择要包含在工作副本中的每个项目 . 结帐或更新时,其他项目不会下载到您的工作副本 . “更新到修订版本...”对话框还包含此“选择项目”功能 . 请注意,这是“右键单击 - > TortoiseSVN->更新到修订版本...”而不仅仅是“右键单击 - >更新” .
如果您只需要删除一个或两个,您还可以使用“更新到修订”来为各个项目设置“排除”深度 .
从命令行,使用“--depth”选项的“svn update”或“svn checkout”是完成同样事情的方法 . 根据需要重复更改“--depth”选项以获取具有任意项目集的工作副本 .
为了在问题发生后缓解,我这样做:
选择_carway svn窗口中'Restored'的所有行,然后复制
粘贴到新Excel工作表的第二列
在第一列中,键入:del“
用del " next to the restored files' paths, by double clicking bottom right corner of the first cell in which you typed del "填充列
填写每个路径后关闭“
Win R(开始 - >运行)记事本 - >输入 . 复制全部并粘贴到记事本中 . 选择并复制一个选项卡,Ctrl H,全部替换,用任何内容替换选项卡以删除选项卡
Win R cmd - >在命令行中输入,右键单击并粘贴删除命令,按回车键,文件将被删除
我知道这些是一长串指令,但我相信它们应该是开发人员的第二天性,并且必须快速了解并快速进行,出于多种目的,使用excel这样,创建和运行批处理命令快点等等......
5 回答
所以,这基本上不是一个新的答案,但现有的似乎都不适合你的确切问题(以及我经常遇到的问题) .
这是我的方法:如果您删除了文件,并且不希望它们在必要的更新期间恢复:
使用TortoiseSVN函数"Check for modifications"
按状态排序列表
选择状态为"missing"的所有文件
右键单击,删除
当然这是“SVN删除”,但这样你就不必在实际删除文件时这样做,并且能够批量标记所有文件 .
这里有两种删除 .
从文件系统中删除(
rm
或delete
) .从版本控制中删除(
svn delete
) .确保你知道你在做什么 . 如果您只是从文件系统(本地计算机)中删除,那么当您要求更新到存储库中的最新版本时,您将 should 获取该文件 .
如果要从版本控制中删除,则它是svn change 操作,并且在运行
svn commit
之前不会应用于存储库 . 在其他人更新之后,svn将从其存储库中删除该文件 .请注意,这并不意味着无法获取文件的副本 . SVN保留每个修订的完整历史记录,因此如果您请求具有该文件副本的非当前修订版,您将获得该修订版中的
svn delete
d文件的副本 .在极少数情况下,您确实希望文件也从历史记录中删除,您需要执行一些脚本编写 . 基本上,您将创建一个新的存储库,模仿旧存储库(减去文件) . 去做这个
对于从1到当前的每个修订号 .
从旧存储库中获取文件 .
删除有问题的文件 .
提交到新存储库
请记住,这可能有点难以做好,因为您需要提出保存元数据的解决方案,如文件权限,提交消息,svn属性,提交时间和提交用户名 .
我强烈建议不要以这种方式重建你的历史,除非有一些全球压倒一切的理由这样做,比如法院命令 .
您必须通过svn删除文件 . 它必须“知道”你想删除它们 . 如果您不使用svn删除它们,它们似乎丢失了,因此更新会恢复它们 .
步骤是:
在本地删除:$ svn删除somefile
将删除提交到存储库$ svn commit -m“删除文件'somefile'”
我想您可能会问如何获得一份工作副本,您可以在任何给定时间只处理项目的一部分,而根本不在项目的其他部分 .
此外,我认为您说的是您当前的方法是检查整个项目,然后手动删除您不想看到的项目 .
更好的方法是使用“稀疏结账”的概念 .
在最近的版本中,TortoiseSVN在结帐对话框中有一个“选择项目”按钮 . 这允许您使用复选标记选择要包含在工作副本中的每个项目 . 结帐或更新时,其他项目不会下载到您的工作副本 . “更新到修订版本...”对话框还包含此“选择项目”功能 . 请注意,这是“右键单击 - > TortoiseSVN->更新到修订版本...”而不仅仅是“右键单击 - >更新” .
如果您只需要删除一个或两个,您还可以使用“更新到修订”来为各个项目设置“排除”深度 .
从命令行,使用“--depth”选项的“svn update”或“svn checkout”是完成同样事情的方法 . 根据需要重复更改“--depth”选项以获取具有任意项目集的工作副本 .
为了在问题发生后缓解,我这样做:
选择_carway svn窗口中'Restored'的所有行,然后复制
粘贴到新Excel工作表的第二列
在第一列中,键入:del“
用del " next to the restored files' paths, by double clicking bottom right corner of the first cell in which you typed del "填充列
填写每个路径后关闭“
Win R(开始 - >运行)记事本 - >输入 . 复制全部并粘贴到记事本中 . 选择并复制一个选项卡,Ctrl H,全部替换,用任何内容替换选项卡以删除选项卡
Win R cmd - >在命令行中输入,右键单击并粘贴删除命令,按回车键,文件将被删除
我知道这些是一长串指令,但我相信它们应该是开发人员的第二天性,并且必须快速了解并快速进行,出于多种目的,使用excel这样,创建和运行批处理命令快点等等......