完全に素晴らしい解決策はありませんので、考慮すべきいくつかのオプションを紹介します。
まず、私は過去に、生産、qa、および開発用に別々のブランチを使用して、同様の状況に対処しました。これは、「ワンプッシュ」に対するあなたの欲求に違反しています。
次に、本当にすべてを単一のブランチに保持したい場合は、.gitignore を使用して特定のファイルを除外するという別の一般的な手法を使用できますが、さまざまなファイルへのソフトリンクを介して各作業ディレクトリにリンクします。リンクは、OSX、Unix 系 (Linux、FreeBSD など)、Windows NTFS など、ほとんどのオペレーティング システムで MKLINK コマンドを介してサポートされています。
リンクを使用してセットアップするには、.htaccess ファイルの名前を .htaccess-dev に変更し、それをコピーして、すべての環境で .htaccess-dev、.htaccess-qa に更新します。次に、.htaccess を .gitignore に追加し、最後に各環境で正しい環境へのソフトリンクを作成します。
たとえば、DEV システムが Windows の場合、次のように表示されます。
C:\code\dev-example>ren .htaccess .htaccess-dev
C:\code\dev-example>mklink .htaccess .htaccess-dev
symbolic link created for .htaccess <<===>> .htaccess-dev
C:\code\dev-example>dir
Volume in drive C is Boot
Volume Serial Number is DC8C-D5C9
Directory of C:\code\dev-example
06/02/2014 06:12 PM <DIR> .
06/02/2014 06:12 PM <DIR> ..
06/02/2014 06:09 PM 10 .gitignore
06/02/2014 06:09 PM <SYMLINK> .htaccess [.htaccess-dev]
06/02/2014 06:08 PM 22 .htaccess-dev
06/02/2014 06:12 PM 23 .htaccess-prod
4 File(s) 55 bytes
2 Dir(s) 13,497,245,696 bytes free
C:\code\dev-example>type .htaccess
# Config file for DEV
C:\code\dev-example>type .gitignore
.htaccess
このアプローチは、いくつかのさまざまな構成ファイルに対してはうまく機能しますが、そのようなファイルが多数ある場合は扱いにくくなり、.less ファイルを除外したいという要望には実際には対応できません。
最後に、プロジェクトを再編成して開発専用コードを個別のフォルダーに分けることができる場合は、本番サーバーで git sparse-checkout を使用して、本番環境で必要なフォルダーのみを取得できます。ソフトリンクされた構成ファイルを使用することと組み合わせることで、dev/qa/prod で異なる作業フォルダーを維持しながら、シングルプッシュ ワークフローを実現できる可能性があります。http://briancoyner.github.io/blog/2013/06/05/git-sparse-checkout/を参照してください。