我正在使用git-p4具有完整歷史記錄的Perforce 將多個分支匯入 git ,并且運行良好,只是各個分支最終都“無尾”。我確切地知道在哪個修訂版(作為 Perforce 更改串列編號和現在作為新創建的 git 修訂版)中的每一個都從主干分支出來,我非常希望在我的新 git 中明確反映這一點存盤庫,但我似乎無法弄清楚如何實作它。
具體來說,匯入后,如果我git log在我的任何分支上執行 a ,它總是有一個沒有父級的“最后”(最早)修訂。我想對其進行裝配,以便修訂版有一個父級,它是master.
大概我不能直接將一個分支拼接到master(即,簡單地設定它的parent鏈接),因為 git hashes 反映了完整的歷史,所以我分支上的所有散列都可能需要調整,我可以接受。我可能需要某種型別的變基操作,但同樣,我似乎無法弄清楚如何去做。到目前為止,我嘗試過的所有事情都試圖“重放”更改,好像要創建所有內容的略有不同的版本,并且它們導致了許多我沒有時間也不想的合并沖突解決。每個修訂版的內容都非常好(由 創造git-p4);我想要做的就是重新調整它們連接在一起的方式。
具體來說,我想改變這一點:

進入這個:

我已經查看了git-p4的--detect-branches選項,但看起來它也不會做我想做的事。如果有一種方法可以git p4 sync為分支中的“最后一個”修訂版設定父級,而不是讓它成為孤兒,那將是完美的,但我沒有找到方法。
git-p4拋開所有細節,我認為我想要的是(實際上)一種強制特定修訂的方法——特別是在我的一個分支的“尾部”的這些孤立(無父)修訂中的一個——擁有parent一個 SHA 鏈接我選擇的散列,然后重新計算該修訂的散列(及其所有子項)以反映它。我想我可以戴上水管工的帽子并撰寫自己的腳本來以某種方式執行此操作,但我希望有一種支持的方式。
uj5u.com熱心網友回復:
您可以使用 filter-branch 來做到這一點。
- 分別克隆分支
- 使用多個遙控器組合存盤庫
- 使用 filter-branch 將父級添加到新的分支
來自:https : //labs.consol.de/development/git/2017/09/08/reunite-separate-git-repositories.html
這些天使用https://github.com/newren/git-filter-repo可能更好- 但我還沒有嘗試過。
https://github.com/newren/git-filter-repo/blob/main/Documentation/converting-from-filter-branch.md#re-grafting-history 似乎更清晰地涵蓋了這種情況。
uj5u.com熱心網友回復:
根據您的描述,我認為您缺少branchList配置選項。請閱讀git-p4 檔案的分支檢測部分以獲取更多資訊。
順便說一下,分支演算法依賴于 P4 中的初始復制操作在沒有檔案更改的情況下完成,以便在新分支開始的源分支中找到確切的提交。否則,新分支將在源分支的頂部創建,您最終可能會得到不一致的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/373774.html
