・ .gitignore で .env, *.env 系を指定
・サンプルとして .env.sample, *.env.sample を用意
・デプロイ用スクリプトで、 *.env.sample に対応する *.env が存在しない場合に警告やエラーを出す
こんな感じでそれなりに悪くない状況は作れる
とはいえ、公開できるファイルは GitHub にそのまま push するとかでもいいんだけど、結局 env 系のデータとかはどこに置いて管理したものか悩みません?
そういったファイル群を /env/ とかにまとめといて、そっちを submodule にして、非公開リポジトリに push するとかが、たぶんひとつの正解なんですけど
で、どうしてもパス固定の .env とかがあっても symlink 使えば UNIX 環境では困らないし