Difference between server-side checkout and agent-side checkout.

I've been reading through the TeamCity 4.x documentation, and I am confused what the difference between a server side checkout and an agent side checkout is, as mentioned in this snippet from their help section:

Exclude checkout rules will only speed up **server-side** checkouts. **Agent-side** checkouts emulate the exclude checkout rules by checking out all the root directories mentioned as include rules and deleting the excluded directories. So, exclude checkout rules should generally be avoided for the agent-side checkout.

What is the difference between a server-side checkout and an agent-side checkout?

Comment actions Permalink

I am not sure if this is correct, that's my understanding.

Server side Filter for A: Get A from ABC > A

Agent side Filter for A: Get ABC from ABC, delete BC from ABC > A

So agent performance will not benefit from "exclude check out rule"


And I got another question here, if I am not using any exlude checkout rule at all. Is there any difference / advantage between them?

Comment actions Permalink

Thomas, your thoughts about exclude rules are correct. This is how it works currently.

The main reason why server side checkout exists - is to simplify administration overhead.
With server side checkout you need to install VCS client software on the server only (applicable to Perforce, Mercurial, TFS, Clearcase, VSS). Network access to VCS repository can also be opened to the server only. So if you want to control who has access to your sources repositories it is probably better to use server side checkout.

As a side effect in some cases server side checkout can lower load produced on VCS repositories especially if clean checkout is performed often. This is because clean patches are cached by server. However this is environment specific, probably in some cases agent side checkout will work better.

Exclude rules also are better processed with server side checkout because usually agent side checkout is just an update and with most VCSes there is no way to exclude some directories during update operation.

From the other hand because agent side checkout is just an update or checkout it creates necessary administration directories (like .svn, CVS), so it allows you to communicate with repository from the build: commit changes and so on. With server side checkout such directories won't be created.

Comment actions Permalink

Thanks for the detailed explaination.


Please sign in to leave a comment.