How does DeployHQ determine which files to upload?
DeployHQ does not upload every file on each deployment. Instead, it determines exactly which files have changed and only transfers those. This applies to both repository files and build pipeline output, and has always been the default behaviour.
Repository files
When a deployment runs, DeployHQ compares the start revision (the last commit that was successfully deployed to your server) with the end revision (the commit you are deploying now). Only files that differ between these two revisions are uploaded, updated, or removed on your server.
This means that if you push a commit that changes three files, only those three files will be transferred -- not your entire repository. The very first deployment to a new server is the exception: because there is no previous revision to compare against, every file in the repository is uploaded.
Build pipeline output
If you have a build pipeline configured, DeployHQ applies the same principle to your built assets. Each time a build runs, a manifest of all generated files is created and compared with the manifest from the last successful deployment.
- Changed files are uploaded
- Newly added files are uploaded
- Removed files (present in the previous manifest but not in the current one) are deleted from your server
When files go missing
Because DeployHQ only transfers differences, files can appear to be "missing" from your server if:
- Files were deleted or modified directly on the server outside of DeployHQ -- DeployHQ has no way of knowing about these changes, so it will not re-upload them.
- The server's recorded "last deployed revision" is out of sync with what is actually on the server.
- Build output changed in a way that caused assets to be excluded from the manifest.
In any of these cases, running a full deployment will re-upload everything. To do this, start a new deployment and set the start revision to "The very first commit".
Forcing a full upload of built assets
If you only need to re-upload your build pipeline output (not the entire repository), you can run one deployment with the build pipeline disabled, then another with it re-enabled. This resets the build manifest comparison and forces all built files to be transferred.
Further information on that process can be found in our troubleshooting guide.