簡體   English   中英

什么是 git-rerere,它是如何工作的?

[英]What is git-rerere and how does it work?

據我了解,通過保存沖突解決信息對項目同步很有用,但我並不完全清楚如何使用和配置它。

我想為我的持續集成 (CI) 環境進行配置。 是否建議這樣做?

請不要用其他問題標記重復: 啟用 git rerere 有什么缺點嗎? . 因為我的懷疑與“那么啟用 rerere 有什么缺點嗎?它會導致哪些潛在問題不會發生?”

什么是git rerere

正如文檔所述rerere代表重新使用re corded re解決方案。

但這並沒有真正解釋它是什么 值得首先添加,這里, git rerere本身 - 命令 - 不是你必須運行的東西。 它只有六個子命令: clearforgetdiffstatusremaininggc 這些都沒有記錄或重復使用分辨率 - 實際上, git rerere cleargit rerere forget <path>丟棄一些記錄的分辨率。 gc命令類似,但指的是舊的,而不是當前的。

大部分工作都是在rerere.enabled設置rerere.enabled (這使得Git在適當的時候運行git rerere ,沒有子命令)。 你可以自己運行沒有子命令的git rerere ,但這並沒有真正做任何重要事情,因為Git會自己做。

git config rerere.enabled true

一旦你設置了rerere.enabled ,當Git進行合並 - 任何合並,包括那些來自git amgit rebase以及git cherry-pick等等,不僅僅是那些來自git merge本身 - 並且遇到沖突,Git會:

  1. 記錄(一旦合並為動詞擊中他們)沖突的差異;
  2. 等你手動解決它們;
  3. 記錄(在git commit時)你做了什么來解決它們。

這里有一個缺失的步驟,這就是為什么從2開始編號的原因。步驟1是:

  1. 檢查以前記錄的這些沖突的解決方案:如果存在,請使用它們自動解決這些沖突。

如果記錄的分辨率完全解決沖突,則步驟2-4變得多余。 Git可能仍會運行它們(我不確定它是否會)更新記錄的分辨率上的時間戳。

摘要

一旦你設置了rerere.enabled ,它就是合並自己的行為,它們都會產生沖突並且 (因為它會自動運行沒有參數的git rerere )記錄它們,然后嘗試重用任何現有的記錄分辨率。 這是記錄最終決議的承諾行為(因為Git會再次為你自動運行git rerere )。 所以這一切都是自動的 - 您只需要通過運行自己的git diff命令確保您以前重復使用的分辨率是正確的。 如果沒有,只需像往常一樣修復文件,添加和提交,Git將用新的解決方案替換錄制的分辨率。

請注意,您仍然必須git addgit commit 您應該始終檢查合並結果 (和/或運行測試) - 盡管您應該始終這樣做,無論您的rerere.enabled設置如何。

正如VonC在評論中指出的那樣 ,如果您之前沒有記錄的合並沖突解決方案,則可以在這些分辨率上“訓練”rerere數據庫。 Git源代碼中有一個貢獻的腳本來執行此操作; 它也可以在線獲得。

為CI環境啟用rerere是沒有意義的,因為您的CI環境永遠不應該首先解決合並沖突。 為什么你認為你會想要它?

我似乎無法讓 rerere train 腳本正常工作。 它只是不斷地要求我輸入我的密碼來簽署我認為回購中可用的每一個提交。

git 2.38(2022 年第 3 季度)的要求應該更少:“ rerere-train ”腳本(在contrib/中)用於在重新創建一次性合並時兌現commit.gpgSign 這已得到修復。

請參閱Celeste Liu ( CoelacanthusHex ) 提交的 cc391fc (2022 年 7 月 20 日)。
(由Junio C Hamano -- gitster --提交 f0f9a03中合並,2022 年 8 月 1 日)

contrib/rerere-train : 避免無用的 gpg 登錄訓練

簽字人:Celeste Liu

用戶可能已將“ git mergeman配置為始終要求 GPG 對生成的提交進行簽名。
我們不是運行“ git merge ”來重新創建合並提交,而只是重放合並沖突,我們將立即丟棄結果提交; 簽署它們是沒有意義的。

使用“ --no-gpg-sign ”選項覆蓋強制從命令行進行無用簽名的配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM