我在一个开发团队中工作,我们没有完全分开的代码。因此,当我处理一段时间的事情大约一周时,我需要在提交更改之前进行更新。但是当我这样做时,所有已删除的文件都将被恢复。我知道有SVN删除操作,但是对每个删除的文件或目录都很烦人。
是否有任何技巧,如何阻止此功能?
答案 0 :(得分:9)
所以,这基本上不是一个新的答案,但现有的答案似乎都不符合您的确切问题(以及我经常遇到的问题)。
以下是我的方法:如果您删除了文件,并且不希望它们在必要的更新期间恢复:
当然这是" SVN删除",但这样你就不必在实际删除文件时做到这一点,并且能够批量标记所有文件。
答案 1 :(得分:4)
这里有两种删除。
rm
或delete
)删除。svn delete
)。确保您知道自己在做什么。如果您只是从文件系统(本地计算机)中删除,那么当您要求更新到存储库中的最新版本时,应该将文件恢复。
如果要从版本控制中删除,则它是一个svn 更改操作,并且在您运行svn commit
之前不会应用于存储库。在其他人更新之后,svn将从他们的存储库中删除该文件。
请注意,这并不意味着无法获取该文件的副本。 SVN会保留每个修订版的完整历史记录,因此,如果您请求包含该文件副本的非当前版本,您将获得该版本中svn delete
d文件的副本。
在极少数情况下,您确实希望文件也从历史记录中删除,您需要执行一些脚本编写。基本上,您将创建一个新的存储库,模仿旧存储库(减去文件)。要做到这一点
对于从1到当前的每个修订号。
请记住,这可能有点难以做好,因为您需要提出保存元数据的解决方案,例如文件权限,提交消息,svn属性,提交时间和提交用户名
我强烈建议不要以这种方式重建你的历史,除非有一些全球压倒一切的理由这样做,比如法院命令。
答案 2 :(得分:2)
您必须通过svn删除文件。它必须'知道'你想删除它们。如果你不使用svn来删除它们,它们似乎就会丢失,所以更新会恢复它们。
步骤是:
在本地删除: $ svn删除somefile
将删除提交到存储库 $ svn commit -m“删除文件'somefile'”
答案 3 :(得分:2)
我想你可能会问如何获得一份工作副本,你可以在任何特定的时间只处理项目的一部分,而不需要在你的工作副本中有项目的其他部分。
此外,我认为你说你当前的方法是结账整个项目,然后手动删除你不想看到的项目。
更好的方法是使用“稀疏结账”的概念。
在最新版本中,TortoiseSVN在结帐对话框中有一个“选择项目”按钮。这允许您使用复选标记选择要包含在工作副本中的每个项目。结帐或更新时,其他项目不会下载到您的工作副本。 “更新到修订版本...”对话框还包含此“选择项目”功能。请注意,这是“右键单击 - > TortoiseSVN->更新到修订版...”而不仅仅是“右键单击 - >更新”。
如果您只需要摆脱一两件物品,您也可以使用“更新到修订版”将深度设置为“排除”。
从命令行,使用“--depth”选项的“svn update”或“svn checkout”是完成同样事情的方法。根据需要重复更改“--depth”选项以获取具有任意项目集的工作副本。
答案 4 :(得分:0)
要在问题发生后缓解,我这样做:
我知道这些是一长串指令,但我相信它们应该是开发人员的第二天性,并且必须快速了解并快速进行,出于多种目的,使用excel这样,创建和运行批处理快速命令等...