Essas postagens parecem relacionadas, mas meu cérebro está começando a derreter, tentando pensar sobre isso: P
Meu empregador acabou de começar a usar o controle de origem, principalmente porque antes de contratar mais desenvolvedores, o "repositório" era o disco rígido do desenvolvedor solitário, que trabalha principalmente em casa. Todo o código .NET que ele havia escrito foi verificado em massa e há muitas funcionalidades duplicadas (leia-se: copiar e colar). No momento, nosso sistema SCM é um backup glorificado.
Eu gostaria de inserir parte do código duplicado em bibliotecas compartilhadas. Estou deixando o repositório original em paz para não quebrar nada - podemos mover e / ou refatorar o código existente conforme e quando necessário. Então, configurei um repositório apenas para o novo código, incluindo bibliotecas.
Meu problema gira em torno da versão das bibliotecas sem nos mirar em um processo excessivo: tendo reconhecido que precisamos de uma abordagem mais coerente, com mais desenvolvedores escrevendo códigos muito semelhantes, o gerenciamento e os demais desenvolvedores estão abertos para reorganizar as coisas, mas provavelmente não desça bem se a solução começar a afetar a produtividade.
A solução ideal em minha mente obsessiva é construir as bibliotecas separadamente, com cada projeto dependente construído contra versões compatíveis escolhidas deliberadamente. Dessa forma, sabemos exatamente quais clientes possuem quais versões de quais bibliotecas, podem reproduzir bugs com mais confiabilidade, manter ramificações independentes de lançamento de produtos e bibliotecas e não interromper os projetos uns dos outros ao alterar o código compartilhado.
Isso torna a atualização das bibliotecas complicada, principalmente para o desenvolvedor que trabalha em casa. Espero que as bibliotecas mudem rapidamente, pelo menos inicialmente, à medida que (finalmente) juntamos os bits comuns. É bem possível que eu esteja pensando demais sobre isso e ficaríamos bem apenas construindo tudo contra os commits mais recentes da biblioteca, mas eu gostaria de pelo menos estar preparado para o dia em que decidirmos que alguns componentes precisam ser versionados de forma independente e distribuído. O fato de que algumas das bibliotecas precisarão ser instaladas no GAC torna a versão particularmente importante.
Então, minha pergunta é: o que estou perdendo? Sinto que fixei uma solução e agora estou tentando encontrar variações que tornarão as alterações mais suaves. Que tipos de estratégias você já usou para resolver esse tipo de problema antes? Eu percebo que essa pergunta está em todo lugar; Farei o meu melhor para limpar e esclarecer quaisquer pontos de incerteza.
E por mais que eu adorasse usar o Mercurial, já gastamos dinheiro em um SCM comercial centralizado (Vault) e a troca não é uma opção. Além disso, acho que o problema aqui é mais profundo do que a escolha da ferramenta de controle de versão.