2016-08-05 118 views
1

我正在開發使用JGit的應用程序。如何與JGit衝突線

拉出後,我有衝突的文件。我可以從

List<String> list = git.status().call().getConflicting(); 

該列表包含衝突的文件。

我知道,我可以從

Map<String, int[][]> conflicts = git.pull().call().getMergeResult().getConflicts(); 

得到衝突的文件,但如果我重新啓動我的應用程序這是行不通的。重新啓動後,我將會有一個空映射,因爲當存儲庫處於合併狀態時,我無法重新執行pull操作。

如何通過JGit API獲取文件名衝突的行?

回答

1

你可以嘗試使用ResolveMerger重新運行合併,像這樣:

ThreeWayMerger merger = StrategyResolve.newMerger(repository, true); 
merger.merge(headCommit, fetchedCommit); 

注意,即拉期間稱爲MergeCommand可以使用不同的合併策略。詳情請參閱MergeCommand〜337行。但是,請確保創建內核合併(第二個參數必須爲true)。

隨着merger.getMergeResults()你應該能夠得到衝突的線。

整個逼近,然而,可能會失敗,因爲你的工作目錄是衝突標記已經髒(< < < < < < < <)。根據您的總體目標,我建議您重新考慮您的拉動方法。

如果您從上游存儲庫中提取更改(不立即合併),您可以按照上面概述的那樣按需進行幹運行合併。由FetchCommand::call()返回的FetchResult包含有關提取的提交的信息。

+0

感謝您的回答。我會檢查它tommorow和寫文章。 –

+0

這是工作。現在,我嘗試瞭解MergeResult 的API。非常感謝 –