在过去的几个月里,我一直使用Subversion进行代码控制,使用TortoiseSVN与服务器连接,总的来说它一直很棒!但是,偶尔我的FoxPro IDE将在没有警告的情况下更改文件扩展名的情况,其中“ program.prg ”变为“ program。 PRG ”) TortoiseSVN显然认为这意味着第一个文件被删除,被标记为“缺失”,第二个名称出现“非版本化”,对我跟踪文件更改的能力造成严重破坏。我理解Subversion起源于* nix的区分大小写的世界但是,有没有办法在Subversion或TortoiseSVN中控制这种行为,当与Windows一起使用时,文件名不区分大小写?
答案 0 :(得分:20)
不幸的是,Subversion区分大小写。这是因为可以在区分大小写的文件系统(例如,* nix)和不区分大小写的文件系统(例如,Windows,Mac)上检出来自Subversion的文件。
This pre-commit hook script可以帮助您在签入文件时避免出现问题。如果它没有解决您的问题,我最好的建议是编写一个小脚本,以确保所有扩展名都是小写的,并在每次签入/签出之前运行它。它将是一个PITA,但也许是你最好的选择。
答案 1 :(得分:4)
Windows支持区分大小写,但您必须从Windows API向CreateFile发送正确的POSIX标志!注册表项可能需要更改(SFU / Tools for Unix和Ultimate Windows 7已设置此注册表项,因此Windows支持区分大小写的文件名)。
Windows是基于Unix设计的,但是诸如Explorer.exe和其他程序之类的东西被设计为不允许区分大小写以实现向后兼容性和安全性(主要是在处理dos执行notepad.exe与NOTEPAD.EXE时,所有大写是一种病毒或恶意软件。)
但Vista +具有安全属性,使其过时。
TortiousSVN在制作和重命名文件时不支持传递此posix标志。
答案 2 :(得分:2)
我使用TortoiseSVN和VFP,它主要是无缝地处理案件翻转。它唯一没有的是当我尝试执行提交时在IDE中打开文件:文件锁定VFP会使它混淆。这是您的问题所在,还是有其他问题?
我去年在FoxForward上做了一个关于在Subversion中使用VFP的演示文稿:大部分演示文稿都涉及命令行,但最后有几个幻灯片可以链接到可以帮助你在VFP中使用Subversion的工具。 http://docs.google.com/Presentation?id=dfxkh6x4_3ghnqc4
答案 3 :(得分:2)
我认为扩展上的随机大写和小写都不是随机的。 我记得测试过这个。如果您从项目经理修改程序。 点击修改按钮就可以了。然后保存更改扩展名为小写。如果从命令窗口执行修改命令并保存更改,则扩展名为大写。显然,微软的编码员并不担心扩展案例是一样的。
答案 4 :(得分:1)
Kit,您在上面评论说VFP的基于二进制文件的源文件很难在Subversion中使用。我上面给出的链接提到了一些工具,使其更容易,但我使用的是Christof Wollenhaupt的TwoFox实用程序 - 它将VFP项目转换为纯文本。你必须手动运行它,但我没有问题。
答案 5 :(得分:0)
不,你确定不能。除非你以某种方式重写代码,否则SVN区分大小写...... 是开源的。
答案 6 :(得分:0)
我们遇到了类似的问题,并且找到了一个比此处公开的解决方案更好的解决方案,因此,我现在分享一下:
对于手动完成提交,现在TortoiseSVN自动修复文件名的大小写:它重命名本地文件以匹配版本化文件的大小写(只需在Windows中打开提交窗口即可)。该路径),因此应该没问题。
对于自动提交,您不能使用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
这完全解决了我们的每日自动构建过程中的问题。我看到的唯一问题是一个窗口将打开几秒钟,这对于我们的日常构建来说不是问题,但是如果这对您来说是一个问题,那么也可能有解决方法...
答案 7 :(得分:0)
TortoiseSVN具有Repairing File Renames功能。它需要人工干预,实际上会执行文件重命名操作,但是仍然通过保留文件历史记录来解决当前用例。