重命名所有 git 存储库提交中的短语(在子模块中)
Renaming phrase in all git repository commits (in submodules)
如何重命名 git 子模块中所有先前提交的短语?
phrase1 to phrase2
我的短语在 .pack 文件中找到。 (我缩短了十六进制 .pack 名称):
$ grep -rnw . -e 'phrase1'
Binary file ./.git/modules/folder1/objects/pack/pack-6170d.pack matches
Binary file ./.git/modules/folder2/modules/objects/pack/pack-934ef.pack matches
Binary file ./.git/modules/folder2/objects/1b/2eeaa matches
Binary file ./.git/modules/folder2/objects/1e/92b8b matches
Binary file ./.git/objects/54/fcce26 matches
我在 repo 上尝试了 运行 BFG,但我得到了这个输出:
java -jar bfg-1.13.0.jar -rt expression_file.txt /my_repo/
...
BFG aborting: No refs to update - no dirty commits found??
...
我尝试了 运行 BFG 和“--no-blob-protection”参数,但我得到了相同的输出:
...
BFG aborting: No refs to update - no dirty commits found??
...
我的 expression_file.txt 有这样的格式:
phrase1 ==> phrase2
我研究过使用 "git filter branch",但我不确定要给它什么命令来让它重写这些文件。
只是回答问题的 git filter-branch
部分。
以下是如何使用它在所有 .txt
文件中将 phrase1
替换为 phrase2
:
git filter-branch -f --tree-filter '
find . -type f -name '*.txt' -exec sed -i 's/phrase1/phrase2/g' {} +
' --prune-empty --all
请注意,这可能非常耗时。 --all
选项将在所有分支中执行替换。
如何重命名 git 子模块中所有先前提交的短语?
phrase1 to phrase2
我的短语在 .pack 文件中找到。 (我缩短了十六进制 .pack 名称):
$ grep -rnw . -e 'phrase1'
Binary file ./.git/modules/folder1/objects/pack/pack-6170d.pack matches
Binary file ./.git/modules/folder2/modules/objects/pack/pack-934ef.pack matches
Binary file ./.git/modules/folder2/objects/1b/2eeaa matches
Binary file ./.git/modules/folder2/objects/1e/92b8b matches
Binary file ./.git/objects/54/fcce26 matches
我在 repo 上尝试了 运行 BFG,但我得到了这个输出:
java -jar bfg-1.13.0.jar -rt expression_file.txt /my_repo/
...
BFG aborting: No refs to update - no dirty commits found??
...
我尝试了 运行 BFG 和“--no-blob-protection”参数,但我得到了相同的输出:
...
BFG aborting: No refs to update - no dirty commits found??
...
我的 expression_file.txt 有这样的格式:
phrase1 ==> phrase2
我研究过使用 "git filter branch",但我不确定要给它什么命令来让它重写这些文件。
只是回答问题的 git filter-branch
部分。
以下是如何使用它在所有 .txt
文件中将 phrase1
替换为 phrase2
:
git filter-branch -f --tree-filter '
find . -type f -name '*.txt' -exec sed -i 's/phrase1/phrase2/g' {} +
' --prune-empty --all
请注意,这可能非常耗时。 --all
选项将在所有分支中执行替换。