Por que os usuários do Git dizem que o Subversion não possui todo o código fonte localmente?

23

Estou apenas seguindo o que li no SO, então me desculpe, mas tudo o que leio diz que uma grande vantagem do Git sobre o Subversion é que o Git fornece todo o código-fonte localmente ao desenvolvedor, sem ter que fazer nada. o servidor.

Com meu uso limitado de SVN e TortoiseSVN, eu tinha todo o código fonte, ou pelo menos pensei que tinha. Por exemplo, eu tenho um site. Eu o envio ao SVN. Ainda estou executando meu site localmente, não estou? Se alguém enviar uma alteração e eu não estiver conectado, não importaria se eu tinha o Git ou não, até me reconectar ao servidor.

Eu não entendo. Não estou pedindo uma reformulação de um contra o outro, exceto este ponto.

johnny
fonte
2
Não é que você tenha todo o seu código-fonte localmente, é que você tenha todo o histórico do repositório localmente. Isso torna todas as interações do repositório, exceto a sincronização do servidor, muito mais rápidas.
Stonemetal 19/10/12

Respostas:

69

A premissa que você está questionando realmente está errada:

que uma grande vantagem do Git sobre o Subversion é que o Git fornece todo o código fonte para o desenvolvedor localmente

Com o Subversion e o Git, você tem seu código fonte localmente. Com o Git, você tem seu código-fonte e um repositório em sua máquina local.

É algo assim.

Subversão:

Seu código <-> O Repositório

Git:

Seu código <-> Seu repositório local <-> Um repositório remoto (... <-> outro repositório remoto, e assim por diante)

Um benefício que você obtém dessa estrutura é que você ainda pode usar o controle de origem e confirmar suas alterações locais no repositório local sem atrapalhar o trabalho de outros membros da equipe (com quem você compartilha o repositório remoto).

Com o Subversion, você teria que arriscar quebrar a compilação para outras pessoas ou sofrer desenvolvimento local prolongado sem nenhum controle de origem que termine com um enorme comprometimento (ou mais provavelmente uma reversão).

Com o Git, por outro lado, você se sentiria livre para confirmar essas alterações em seu repositório local, exibir logs e diffs ou suas alterações, e somente quando achar que está pronto para ser compartilhado com a equipe, envie as alterações do local repositório para o remoto.

Goran Jovic
fonte
10
Esta é uma resposta muito agradável e realmente atinge casa com "... risco quebrar a compilação para outras pessoas ou sofrer desenvolvimento local prolongada sem qualquer controle de origem ..."
Charles Sprayberry
1
@cspray: Obrigado! Tenho certeza de que há outros benefícios também, mas essa é a maior dor que tive com Svn.
Goran Jovic
git FTW (8 mais ir ...)
Trevor Boyd Smith
2
@ DanNeely: Na verdade, sim - a OP perguntou sobre uma afirmação que ele leu em algum lugar e a resposta é que ela simplesmente não é verdadeira (veja a primeira parte da minha resposta). A segunda parte é apenas uma explicação do que quem fez a alegação provavelmente queria dizer e por quê.
Goran Jovic
1
@Giorgio: Experimente e você saberá :) Sério, acho que nunca consegui fazer isso sem problemas (além de fazer uma mesclagem completamente manual, o que meio que derrota o objetivo da ferramenta)
Goran Jovic
17

Git ou Mercurial armazenam todo o seu repositório localmente com todas as revisões e ramificações nomeadas. O Subversion armazena apenas um - geralmente a Revisão Principal. Portanto, com o Git e o Mercurial, você pode acessar o repositório completo (ou seja, seu código-fonte atual e seu histórico), mesmo quando sua rede falha com o SVN, você fica restrito à última revisão que atualizou.

Amenti
fonte
1
@ Murph Obrigado. Isso foi essencialmente o que eu quis dizer. Eu tentei esclarecer.
Amenti
Não é apenas uma questão de se você tem uma conexão de rede com o servidor ou não; a IO local é muito mais rápida e com menor latência do que a IO da rede, o que torna o exame do histórico ou a culpa de um arquivo muito mais rápido (aviso de culpa do TrotiseSVN "Aguarde - isso pode levar alguns minutos. Sério!"). A desvantagem é que ter todo o histórico local pode exigir muito mais espaço em disco em repositórios maiores; isso pode ser problemático nos laptops, caso você não possa adicionar apenas uma unidade extra para complementar um SSD menor e sem quebra de banco.
Dan Neely
@ Comentário de DanNeely provavelmente era razoável em 2012, mas 4 anos depois, é quase impossível encontrar um projeto git que pode ocupar qualquer parte considerável de um SSD
Igor Stoppa
7

A resposta curta é esta: com o git você tem todo o seu código fonte, com o subversion você tem a versão mais recente do seu código fonte.

O Git mantém uma cópia de todo o histórico do seu repositório localmente. Com o subversion, todo o histórico está em um servidor.

Bryan Oakley
fonte
2

Acho que o que você pode entender é que, com o SVN, todas as suas ações exigem comunicação com o servidor, enquanto o GIT não. Com o SVN, se você deseja ramificar, ramifica no servidor e puxa para baixo. Com o GIT, você pode criar uma filial local sem nunca ter o "servidor" a par.

Você está certo ao dizer que possui o código-fonte com o SVN e o GIT, mas com o GIT, não é necessário que haja um servidor centralizado que também contenha o código-fonte. Com o GIT, você pode ser a ÚNICA pessoa com o código-fonte, e ainda assim conseguir executar todas as funções que faria com um VCS típico.

Ouvi argumentos contra o GIT e acho que isso pode ajudar na sua pergunta, dizendo que, como você não precisa se comprometer com um repositório central, você é proprietário do seu código-fonte até que o tenha comprometido e o enviou ao servidor, se você tem um. Com o SVN, a única maneira de ter o controle de versão é comprometendo-se com o servidor, mas com o GIT, você pode potencialmente manter tudo em sua máquina local e, se algo der errado, você "pode ​​perder tudo", mesmo que com a mesma facilidade. perca todas as suas alterações com o SVN se você não confirmar e o seu disco rígido também falhar.

David Peterman
fonte
1

dizendo que, como você não precisa se comprometer com um repositório central, você é proprietário do seu código-fonte até que você o tenha comprometido e o enviou ao servidor, se você tiver um. Com o SVN, a única maneira de ter o controle de versão é comprometendo-se com o servidor, mas com o GIT, você pode potencialmente manter tudo em sua máquina local e, se algo der errado, "você pode perder tudo", mesmo que com a mesma facilidade. perca todas as suas alterações com o SVN se você não confirmar e o seu disco rígido também falhar.

Se você pressionar diariamente, o risco deve ser pequeno. Mas se você for forçado a confirmar diariamente no servidor SVN, no final do dia, poderá fazer tudo em um único grande conjunto de alterações, que não separa todas as alterações em pequenas etapas. Com o git, você é incentivado a fazer vários pequenos commit. Ao empurrar, se a mesclagem for necessária, tente mesclar e empurrar. Se você não conseguir mesclar no momento, poderá enviar para uma nova ramificação ou outro repositório no servidor.

ceder
fonte