关于svn:我可以使Subversion TortoiseSVN在Windows中不区分大小写吗?

关于svn:我可以使Subversion TortoiseSVN在Windows中不区分大小写吗?

Can I make Subversion + TortoiseSVN case-insensitive for Windows?

在过去的几个月中,我一直在使用Subversion与TortoiseSVN进行代码控制,以与服务器接口,并且总体来说进展顺利!但是,偶尔我的FoxPro IDE会更改文件扩展名的大小写,而不会发出警告,其中" program.prg"变为" program.PRG"。TortoiseSVN显然将其表示删除了第一个文件,并标记为"丢失",第二个被标记为"丢失"。名称显示为"非版本",这严重破坏了我跟踪文件更改的能力。我知道Subversion起源于* nix的区分大小写的世界,但是在与Windows一起使用时,是否有任何方法可以控制Subversion或TortoiseSVN中的这种行为使其文件名不区分大小写?


不幸的是,Subversion区分大小写。这是由于可以在区分大小写的文件系统(例如* nix)和不区分大小写的文件系统(例如Windows,Mac)上检出Subversion中的文件。

此预提交的钩子脚本可以帮助您避免在签入文件时出现问题。如果它不能解决您的问题,我最好的建议是编写一个小脚本,以确保所有扩展名都是小写的,并在每次签入/签出之前运行它。这将是PITA,但也许是最好的选择。


Windows确实支持区分大小写,但是您必须通过Windows API在CreateFile上向其发送正确的POSIX标志!注册表项可能需要更改(SFU / Unix和Ultimate Windows 7工具已经设置了此注册表项,因此Windows支持区分大小写的文件名)。

Windows是基于Unix设计的,但是诸如Explorer.exe和其他程序之类的东西旨在禁止区分大小写,以实现向后兼容性和安全性(主要是在处理dos执行notepad.exe与NOTEPAD.EXE时,所有大写字母都大写)是病毒或恶意软件)。

但是Vista具有安全性属性,因此过时了。

TortiousSVN只是不支持在创建和重命名文件时传递posix标志。


我将TortoiseSVN与VFP一起使用,它几乎无缝地处理大小写翻转。唯一的例外是,当我尝试执行提交时是否在IDE中打开了文件:VFP持有的文件锁将其混淆。这是您的问题出现的地方,还是其他问题?

我去年在FoxForward上做了一个有关将VFP与Subversion一起使用的演示:大部分演示都是关于命令行的,但是最后有几张幻灯片,其中包含指向可帮助您在VFP中使用Subversion的工具的链接。 。 http://docs.google.com/Presentation?id=dfxkh6x4_3ghnqc4


我认为扩展名的大小写完全不是随机的。
我记得对此进行过测试。如果从项目经理修改程序。
通过单击"修改"按钮,可以说。然后保存扩展名是小写的更改。如果您从命令窗口执行修改命令并保存更改,则扩展名是大写的。显然,Microsoft的编码人员不必担心扩展名相同。


工具包,您在上面评论说,VFP基于二进制的源文件很难在Subversion中使用。我在上面给出的链接中提到了一些简化工具,但我使用的工具是Christof Wollenhaupt的TwoFox实用程序-它将VFP项目转换为纯文本。您必须手动运行它,但是我没有这个问题。

http://www.foxpert.com/docs/cvs.en.htm


TortoiseSVN具有修复文件重命名功能。它需要人工干预,并且实际上会发出要执行的文件重命名操作,但是仍然通过保留文件历史记录来解决当前用例。


我们遇到了类似的问题,我发现了比此处公开的解决方案更好的解决方案,因此,我现在将其共享:

  • 对于手动完成的提交,现在TortoiseSVN自动修复文件名的大小写:它重命名本地文件以匹配版本文件的大小写(只需通过在该路径中打开提交窗口即可),因此应该没有问题这样。

  • 对于自动提交,您不能使用TortoiseSVN,因为它需要您手动确认提交(它会打开带有特定消息的提交窗口,但您仍然必须单击"确定")。但是,如果您直接使用Subversion(svn)进行自动提交,则该提交将存在区分大小写的问题,因为Subversion仍然区分大小写...

如何解决自动提交问题?好吧,我尝试了一种混合方法:创建一个名为FixCaseSensitiveFileNames.bat的批处理文件,您可以调用该文件在提交之前传递要修复的路径,例如:call FixCaseSensitiveFileNames.bat C:\\MyRepo。批处理文件会打开TortoiseSVN进行手动提交,并会自动修复文件名,但是在预定义的暂停后它将关闭提交窗口,因此您可以使用已修复区分大小写的文件名继续进行自动提交。暂停是通过本地ping模拟的,您可以通过更改-n参数(即尝试次数)来更改持续时间。如果您没有进行足够长的停顿,则存在在进行魔术修复之前关闭TortoiseSVN窗口的风险。这是批处理文件的代码:

1
2
3
4
5
6
7
8
9
@echo off
REM *** This BAT uses TortoiseSVN to fix the case-sensitive names of the files in Subversion
REM *** Call it before an automated commit. The Tortoise commit fixes this issue for manual commits,
REM *** so the trick is opening the commit window and close it automatically after a pause (with ping).
REM *** %1 = path to be fixed

start TortoiseProc.exe /command:commit /path:"%1"
ping localhost -n 10 >nul
taskkill /im TortoiseProc.exe

这完全解决了我们的每日自动构建过程中的问题。我看到的唯一问题是一个窗口将打开几秒钟,这对我们的日常构建来说不是问题,但是如果这对您来说是一个问题,那么也可能有解决方法...


不,您确定不能。 SVN区分大小写,除非您以某种方式重写代码...它是开源的。


推荐阅读