Đây là giải pháp tôi đã giải quyết. Nó là xa lý tưởng, nhưng tốt hơn so với các lựa chọn thay thế khác tôi đã xem xét.
Tôi tạo ra một kịch bản Autohotkey nào sau đây:
- trở lại trạng file MS Access trong một kho lưu trữ với những thay đổi phát hiện (để .orig files)
- đọc trong file .orig (một với thay đổi)
- đọc trong file hiện có (đã có trong kho)
- chuyển đổi nội dung của cả tập tin để giảm trường hợp
- so sánh nội dung chữ thường của các tập tin
- nếu các tệp vẫn khác nhau, tệp .orig được khôi phục để có thể được cam kết lưu trữ
- nếu các tệp này giống nhau (nghĩa là chúng chỉ khác nhau trong trường hợp tệp .orig bị xóa vì chúng tôi không 't quan tâm đến những thay đổi đó)
Đối với các tệp có thay đổi thực tế mà chúng tôi quan tâm, tôi vẫn thấy các thay đổi về trường hợp được thực hiện. Nếu điều đó dẫn đến nhiều tiếng ồn, tôi mở tệp trong công cụ so sánh cho phép so sánh phân biệt chữ hoa chữ thường (ví dụ: kdiff).
Nó không phải là một giải pháp hoàn hảo, nhưng nó loại bỏ khoảng 90% sự thất vọng đối với tôi.
Đây là tập lệnh của tôi. Lưu ý rằng tập lệnh bao gồm một tập lệnh Autohotkey khác, ConsoleApp.ahk, cung cấp chức năng có tên là ConsoleApp_RunWait()
. Đây là một tập lệnh của bên thứ 3 không còn hoạt động tốt với AHK 64 bit nữa, vì vậy tôi không bao gồm nó như là một phần của câu trả lời của tôi. Bất kỳ hàm AHK nào thực hiện một dòng lệnh và trả về kết quả đầu ra dưới dạng một chuỗi sẽ đủ.
; This script checks an MS Access source directory and reverts all files whose only modifications are to the
; case of the characters within the file.
#Include %A_ScriptDir%\ConsoleApp.ahk
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
; Allow for custom path to hg (support for moving to TortoiseHg 2.0)
IniRead hg, %A_ScriptDir%\LocalSettings\Settings.cfg, TortoiseHg, hg_path, hg
if 0 < 1 ; The left side of a non-expression if-statement is always the name of a variable.
{
MsgBox Usage:`n`HgIgnoreCase DirectoryWithFilesToScrub
ExitApp
}
SrcDir = %1%
StringReplace SrcDir, SrcDir, ", , All
StringRight test, SrcDir, 1 ; add trailing slash if necessary
ifnotequal test, \
SrcDir = %SrcDir%\
RestoreOriginals(SrcDir)
RevertCaseChangeModifiedFiles(SrcDir)
RevertCaseChangeModifiedFiles(SrcDir) {
global hg
includes = -I "*.form" -I "*.bas" -I "*.report" -I "*.table"
cmdline = %hg% revert --all %includes%
;Don't revert items that have been removed completely
Loop 3
{
Result := ConsoleApp_RunWait(hg . " status -nrd " . includes, SrcDir)
If (Result)
Break
}
Loop parse, Result, `n, `r
{
if (A_LoopField)
cmdline = %cmdline% -X "%A_LoopField%"
}
Result =
;msgbox %cmdline%
;revert all modified forms, reports, and code modules
Loop 3
{
Result := ConsoleApp_RunWait(cmdline, SrcDir)
If (Result)
Break
}
;MsgBox %Result%
Loop parse, Result, `n, `r
{
StringLeft FileStatus, A_LoopField, 9
If (FileStatus = "reverting")
{
StringMid FName, A_LoopField, 11
FullPath = %SrcDir%%FName%
ToolTip Checking %FullPath%
RestoreIfNotEqual(FullPath, FullPath . ".orig")
}
}
ToolTip
}
RestoreIfNotEqual(FName, FNameOrig) {
FileRead File1, %FName%
FileRead File2, %FNameOrig%
StringLower File1, File1
StringLower File2, File2
;MsgBox %FName%`n%FNameOrig%
If (File1 = File2)
FileDelete %FNameOrig%
Else
FileMove %FNameOrig%, %FName%, 1
}
RestoreOriginals(SrcDir) {
Loop %SrcDir%*.orig
{
;MsgBox %A_LoopFileLongPath%`n%NewName%
NewName := SubStr(A_LoopFileLongPath, 1, -5)
FileMove %A_LoopFileLongPath%, %NewName%, 1
}
while FileExist(SrcDir . "*.orig")
Sleep 10
}
Chúng tôi gặp lại bạn của mình! Bạn đã bao giờ tìm thấy một giải pháp, hoặc có lẽ một VCS có thể làm các trường hợp không phân biệt chữ hoa chữ thường? – RubberDuck
@RubberDuck: Bạn đã truyền cảm hứng cho tôi để cuối cùng đăng cách tiếp cận mà tôi đã sử dụng trong vài năm qua. Tôi đã không giải quyết được vấn đề hoàn toàn, nhưng tôi đã loại bỏ phần lớn nỗi đau. Về cơ bản, tôi bỏ qua các tập tin mà những thay đổi duy nhất là để vỏ. Nếu tệp có các thay đổi hợp pháp, tôi vẫn bị kẹt khi thấy các thay đổi của trường hợp, nhưng nó (rất nhiều) tốt hơn là không có gì. – mwolfe02