hmm... Need some explanation... ;)
` branch --init --all` and  `clone --with-branches` couldn't work as identical as because the `branch` command could only be used in an already initialized repository.
Except from that, with this PR, they do the same thing! \o/
you could do:
* `init` + `branch --init --all`
* `clone` + `branch --init --all`
* `clone --with-branches`
and you will end up with the same repo!


>Maybe we shouldn't call fetch if withBranches == true?

No, must keep the way it works. clone is init + fetch. If we remove fetch what is remaining? And I don't really understand why you want to condition fetch call...

>                if (withBranches && initBranch != null)
>                    fetch.IgnoreBranches = false;

That's just a security to prevent use of --with-branches and --ignore-branches that are 2 options incompatibles.
--ignore-branches is an option to keep the way git-tfs actually works for those where the TFS repository is a mess and can't support branches.

`withBranches` is an option to the fetch command to tell it to do special things to support branches when fetching. So it's OK...

To conclude, all is OK, like that! I have tested and approved!! ;)