HomePhabricator

Always initialize Git repositories with "git init", never with "git clone"

Description

Always initialize Git repositories with "git init", never with "git clone"

Summary:
Fixes T13448. We currently "git clone" to initialize repositories, but this will fetch too many refs if "Fetch Refs" is configured.

In modern Phabricator, there's no apparent reason to "git clone"; we can just "git init" instead. This workflow naturally falls through to an update, where we'll do a "git fetch" and pull in exactly the refs we want.

Test Plan:

  • Configured an observed repository with "Fetch Refs".
  • Destroyed the working copy.
  • Ran "bin/repository pull X --trace --verbose".
    • Before: saw "git clone" pull in the world.
    • After: saw "git init" create a bare empty working copy, then "git fetch" fill it surgically.

Both flows end up in the same place, this one is just simpler and does less work.

Maniphest Tasks: T13448

Differential Revision: https://secure.phabricator.com/D20894