They really aren't comparable a repository is something you can inject via dependency injection. The aim of DI is to make your application loosely coupled. Rather than specify a concrete implementation you can specify an interface that defines a contract that an implementation must fulfil. That way you can more easily swap out the implementation.
Repository pattern as defined by Martin Fowler isolates your domain from caring about how storage is implemented so all objects retrieved can be treated like an in memory collection. You could have a repository based on a database, an XML file a text document or anything. The applications code itself doesn't care. This makes it very useful for testing hence the connection to TDD.
You pass in (inject) dependcies to a controller. These could be repositories, services or anything that your controller requires. Your IoC container wires all of this together at runtime. This in itself is very powerful we make use of DI heavily in a SaaS application where customers have their own implementations which are injected depending conditionally on the client.
I recommend you read Dependency Injection in .NET. Mark Seemann can explain this much better than me and is an excellent introduction to the hows and whys you should use DI and various IoC Containers e.g. Unity