2014-03-12 56 views
3

在Git中,我們存儲數據庫中的數據。一個自定義的.Net應用程序被創建來將這些數據存儲在文本文件中(每個表格一個)。這工作正常,但隨着更多用戶加入團隊,我們遇到了很多合併衝突。GIT客戶合併驅動程序問題(Windows msysgit 1.9.0)

爲了解決這個問題,我試圖開發一個自定義的合併驅動來替代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 

以*爲前綴的行只是我的應用程序所做的評論。

完成此操作後,「FocalPoint/Data/OBV_USERS.TXT」已正確合併(我的程序按預期工作),但是存儲庫仍處於REBASE狀態。

這是我的Git配置文件:

[merge "OBVData"] 
    name = OBVData Custom Merge 
    driver = "DataMergeDriver.exe" %A %O %B 
    recursive = binary 

這是屬性上的目錄中的數據需要使用這種合併方法文件。

* merge=OBVData 

我的應用程序將只使用A O和B文件來計算如何更新A文件。這個A文件就是拉取過程完成後的FocalPoint/Data/OBV_USERS.TXT的內容。

我已經嘗試了所有我能想到的方法來解決這個問題,但是我很擔心這個問題。

+1

也許退出狀態不是Git推斷的狀態?嘗試將你的exe調用包裝在一個unix shell中(甚至只是爲了測試,試着用一個簡單的unix腳本替換你的exe),只是爲了看看在這種情況下rebase狀態是否更好地管理。一個小腳本的例子:http://nuclearsquid.com/writings/git-tricks-tips-workflows/#gitattributes5 – VonC

+1

我第二個這個。 Windows程序員傾向於完全忽略退出代碼,因爲他們通常使用的工具正在積極幫助他們這樣做;-)所以,是的,你的程序應該是類型控制檯(我想它已經是),不能退出,直到操作完成(也就是說,它不能產生另一個可執行文件並退出),並且它必須在成功解決衝突時返回0,否則返回非零值。 – kostix

回答

2

經過幾個小時的測試後,我發現這個問題。問題是我發送Windows行結束與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); 
     } 
+0

好的。然後,與我最初評論的狀態無關。 +1 – VonC