我对.gitignore
感到有些困惑。这是我在Rails
开发的内容,我不希望将secrets.yml
和database.yml
上传到Github
。
我认为我只需要在AWS EC2
上修改这两个文件,因此我将它们添加到.gitignore
。
然后我跑
git rm --cached secrets.yml database.yml
清除我的git
曲目文件状态。
因此,这两个文件仍在文件夹中,但无法将其添加到git
曲目列表中。
但是,我在checkout
其他branch
时发现了,然后又回来了。这两个文件会消失,发生了什么?
答案 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)
滤镜分支效果很好,但非常不直观且规模较慢。很多提交。