.gitignore工作错误,结帐分支时文件消失

时间:2016-10-26 17:30:30

标签: git

我对.gitignore感到有些困惑。这是我在Rails开发的内容,我不希望将secrets.ymldatabase.yml上传到Github

我认为我只需要在AWS EC2上修改这两个文件,因此我将它们添加到.gitignore

然后我跑

git rm --cached secrets.yml database.yml

清除我的git曲目文件状态。

因此,这两个文件仍在文件夹中,但无法将其添加到git曲目列表中。

但是,我在checkout其他branch时发现了,然后又回来了。这两个文件会消失,发生了什么?

2 个答案:

答案 0 :(得分:1)

Git分别为每个分支存储这些文件。因此,您可以在许多分支上拥有具有不同内容的相同文件。您还可以将文件放在一个分支上,并将其从另一个分支中移除(这可能是您目前拥有的分支)。

如果您已将文件推送到Github,秘密已公开,应尽快更改。不要只是删除文件,你永远不能确定没有人复制它们!

正如评论中所提到的,您可以filter-branch文件输出并强制推送存储库,但如果有其他人签出存储库,这会破坏一些内容。我宁愿使用git rm --cached从所有分支中删除该文件,并推送分支以保持稳定的历史记录并更改秘密。

您可以从所有分支机构自动删除文件:

for branch in $(git for-each-ref --format='%(refname)' refs/heads/); do
    git checkout "$branch"
    git rm --cached config/secrets.yml config/database.yml
    git commit -m 'Remove secrets.yml'
done
echo "Remember to git push"

如果您尚未推送分支,则可以过滤掉文件(取自this answer):

git filter-branch --index-filter 'git rm --cached --ignore-unmatch config/secrets.yml config/database.yml' --all

答案 1 :(得分:0)

滤镜分支效果很好,但非常不直观且规模较慢。很多提交。

GitHub建议:https://rtyley.github.io/bfg-repo-cleaner/