我可以让 Windows 的 Subversion + TortoiseSVN 不区分大小写吗?
Posted
技术标签:
【中文标题】我可以让 Windows 的 Subversion + TortoiseSVN 不区分大小写吗?【英文标题】:Can I make Subversion + TortoiseSVN case-insensitive for Windows? 【发布时间】:2010-09-06 02:06:16 【问题描述】:在过去的几个月里,我一直在使用 Subversion 进行代码控制和 TortoiseSVN 与服务器的交互,总的来说它进展顺利!但是,有时我的 FoxPro IDE 会更改文件扩展名的大小写,而不会发出警告,其中“program.prg”变为“program.PRG”) TortoiseSVN 显然认为这意味着第一个文件已被删除,被标记为“丢失”,第二个名称出现为“非版本化”,严重破坏了我跟踪文件更改的能力。我知道 Subversion 起源于 *nix 区分大小写的世界,但是,有没有办法控制 Subversion 或 TortoiseSVN 中的这种行为在与 Windows 一起使用时不区分文件名大小写?
【问题讨论】:
为什么不能一劳永逸地将所有这些文件重命名为 .PRG?还是 FoxPro 也会随机将其更改为小写? 【参考方案1】:不幸的是,Subversion 是区分大小写的。这是因为来自 Subversion 的文件可以在区分大小写的文件系统(例如 *nix)和不区分大小写的文件系统(例如 Windows、Mac)上检出。
This pre-commit hook script 可以帮助您在签入文件时避免出现问题。如果它不能解决您的问题,我最好的建议是编写一个小脚本以确保所有扩展都是小写的,并在您每次签入/签出之前运行它。这将是一个 PITA,但也许是你最好的选择。
【讨论】:
TortoiseSVN 具有大小写调整功能。如果 TSVN 检测到工作副本中的文件名被重命名为仅大小写,它将恢复文件上的大小写。 (命令行 SVN 工具不这样做。) 该脚本未找到文件,但作者 Stefan 在这里引用了正确的文件; ***.com/questions/5393395/…【参考方案2】:我将 TortoiseSVN 与 VFP 一起使用,它几乎可以无缝地处理案例翻转。唯一没有的情况是,当我尝试提交时,我在 IDE 中打开了文件:VFP 持有的文件锁会混淆它。这是您的问题所在,还是有其他问题?
去年我在 FoxForward 做了一个关于在 Subversion 中使用 VFP 的演示:大部分演示都涉及命令行,但最后有几张幻灯片提供了一些工具的链接,这些工具可以帮助您在 VFP 中使用 Subversion . http://docs.google.com/Presentation?id=dfxkh6x4_3ghnqc4
【讨论】:
感谢您的洞察力! VFP 的二进制处理表、表单等在 SVN 中是一个挑战。【参考方案3】:Kit,您在上面评论说 VFP 基于二进制的源文件很难在 Subversion 中使用。我在上面给出的链接提到了一些使它更容易的工具,但我使用的是 Christof Wollenhaupt 的 TwoFox 实用程序——它将 VFP 项目转换为纯文本。你必须手动运行它,但我没有问题。
http://www.foxpert.com/docs/cvs.en.htm
【讨论】:
感谢 Garret,但是 TwoFox 的下载链接在您链接的页面上已损坏。转换工具会非常方便,因为我今天早上正在处理 FoxPro-Subversion 问题!有没有其他地方可以下载 TwoFox 或者有更好的选择吗? 对不起,我之前没有看到这个——为了记录,我刚刚检查了 Christof 的网站,下载仍然很好。我猜这只是一个暂时的故障......【参考方案4】:我相信扩展名上的随机大小写根本不是随机的。 我记得对此进行了测试。如果您从项目经理处修改程序。 通过单击修改按钮让我们说。然后保存扩展名是小写的更改。如果您从命令窗口执行修改命令并保存更改,则扩展名是大写的。显然,微软的程序员并不担心扩展案例是一样的。
【讨论】:
这证实了我自发布此问题以来所看到的模式,谢谢。【参考方案5】:Windows 确实支持区分大小写,但您必须通过 Windows API 在 CreateFile 上发送正确的 POSIX 标志!可能需要更改注册表项(SFU/Tools for Unix 和 Ultimate Windows 7 已设置此注册表项,因此 Windows 支持区分大小写的文件名)。
Windows 是从 Unix 设计的,但 Explorer.exe 和其他程序等程序旨在禁止区分大小写以实现向后兼容性和安全性(主要是在处理执行 notepad.exe 与 NOTEPAD.EXE 的 dos 时,其中所有大写是病毒或恶意软件)。
但 Vista+ 的安全属性使其过时。
TortiousSVN 只是不支持在制作和重命名文件时传递这个 posix 标志。
【讨论】:
【参考方案6】:不,你肯定不能。 SVN 是区分大小写的,除非你以某种方式重写代码……它是开源的。
【讨论】:
【参考方案7】:我们遇到了类似的问题,我找到了比这里公开的更好的解决方案,所以我现在分享它:
对于手动提交,现在 TortoiseSVN 自动修复文件名的大小写:它重命名本地文件以匹配版本化文件的大小写(只需在那条路径),所以应该没有问题。
对于自动提交,您不能使用 TortoiseSVN,因为它需要您手动确认提交(它会打开带有特定消息的提交窗口,但您仍然必须单击确定)。但是如果您直接使用 Subversion (svn) 进行自动提交,那么您将在该提交上遇到区分大小写的问题,因为 Subversion 仍然区分大小写...
如何为自动提交解决这个问题?好吧,我尝试了一种混合方法:创建一个名为 FixCaseSensitiveFileNames.bat
的批处理文件,您可以调用它在提交之前传递您想要修复的路径,例如:call FixCaseSensitiveFileNames.bat C:\MyRepo
。批处理文件打开 TortoiseSVN 进行手动提交,并自动修复文件名,但随后在预定义的暂停后关闭提交窗口,因此您可以继续使用已修复的区分大小写的文件名进行自动提交。暂停是通过本地 ping 模拟的,您可以通过更改 -n
参数(即尝试次数)来更改持续时间。如果您没有进行足够长的暂停,则存在在 TortoiseSVN 窗口进行神奇修复之前关闭它的风险。这是批处理文件的代码:
@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
这完全解决了我们自动化日常构建过程的问题。我看到的唯一问题是一个窗口会打开几秒钟,这对我们的日常构建来说不是问题,但如果这对你来说是个问题,也可能有解决方法......
【讨论】:
【参考方案8】:TortoiseSVN 有一个Repairing File Renames 功能。它需要人工干预,它实际上会发出要提交的文件重命名操作,但仍然通过保留文件历史记录来解决当前的用例。
【讨论】:
以上是关于我可以让 Windows 的 Subversion + TortoiseSVN 不区分大小写吗?的主要内容,如果未能解决你的问题,请参考以下文章
Windows的Subversion客户端有哪些不需要安装?
是否有一个 Eclipse 插件可以让您在多个 Subversion 修订中区分单个 Java 方法?