簡體   English   中英

如何重命名git子模塊,保留對包含子模塊的git存儲庫的子模塊提交的引用?

[英]How to rebase git submodule preserving references to submodule commits from git repository containing the submodule?

(目前我正在修復我的舊存儲庫,然后才發布。)

我已經知道如何在git歷史中重寫提交作者的電子郵件和名稱

我有一個帶子模塊的git項目。 我想重寫這些子模塊的歷史記錄,但是因為我在開發過程中快速轉發這些子模塊,我想修改主git repo中指向某些子模塊的鏈接提交到指向子模塊rebase之后的新提交的鏈接。 即我需要將git子模塊與包含此子模塊的rebased git存儲庫結合使用。 (對不起,文字太久了,我不知道如何描述那么短。)

如何與包含子模塊的git存儲庫歷史記錄同步重寫git子模塊歷史記錄?

正如我在“ 重寫子模塊歷史后的子模塊存儲庫 ”中提到的,沒有簡單的解決方案。

您將不得不使用git filter-branch重寫主倉庫的歷史記錄,尋找特定的提交,包括gitlink索引中的特殊條目

首先需要在子模塊舊歷史的SHA1和主倉庫使用的gitlink之間建立對應關系

 cd /submodule/repo/just/rewritten/
 # the old history is still available in refs/original
 git -C /path/to/rewritten/repo for-each-ref --format="%(refname)" refs/original

 cd /main/repo
git for-each-ref --contains <SHA1> # SHA being a SHA1 from the old submodule history

然后你需要更換

git filter-branch --prune-empty --tree-filter 'change_gitlink'

change_gitlink將是一個進入子模塊文件夾的腳本(因此--tree-filter ,而不是--index-filter ),簽出新的SHA1(來自子模塊的新歷史記錄)。 過濾器分支將提交新的repo狀態,包括新的gitlink(因為子模塊已在右側的新SHA1中檢出)

暫無
暫無

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

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