svn 用cmd运行commit命令提交不了预定要删除的文件或文件夹

操作如下:1、checkout一个服务器到本地的一个文件夹work中,work文件夹中正确显示服务器中的内容。2、在木地文件夹work中鼠标右删除某一文件或文件夹A。3、打开cmd,将cmd的路径cd到work的路径下。4、在cmd中输入 svn commit -m "" 如果按上面的4步操作的话应该就已经向服务器提交了文件或文件夹A己删除的信息,服务器应该就把文件或文件夹A删除了。但是updata之后文件或文件夹A依然存在。问题大该出现在第4步中,那么第4步应该向cmd输入什么内容才可以让删除文件或文件夹A的操作正确地提文?
其实在第四步之前在cmd中输入 svn del "文件路径" 这样的话就没有问题
那就是说在用操作系统的删除去删除文件之后要在svn那里"登记"一下用户已经删除了那个文件,然后才可以commit成功.

所以现在的问题就变成了用户用操作系统的删除去删除一个文件之后没有在svn那里"登记"用户已经删除了那个文件的情况下,怎样才能让svn commit成功而已!

你把第二步改成直接用操作系统的删除(点中这个文件按delete键),不要用右键菜单TortoiseSVN的删除,这样试试看,应该就正常了

SVN客户端升级到1.7可能能解决这个问题(不太确定)追问

其实第二步的细分操作是:1.用右手拿起鼠标;2.按下鼠标左键选中要删除的文件,3.右击选中的文件,弹出右键菜单.4.在打开的右键菜单中找到"删除(D)"的那一个选项,5.左击一下"删除(D)",之后会弹出"确认文件删除"的对话框,6,在"确认文件删除"的对话框那里选中"是(Y)"

而不是"TortoiseSVN"里面删除.

追答

如果这样的话,你可以直接从第2步开始就进入命令行模式操作,转到那个文件夹后,用svn delete指令删除那个文件,然后commit

追问

但是用操作系统的删除是不知道用户删除了哪些文件的,除非做一次文件遍历

追答

我去Collabnet下载了SVN命令行模式客户端(Subversion 1.7.9 (Windows 32-bit))验证了一下,至少这个版本的SVN命令行模式不存在你说的这个问题

我试验了,在windows下直接删除某个文件,然后在命令行模式下commit,然后再次update,这时没有把已删除的文件取下来。

追问

TortoiseSVN-1.7.10.23359-win32-svn-1.7.7
TortoiseSVN-1.7.13.24257-win32-svn-1.7.10
会出现这个问题

追答

哦,我错了,我刚才验证的时候操作错误,Subversion 1.7.9 (Windows 32-bit)的确也有此问题

用TortoiseSVN右键菜单commit的时候,它会自动检查一下丢失的文件,如果有丢失的文件被选中,它会自动执行一个svn delete,所以菜单操作不存在这个问题,命令行方式的话就不行了,我再想想看

追问

其实可以做一次文件的遍历,找出不存在的文件,然后用cmd补登一下信息,之后再commi就可以了

追答

能想到的办法就是在你的第4步,先执行一次 svn status ,这时会显示哪些文件被删除了,然后执行svn delete标记删除这些文件,然后再svn commit 。验证了一下,这样是可行的。

不明白你为什么一定要先在windows中删除,然后再在命令行模式commit,如果知道你的目的可能会有其它解决方法。

追问

想写个小工具,不用整天右击菜单~

追答

呵呵,右键菜单多省事啊,不论是怎么删除的,右键菜单commit的时候都会把那些已经删除的文件标记出来,如果是用svn delete删除的,会默认打勾,如果是通过操作系统直接删除的,默认不打勾,这时你把那些打上勾后确定就直接提交了,这不必再去执行一个脚本省心、安全?

当然如果一定想用工具来解决,那可以考虑用命令行来检索svn status的输出,找出其中标记为删除的每一行,然后针对每一行做一次svn delete,最后再svn commit。这个脚本写起来还是有点复杂的。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答