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

时间:2018-02-17 15:46:28

标签: git github repository password-protection sensitive-data

我已将我的项目上传到GitHub公共回购。但其中一个文件包含我的密码信息。我已经做过几次提交。如何从初始提交中隐藏我的密码?

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

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

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

提前致谢。

3 个答案:

答案 0 :(得分:1)

GitHub正好有一篇文章。看看here。总结一下这篇文章:您可以使用--mirror命令或BFG Repo-Cleaner。 BFG Repo-Cleaner更容易使用,因此我使用它。要使用BFG Repo-Cleaner,请按照以下步骤操作:

  1. Download项目仓库中的jar文件。
  2. 使用git clone --mirror git://example.com/some-big-repo.git标记克隆您的仓库的新副本:
    git clone --mirror https://example.com/some-big-repo.git如果使用SSH或
    如果使用HTTPS,则java -jar bfg.jar --delete-files [FILE NAME] --no-blob-protection my-repo.git 这是一个裸存储库,因此您无法查看文件,但它将是包含所有提交的存储库的完整副本。
  3. 然后,您可以使用以下命令从先前的提交中删除特定文件:
    git reflog expire --expire=now --all && git gc --prune=now --aggressive
  4. 在推回到您的仓库之前,通过进入您的git repo文件夹并运行以下命令来检查仓库历史记录是否已更改:
    git gc - git push删除了您不希望将数据推回到您的仓库的不需要的数据。
  5. 一旦您满意,请通过运行--mirror将其推回到您的远程仓库 - 请注意,因为您在克隆回购时使用了{{1}}标记,当您回到回购时,您将也会推迟参考变更。
  6. 要了解有关BFG Repo-Cleaner的更多信息,请访问此link

答案 1 :(得分:0)

首先获取文件的副本(即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 repo,然后移至addcommit

答案 2 :(得分:0)

这里有一种替代且快速的解决方法,可以在不删除文件的情况下更改合理数据。

# 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