1

我已将我的项目上传到 GitHub 公共仓库。但是其中一个文件包含我的密码信息。我已经做出了一些承诺。如何从初始提交中隐藏我的密码?

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

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

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

提前致谢。

4

3 回答 3

6

GitHub 有一篇文章正是针对这一点的。在这里查看。总结这篇文章:您可以使用git filter-branch命令或 BFG Repo-Cleaner。BFG Repo-Cleaner 使用起来更容易、更快捷,所以我使用它。要使用 BFG Repo-Cleaner,请执行以下步骤:

  1. 在项目 repo 或使用 macos下载jar 文件brew install bfg
  2. --mirror使用以下标志克隆您的 repo 的新副本:

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 repo 文件夹并运行以下命令来检查仓库历史记录是否已更改:

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

接着

git gc

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

  1. 一旦你满意,通过运行推回你的远程仓库git push- 请注意,因为你--mirror在克隆你的仓库时使用了标志,当你推回你的仓库时,你也会推回参考更改。

要了解有关 BFG Repo-Cleaner 的更多信息,请访问此链接

于 2018-02-17T15:53:30.663 回答
1

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

# 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

于 2021-02-11T08:37:25.833 回答
0

首先复制文件(即app.py

从 git 历史记录中删除文件(替换PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATApath/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 repo,add然后commit

于 2020-12-03T23:23:52.463 回答