在 Github 回购上的所有先前提交中隐藏密码

Hide password in all previous commits on Github repo

我已将我的项目上传到 GitHub public 存储库。但是其中一个文件包含我的密码信息。我已经做了几个承诺。如何在初次提交时隐藏我的密码?

没有单独的密码文件。所以在这种情况下我不能使用 .gitignore 。密码硬编码在处理应用程序主要逻辑的 app.py 文件中。所以,我不能使用 BFG Repo-Cleaner。是否可以通过覆盖先前的提交来删除文件并添加新文件?

我已经在文件中进行了更改并推送了一个回购协议。但是,以前的提交仍然显示我的密码信息。另外,我对创建新的 repo 和删除旧的不感兴趣(除非我别无选择)。

如果能得到一些帮助,我会很高兴。

提前致谢。

GitHub 有一篇文章正是针对此内容。检查一下 here。总结这篇文章:您可以使用 git filter-branch 命令或 BFG Repo-Cleaner。 BFG Repo-Cleaner 使用起来更简单快捷,所以我使用它。要使用 BFG Repo-Cleaner 请按照以下步骤操作:

  1. Download 项目仓库中的 jar 文件或与 macos 使用 brew install bfg
  2. 使用 --mirror 标志克隆您的存储库的新副本:

git clone --mirror git://example.com/some-big-repo.git

如果使用 SSH 或

git clone --mirror https://example.com/some-big-repo.git

如果使用 HTTPS。

这是一个裸存储库,因此您将无法看到您的文件,但它将是包含所有提交的存储库的完整副本。

  1. 然后您可以使用以下命令从以前的提交中删除特定文件:

java -jar bfg.jar --delete-files [FILE NAME] --no-blob-protection my-repo.git

或者如果安装到 PATH

bfg --delete-files [FILE NAME] --no-blob-protection my-repo.git

或从旧提交中删除密码

bfg --replace-text passwords.txt

  1. 在推送回您的存储库之前,通过进入您的 git 存储库文件夹和 运行 以下命令检查存储库历史记录是否已更改:

git reflog expire --expire=now --all && git gc --prune=now --aggressive

然后

git gc

删除您不想推送回您的存储库的不需要的数据。

  1. 一旦你高兴了,通过 运行 git push 推回到你的远程仓库 - 请注意,因为你在克隆你的仓库时使用了 --mirror 标志,当你推回到您的回购协议,您还将推迟参考更改。

要阅读更多关于 BFG Repo-Cleaner 的信息,请访问此 link

首先复制一份文件(即app.py)

从 git 历史记录中删除文件(将 PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA 替换为 path/to/app.py)(如果您从远程存储库克隆,则还需要推送存储库):

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \
  --prune-empty --tag-name-filter cat -- --all
git push --force --verbose --dry-run
git push --force

现在从 app.py 文件中删除密码并将其移动到 git 存储库,然后是 addcommit

这是一种替代的快速解决方法,可以在不删除文件的情况下更改敏感数据。

# Sync with the remote master
git pull

# Force your clone to look like HEAD
git reset --hard

# AGAIN, A WARNING: This can really break stuff!

# Run your filter branch command, replacing all instances of "password" with "your_password"
# The example looks for Ruby files ("*.rb"), you can change this to match your needs
git filter-branch --tree-filter 'git ls-files -z "*.rb" |xargs -0 perl -p -i -e "s#(password)#your_password#g"' -- --all

# Overwrite your master with local changes
git push origin master --force

来源:https://palexander.posthaven.com/remove-a-password-from-gits-commit-history-wi