For those people already utilizing third party sync tools such as
unison, it might be preferable not to use the built in
remote publishing facilities of Org mode which rely heavily on
Tramp. Tramp, while very useful and powerful, tends not to be
so efficient for multiple file transfer and has been known to cause problems
under heavy usage.
Specialized synchronization utilities offer several advantages. In addition to timestamp comparison, they also do content and permissions/attribute checks. For this reason you might prefer to publish your web to a local directory (possibly even in place with your Org files) and then use unison or rsync to do the synchronization with the remote host.
Since Unison (for example) can be configured as to which files to transfer to
a certain remote destination, it can greatly simplify the project publishing
definition. Simply keep all files in the correct location, process your Org
org-publish and let the synchronization tool do the rest.
You do not need, in this scenario, to include attachments such as jpg,
css or gif files in the project definition since the 3rd party
tool syncs them.
Publishing to a local directory is also much faster than to a remote one, so
that you can afford more easily to republish entire projects. If you set
nil, you gain the main
benefit of re-including any changed external files such as source example
files you might include with
#+INCLUDE:. The timestamp mechanism in
Org is not smart enough to detect if included files have been modified.