您是否应该将已编译的资产签入Git?

时间:2015-05-29 19:54:45

标签: git deployment process build

所以我一直在和一些同事讨论这个问题,我想让其他人对此进行权衡。我很想知道其他开发人员在做什么。

我喜欢做的是忽略repo中的整个build / assets文件夹。此文件夹包含我编译的CSS,Javascript和压缩图像。我认为只应检查源文件。我发现每次我对样式表或JS文件进行更改时都会感到烦恼,我必须检查源文件和新编译的版本。当您有多个人在处理项目时,这也会引入合并冲突和其他问题。我喜欢让repo保持良好和轻松,然后让开发人员在本地构建项目以进行设置。或者在部署时,让服务器构建项目。

这有点问题,因为我的同事使用Git作为部署过程。因此,当您想要部署时,将代码检入git,将其推送到远程仓库,然后通过SSH连接到服务器并执行git fetch&& git pull。这意味着所有网站文件都必须存在于回购中。所以我现在必须检查我的资产文件夹。

你们怎么处理这个?我将bedrock-ansible用于Wordpress网站,并且可以选择在部署之前运行某些命令,因此我将其配置为运行npm install && gulp build并构建项目,但问题是它太慢了。 bedrock-ansible的工作方式是为每个部署创建一个新的发布目录,它只是将最新的一个目录链接到current目录。因此,每次部署时,它都运行npm install实际上,我只需要在一个共享目录中使用这些依赖项。可能有一种方法可以用npm install --prefix install/dir来做到这一点,但我还没有测试过它。我认为这可能会引入更多问题。

现在,我必须将所有已编译的资产签入git,以使其正常工作。但是在我的gulp watch任务中,我没有发生任何缩小,但是当我想要部署时,我想首先运行gulp build,这将缩小和丑化所有内容 - 所以从技术上来说,我会永远我想部署网站时必须提交。一团糟。您认为处理此问题的好方法是什么?

2 个答案:

答案 0 :(得分:2)

list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction=manager.beginTransaction(); Fragment f1 = manager.findFragmentById(R.id.pager); transaction.remove(f1); transaction.commit(); } }); 可以将所有已编译的文件放在gulp build目录中,dist/可以将此目录推送到远程。您可以使用git-directory-deploy

gulp publish

或者,您可以手动为已编译资产设置单独的分支,并在部署网站时将其推送到远程服务器(this SO answer可能有帮助)。

这样,您可以在开发分支上维护干净的历史记录,而不必担心合并冲突,同时仍将Git用作部署过程。

答案 1 :(得分:0)

您可以创建创建在本地运行时执行以下操作的任务,而不是直接sshing到服务器:

  • 碰撞版本
  • 构建项目
  • 使用--force选项
  • 将已编译的资产添加到git
  • 提交更改
  • 创建标记
  • 将所有内容推送到远程存储库
  • sshs到服务器
  • 拉动新资产