git 以前的许多commit中某个文件含有密钥,怎么办?
一、场景描述
在这个项目中,代码的都是在develop分支上进行的, 现在要打tag v1.0.0进行发版。然而,从项目init开始到现在有很多commit,其中某个文件中把密钥直接写在了源码中,最近几次提交才把密钥处理了。
二、问问 gpt1
git 一开始项目的很多提交中某个文件含有密钥,最近的几次commit中才把密钥隐藏掉,那么怎样清除之前的很多次commit中密钥; 我想把之前所有提交中密码不为的都改为 该怎么操作
要将之前所有提交中的密码更改为 ***
,可以使用 git filter-branch
命令结合自定义脚本来实现。请按照以下步骤进行操作:
首先,在你的项目目录下打开终端,并确保你当前在所需的分支上(例如,
master
分支)。运行以下命令来备份你的代码:
1
git branch backup
创建一个名为
replace_password.sh
的脚本文件,并使用文本编辑器打开它。在
replace_password.sh
文件中,输入以下内容:1 2 3 4 5 6
#!/bin/bash git ls-files -z | while read -d '' -r file; do if [[ $file == *"<文件路径>"* ]]; then sed -i 's/密码模式/*** /g' "$file" fi done
将
<文件路径>
替换为包含密码的文件的路径或文件夹的路径。这将会在指定文件中查找并替换密码。保存并关闭
replace_password.sh
文件。运行以下命令来添加执行权限给脚本文件:
1
chmod +x replace_password.sh
现在,运行以下命令来执行
git filter-branch
操作,并使用脚本文件作为过滤器:1
git filter-branch --tree-filter '/path/to/replace_password.sh' --prune-empty HEAD
将
/path/to/replace_password.sh
替换为replace_password.sh
文件的实际路径。Git 将会遍历所有的提交,并在每个提交上运行脚本文件,查找并替换指定文件中的密码。完成后,你的历史提交将被重写。
如果你已经将这些提交推送到远程仓库,你需要使用
git push --force
强制推送修改后的提交历史:1
git push --force
这样,你就可以使用自定义脚本来批量替换之前所有提交中的密码。但请注意,执行 git filter-branch
操作时,也要小心谨慎,因为它会修改提交历史。确保在操作之前备份代码,并在必要时咨询有经验的 Git 使用者或开发者。
git filter-branch –tree-filter ‘/path/to/replace_password.sh’ –prune-empty HEAD 解释下这个命令
当你运行 git filter-branch 命令时,它会遍历 Git 仓库的每个提交,并对每个提交应用指定的过滤器。在这个命令中,我们使用了 –tree-filter 参数来指定一个以树形结构过滤提交的过滤器。
下面解释一下命令中各个部分的含义:
git filter-branch: 这是执行过滤操作的 Git 命令。
–tree-filter: 这是指定要应用的过滤器类型。–tree-filter 可以在每个提交的工作目录中运行指定的命令。
‘/path/to/replace_password.sh’: 这是具体的过滤器命令。在每个提交中,它运行 /path/to/replace_password.sh 命令来修改
HEAD: 这是指定要过滤的提交范围。在这个命令中,我们使用 HEAD 表示过滤当前分支上的所有提交。
通过运行上述命令,Git 将会遍历每个提交,并在每个提交上执行指定的命令,移除包含密钥文件的文件。完成后,
三、小结:
简化一些:
|
|
- filter-branch2