25

在过去的几个月里,我一直在使用 Subversion 进行代码控制和 TortoiseSVN 与服务器的交互,总的来说它进展顺利!但是,有时我的 FoxPro IDE 会更改文件扩展名的大小写,而不会发出警告,其中“ program.prg ”变为“ program.PRG ”) TortoiseSVN显然认为这意味着第一个文件已被删除,被标记为“丢失”,第二个名称显示为“非版本化”,严重破坏了我跟踪文件更改的能力。我知道 Subversion 起源于 *nix 的区分大小写的世界,但是,有没有办法控制 Subversion 或 TortoiseSVN 中的这种行为在与 Windows 一起使用时不区分文件名大小写?

4

8 回答 8

20

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

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

于 2008-08-18T13:49:43.507 回答
4

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 标志。

于 2010-05-20T20:32:08.727 回答
2

我将 TortoiseSVN 与 VFP 一起使用,它几乎可以无缝地处理案例翻转。唯一没有的情况是,当我尝试提交时,我在 IDE 中打开了文件:VFP 持有的文件锁会混淆它。这是您的问题所在,还是有其他问题?

去年我在 FoxForward 上做了一个关于在 Subversion 中使用 VFP 的演讲:大部分演讲都是关于命令行的,但最后有几张幻灯片提供了一些工具的链接,这些工具可以帮助您在 VFP 中使用 Subversion。http://docs.google.com/Presentation?id=dfxkh6x4_3ghnqc4

于 2008-08-22T13:25:26.223 回答
1

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

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

于 2008-09-15T13:53:15.737 回答
1

我相信扩展名上的随机大小写根本不是随机的。我记得对此进行了测试。如果您从项目经理处修改程序。通过单击修改按钮让我们说。然后保存扩展名是小写的更改。如果您从命令窗口执行修改命令并保存更改,则扩展名是大写的。显然,微软的编码人员并不担心扩展案例是相同的。

于 2009-02-24T14:00:17.697 回答
0

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

于 2010-08-02T19:18:58.097 回答
0

我们遇到了类似的问题,我找到了比这里公开的更好的解决方案,所以我现在分享它:

  • 对于手动完成的提交,现在 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

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

于 2018-07-18T10:13:32.427 回答
0

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

于 2020-01-14T11:34:32.863 回答