在 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 请按照以下步骤操作:
- Download 项目仓库中的 jar 文件或与 macos 使用
brew install bfg
- 使用
--mirror
标志克隆您的存储库的新副本:
git clone --mirror git://example.com/some-big-repo.git
如果使用 SSH 或
git clone --mirror https://example.com/some-big-repo.git
如果使用 HTTPS。
这是一个裸存储库,因此您将无法看到您的文件,但它将是包含所有提交的存储库的完整副本。
- 然后您可以使用以下命令从以前的提交中删除特定文件:
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
- 在推送回您的存储库之前,通过进入您的 git 存储库文件夹和 运行 以下命令检查存储库历史记录是否已更改:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
然后
git gc
删除您不想推送回您的存储库的不需要的数据。
- 一旦你高兴了,通过 运行
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 存储库,然后是 add
和 commit
这是一种替代的快速解决方法,可以在不删除文件的情况下更改敏感数据。
# 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
我已将我的项目上传到 GitHub public 存储库。但是其中一个文件包含我的密码信息。我已经做了几个承诺。如何在初次提交时隐藏我的密码?
没有单独的密码文件。所以在这种情况下我不能使用 .gitignore 。密码硬编码在处理应用程序主要逻辑的 app.py 文件中。所以,我不能使用 BFG Repo-Cleaner。是否可以通过覆盖先前的提交来删除文件并添加新文件?
我已经在文件中进行了更改并推送了一个回购协议。但是,以前的提交仍然显示我的密码信息。另外,我对创建新的 repo 和删除旧的不感兴趣(除非我别无选择)。
如果能得到一些帮助,我会很高兴。
提前致谢。
GitHub 有一篇文章正是针对此内容。检查一下 here。总结这篇文章:您可以使用 git filter-branch
命令或 BFG Repo-Cleaner。 BFG Repo-Cleaner 使用起来更简单快捷,所以我使用它。要使用 BFG Repo-Cleaner 请按照以下步骤操作:
- Download 项目仓库中的 jar 文件或与 macos 使用
brew install bfg
- 使用
--mirror
标志克隆您的存储库的新副本:
git clone --mirror git://example.com/some-big-repo.git
如果使用 SSH 或
git clone --mirror https://example.com/some-big-repo.git
如果使用 HTTPS。
这是一个裸存储库,因此您将无法看到您的文件,但它将是包含所有提交的存储库的完整副本。
- 然后您可以使用以下命令从以前的提交中删除特定文件:
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
- 在推送回您的存储库之前,通过进入您的 git 存储库文件夹和 运行 以下命令检查存储库历史记录是否已更改:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
然后
git gc
删除您不想推送回您的存储库的不需要的数据。
- 一旦你高兴了,通过 运行
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 存储库,然后是 add
和 commit
这是一种替代的快速解决方法,可以在不删除文件的情况下更改敏感数据。
# 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