Escolha SCM para um novo usuário? [fechadas]

Muito fácil aqui pessoal. A melhor justificativa obtém a vitória.

Sou estudante de ciência da computação em uma escola da qual você já ouviu falar e programa há vários anos (cerca de 8), por isso escrevi algumas linhas de código. Mas como nunca estive realmente distribuindo - fonte ou binários - nem desenvolvendo equipes (embora tenha certeza que o farei!), Nunca precisei aprender sistemas de gerenciamento de código-fonte. Eu tenho uma hierarquia tremendamente chata de pastas ao longo das linhas desrc/project_name ousrc/class_code/hw_or_project_name e se eu precisar enviar o código a um amigo ou para avaliar, está a apenas um metro de distância.

Algumas coisas mudaram nos últimos anos, à medida que meus projetos se tornaram maiores. Meu Mac, com o Time Machine, agora faz backups a cada hora - isso me salvou algumas vezes, mais recentemente, quando fiz grandes alterações no SSH ... depois salvei e fechei a cópia antiga no meu editor algumas horas depois.

Mas, por algum tipo de interesse profissional - junto com uma sensação avassaladora de que poderia ser útil -, decidi aprender o SCMS. Agora, tenho muita experiência como código-fonte 'consumidor' -git clone, svn checkout, cvs co, esse tipo de coisa - mas nenhum como mantenedor, consolidador ou atualizador.

Minha pergunta para você é: o que devo aprender? Agora, muitos de vocês estão gritando "por que um? Você usará muitos!" mas eu gostaria de aprender o básico do SCM e adquirir os hábitos de usá-lo, no sistema mais direto. Há vários conceitos que eu faria bem em internalizar - ramificações, tags, fusão, colaboração etc. - antes de realmente precisar deles.

Para deixar claro, eu não sou Linus Torvalds. Vou manter um, ou talvez alguns galhos. No meudezenas de arquivos, não me importo se algumas operações levam algumas centenas de ms a mais em um sistema do que em outros.

Agora o que eu tenho? Eu tenho um host. Eles oferecem ao Subversion um clique de distância, ou eu poderia armazenar outros repositórios sem problemas. Por razões que não posso explicar, sou bastante parcial com o Subversion. Mas é exatamente por isso que reluto em entrar em cena. Conheço Mercurial, Git e outras coisas interessantes, sendo distribuídas, mas não sei por que isso é um benefício. Na verdade, não tenho muita certeza de como isso poderia funcionar.

Então, com o que devo começar? Subversion ou Git? Mercurial ou CVS? Fonte visual segura ou forçada? (esse último par foi uma piada) E por que um sobre o outro?

Obrigado pelo seu tempo, e se isso estiver na seção errada, peço desculpas.

EDITAR Obrigado a todos! Agradeço seus comentários. Dada a escolha entre Git e Hg, eu provavelmente iria com Git - algum desacordo? Segundo porquenão Subversão? Parece ser o consenso (não apenas aqui) que é antigo ou obsoleto. Por que isso?

EDIT 2 Então, depois de ler todas as respostas e ler um pouco mais, decidi ir com o Git. "Resposta" atende à melhor justificativa, conforme declarado acima. O Git parece ser mais popular que o Mercurial, mesmo que seja um pouco menos limpo. Estou fazendo alterações no meu servidor da web, onde tenhoviewgit instalado e está funcionando muito bem. O ímpeto para armazenar uma cópia no meu servidor da web é que eu gostaria de trabalhar em várias de minhas máquinas e espero que elas fiquem fora de sincronia. Também espero ter várias cópias de trabalho fora de sincronia entre si e com o meu servidor, e agora entendo que o Subversion é bastante fraco nisso. Ainda estou tentando descobrir muito, mas já o configurei para que eu possa extrair / clonar do http e usar o ssh (o próximo passo é configurar a Gitosis). Para um novato que quer fazer o que estou fazendo - você verá que seus comandos "push" funcionarão na primeira vez, mas qualquer cópia "clonada" não acompanhará as alterações que você fizer. O Git considera isso um recurso de segurança ... Eu só entendo um pouco o porquê, mas tem a ver com a mesclagem. O truque é usaresta gancho pós-atualização no servidor para mesclar a cópia recém-enviada à cópia de trabalho do servidor.

questionAnswers(7)

yourAnswerToTheQuestion