我没有给你一个非常棒的解决方案,所以我会给你几个选择来考虑。
首先,我过去曾通过使用单独的生产、qa 和 dev 分支来解决类似的情况。这确实违反了您对“单推”的渴望。
其次,如果您真的想将所有内容保存在一个分支中,您可以使用另一种常用技术,即使用 .gitignore 排除特定文件,但通过指向不同文件的软链接链接到每个工作目录中的文件。大多数操作系统都支持链接,包括 OSX、类 Unix(Linux、FreeBSD 等)和通过 MKLINK 命令的 Windows NTFS。
要使用链接进行设置,您可以将 .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 来仅获取您想要在 prod 中的文件夹。结合使用软链接配置文件,这可能允许您拥有单推工作流,同时在 dev/qa/prod 中维护不同的工作文件夹。见http://briancoyner.github.io/blog/2013/06/05/git-sparse-checkout/