Como dividir um repositório git em dois

Às vezes você vai querer ou ter que dividir um repositório git em dois. Isso geralmente é um sinal de não pensar no futuro o suficiente, mas hey sh .. acontece. Se o seu repositório está estruturado de uma forma que você só precisa de um subdiretório dele em um novo repositório, você pode seguir as etapas abaixo.

Assumimos um repositório foo que contém uma pasta foobar que deve ser um novo repositório chamado bar .

% git clone --no-hardlinks foo bar
% cd bar
% git filter-branch --subdirectory-filter foobar HEAD -- --all
% git reset --hard
% git gc --aggressive
% git prune

Se estiver trabalhando com repositórios remotos, você terá que deletar a origem remota antiga e definir uma nova.

% git remote rm origin
% git remote add origin git@example.com:bar.git
% git push -u origin master

Agora vamos limpar o repositório original.

% cd foo
% git filter-branch --tree-filter "rm -rf foobar" --prune-empty HEAD
% rm -rf foobar
% git push -f

Agora você deve ter dois repositórios separados.