GIT客户合并驱动程序问题(Windows msysgit 1.9.0)

GIT客户合并驱动程序问题(Windows msysgit 1.9.0),git,git-merge,Git,Git Merge,在Git中,我们存储数据库中的数据。创建了一个自定义.Net应用程序,将此数据存储在文本文件中(每个表一个)。这很好,但是随着更多用户加入团队,我们遇到了许多合并冲突 为了解决这个问题,我尝试开发一个自定义合并驱动程序来取代Git内置的合并驱动程序。我已经测试了这个应用程序,当从命令行使用它时,它可以正常工作。然而,当我把它集成到Git中时,我得到了这个错误 $ git pull First, rewinding head to replay your work on top of it...

在Git中,我们存储数据库中的数据。创建了一个自定义.Net应用程序,将此数据存储在文本文件中(每个表一个)。这很好,但是随着更多用户加入团队,我们遇到了许多合并冲突

为了解决这个问题,我尝试开发一个自定义合并驱动程序来取代Git内置的合并驱动程序。我已经测试了这个应用程序,当从命令行使用它时,它可以正常工作。然而,当我把它集成到Git中时,我得到了这个错误

$ git pull
First, rewinding head to replay your work on top of it...
Applying: test
Using index info to reconstruct a base tree...
M       FocalPoint/Data/OBV_USERS.TXT
Falling back to patching base and 3-way merge...
*PKEY Added[<USR_ID>PRJ8</USR_ID>] - In Both Kept Yours
*OBVDataMerge Mods[1] Ads[0] Dels [0]
error: addinfo_cache failed for path 'FocalPoint/Data/OBV_USERS.TXT'
Auto-merging FocalPoint/Data/OBV_USERS.TXT
FocalPoint/Data/OBV_USERS.TXT: unmerged (d9985c8288b16fb072c314e7aa68401ac5c30491)
FocalPoint/Data/OBV_USERS.TXT: unmerged (f18085d169223241c2f70a12bbdea7dc879d5bbf)
FocalPoint/Data/OBV_USERS.TXT: unmerged (af1e6a12f0d7fab318dba4be5317644595ef8745)
fatal: git-write-tree: error building trees
这是需要使用此合并方法的数据所在目录上的属性文件

* merge=OBVData
我的应用程序将只使用AO和B文件来确定如何更新A文件。拉取过程完成后,该文件即为FocalPoint/Data/OBV_USERS.TXT的内容


我已经尝试了我能想到的各种组合来解决这个问题,但是我不知道问题出在哪里。

经过几个小时的测试,我发现了这个问题。问题是我发送的是以Windows行结尾的vs linux(“\r\n”vs“\n”)

如果用%A指定的文件已更新,并且包含Windows行结尾,则会出现上述错误

添加这行代码后,一切都按预期进行

       System.IO.StreamWriter outFile = new System.IO.StreamWriter(outFileName, false);
-->    outFile.NewLine = "\n";**
       foreach (LineItem li in L_Theirs)
       {
             outFile.WriteLine(li.Line);
       }

也许退出状态不是Git期望得出的状态?尝试将exe调用封装在unix shell中(甚至,为了测试,尝试用一个简单的unix脚本替换exe),看看在这种情况下是否可以更好地管理rebase状态。一个小脚本的例子:我支持这个。Windows程序员倾向于完全忽略退出代码,因为他们通常使用的工具正在积极帮助他们这样做;-)因此,是的,您的程序应该是console类型(我想它已经是了),在操作完成之前不能退出(也就是说,它不能生成另一个可执行文件并退出),如果成功解决了冲突,它必须返回0,否则返回非零。很好。与我最初评论的状态无关,然后+1.
       System.IO.StreamWriter outFile = new System.IO.StreamWriter(outFileName, false);
-->    outFile.NewLine = "\n";**
       foreach (LineItem li in L_Theirs)
       {
             outFile.WriteLine(li.Line);
       }