我最近将Git集成到了我的工作流程中,并且我对其功能印象深刻。它不仅是一个伟大的VCS,它在通过ssh推送时围绕FTP运行。我今晚确实遇到了麻烦,我想知道你是不是很好的人可以帮我解决它。
我希望跟踪项目中的某些文件,但不想推送到生产环境。有没有办法在从repo中排除某些文件时推送到生产服务器?两个很好的例子:
如果可能的话,我希望将所有内容保持在一次提交/推送之下。我的工作流程非常简单(除了这一件事),添加额外的步骤或复杂的因素会让我感到悲伤。
我不知道它是否有帮助,但我使用Tower来帮助管理所有内容。
答案 0 :(得分:2)
我没有一个非常棒的解决方案,所以我会给你一些选择。
首先,我通过使用单独的分支进行生产,qa和dev来解决类似的情况。这确实违反了你对“单一推动”的渴望。
其次,如果您真的想将所有内容保存在一个分支中,您可以使用另一种常用技术,即使用.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/
答案 1 :(得分:1)
在Git中无法推送没有特定文件的提交。提交由它的变更集的哈希值和它所基于的提交(它是变更集和先前提交的哈希)来标识。排除文件会更改至少一个更改集,这反过来会更改哈希值(除非您碰巧遇到相同的哈希值,但这种情况非常罕见,几乎不值得一提)。
但是,如果可以排除在生产环境中检出文件。它们仍然在生产机器上,但在那里的本地存储库的Git索引内压缩,它们几乎不占用任何空间而且不会干扰任何东西。
为了实现这一点,您需要能够在您将要推送到的生产环境中的裸存储库上设置挂钩。推送后,您需要使用此命令:
git archive --remote <path-to-bare-repo> --format tar <branch-to-checkout> | tar --extract --directory <path-to-extract> --exclude <pattern-of-files-to-exclude>
此命令将创建分支当前树的tar归档表示,而不是常规签出。该存档通过tar
传输,以将其转换为光盘上的实际文件。 tar
接受--exclude
标记,该标记允许您指定要排除的文件。