git para projetos pessoais (one-man). Exagero?


84

Eu conheço e uso dois sistemas de controle de versão: Subversion e git. O Subversion, a partir de agora, é usado para projetos pessoais em que eu sou o único desenvolvedor e o git é usado para projetos de código aberto e projetos em que acredito que outros também trabalharão no projeto. Isso se deve principalmente aos incríveis recursos de bifurcação e fusão do git, onde todos podem trabalhar em seu próprio ramo; muito conveniente.

Agora, eu uso o Subversion para projetos pessoais, pois acho que o git faz pouco sentido lá. Parece ser um pouco exagerado. Tudo bem para mim se estiver centralizado (no meu servidor doméstico, geralmente) quando eu for o único desenvolvedor; Eu faço backups regulares de qualquer maneira. Eu não preciso da capacidade de criar meu próprio ramo, o ramo principal é o meu ramo. Sim, o SVN possui um suporte simples para ramificação, mas um suporte muito mais poderoso para ele não faz sentido, eu acho. A fusão pode ser uma dor, ou pelo menos da minha pouca experiência.

Existe alguma boa razão para eu usar o git em projetos pessoais, ou é simplesmente um exagero?


61
Não, eu uso git e hg para projetos pessoais. Ter controle de revisão local é uma dádiva de Deus.
Wkl

7
O Git é, em muitos aspectos, melhor para todos os projetos, tenham ou não um grande número de colaboradores: o git comprime as coisas com muito mais eficiência do que o svn (e é uma ordem de magnitudes mais rápida!), O git torna os backups triviais e o git não ser um obstáculo se alguém quiser contribuir.
Artefact2

4
Eu uso o controle de versão para empurrar meu código para qualquer github ou bitbucket, ele servidores como backup para mim, e talvez um dia eu vou realmente escrever algo que as pessoas vão ser genuinamente interessado.
Mahmoud Hossam

8
"Eu não preciso da capacidade de criar meu próprio ramo, o ramo principal é o meu ramo". Muitas pessoas disseram a mesma coisa sobre undoquando era um recurso relativamente novo nos aplicativos. Agora todos percebem que precisavam disso o tempo todo. Você precisa ramificar, você simplesmente não sabe disso.
Dan Rosenstark

1
@ rtperson sim, você pode fazer isso, mas eu realmente gosto mais de mercurial, mesmo que eu gosto mais do github do que do bitbucket.
Mahmoud Hossam

Respostas:


155

Não é um exagero. A principal razão pela qual comecei a usar o Git e o Mercurial over Subversion para projetos pessoais é que iniciar um repositório é muito mais fácil.

Quer começar um novo projeto?

> git init

BAM! Não há necessidade de configurar um servidor de repositório nem fazer check-in de uma estrutura de pastas para suportar ramificações e tags em um repositório do subversion.

Compartilhar seu projeto posteriormente é apenas uma questão de: git push(além de ter um repositório remoto). Tente fazer isso rapidamente com o subversion!


24
Aceitaram. Eu não poderia ter sido provado mais errado sobre git ser um exagero do que isso;)
Anto

7
Steve341: Normalmente mantenho todos os projetos de código-fonte em uma pasta chamada "projetos". É onde eu mantenho todos os repositórios, um para cada projeto de código-fonte. Eu nunca tive a necessidade de acompanhar vários projetos juntos no mesmo repositório VCS; é para isso que servem os sistemas de gerenciamento de dependências, como Ivy ou Maven.
Spoike

3
@ Steve341 Como é difícil acompanhar essas coisas? Você só tem uma pasta que contém todos os seus repositórios. A sua não é diferente do seu sistema, além do fato de que seu sistema é uma prática extremamente ruim ao usar git ...
alternativa

2
@ Steve314:echo 'for dir in projects/*; do cd "$dir"; git push; cd ..; done' > update_all; chmod +x update_all
André Paramés

2
git inite bam! Ah sim e depois cp ../the-other-project/.gitignore .antes do commit inicial. Bam!
Dan Rosenstark

46

Eu diria que o uso do Subversion para projetos pessoais locais é um exagero, enquanto o Git não é decididamente. O Git ocupará menos espaço (devido ao ineficiente conceito de "revisões" do SVN versus os instantâneos de objeto do Git), requer menos configuração (em git initcomparação a uma dúzia de svnadmincomandos e configuração de permissões e assim por diante), é mais fácil de fazer backup ( git clone --bare[ou git push originse você usa o Github ou similar] e pronto) e possui ferramentas melhores para gerenciar seu código (a ramificação é gratuita e a mesclagem é mais fácil e limpa). Só porque ninguém mais tem um clone do seu repositório não significa que os benefícios de qualquer DVCS sejam "um exagero".

Além disso, eu diria que o suporte de ramificação do Git é menos complexo que o do SVN, com maiores recompensas.


Eu acho que eu deveria ter usado "poderoso" em vez de "complexo"
Anto

3
@ Anton: Não importa. Eu ainda diria basicamente a mesma coisa: a ramificação superior do Git simplesmente não tem desvantagens, em comparação com o SVN.
greyfade

3
O Git também não poluirá sua árvore de origem com arquivos de rastreamento em todos os subdiretórios.
WarrenT

4
@ WarrenT a árvore de origem "poluição" não acontece nas versões svn 1.7 e posteriores.
pllee

4
Criar um repositório de sistemas de arquivos no Subversion é um comando ( svnadmin createmais um para fazer o checkout ou a importação inicial), sem a necessidade de configurar permissões e assim por diante. Não nego que o Git seja frequentemente uma ferramenta melhor, mas imprecisões sobre o Subversion não são úteis.
Josh Kelley

34

Pensar que você nunca ramificará seu próprio código é um pouco míope. Eu ramifiquei meu próprio código várias vezes, principalmente quando estava experimentando uma nova abordagem sobre a qual ainda não estava totalmente convencido. Você acabará desejando o recurso.

Isso vem de um usuário antigo do Subversion. A consolidação de uma ferramenta pode realmente ajudar a tornar sua vida mais fácil.


2
Sim, eu acredito que este é o ponto dos galhos, experimentação. Essa foi minha primeira reserva ao ler a pergunta de Op. Se você não está ramificando em seu repositório, está "ramificando" em sua cabeça e isso não faz sentido quando você tem o controle de versão em vigor.
Chris

3
Você pode ramificar com o subversion. E mesclar. Tipo de. Na verdade, a única vez que tentei, acabei com um repositório corrompido com o qual não consegui mais trabalhar, e a recuperação de um backup (com a ramificação já aplicada) não ajudou, então acabei perdendo todo o meu histórico e iniciando um novo repositório ... mas eu culpei isso na transição da 1.4.? para 1,5 (eu acho - foi há alguns anos atrás agora). Provavelmente, ramificar e mesclar trabalhos, na verdade. Se você é corajoso o suficiente para tentar. Se eu soubesse sobre o svn dump naquela época, eu poderia ter resolvido o problema com algum esforço, é claro.
Steve314

@ Chris, eu gosto de ter uma versão funcional para a qual eu possa recorrer a qualquer momento. Claro que você pode fazer isso com tags, mas há momentos em que um ramo faz todo o sentido. Não se esqueça dos outros benefícios do git / mercurial também.
Berin Loritsch

9

O excesso de habilidade é reservado para quando houver danos colaterais causados ​​pela "solução". Usar uma arma para matar uma mosca significa que os danos causados ​​pela bala vão para outro lugar. É um exagero. Usar algo mais poderoso do que o necessário que não causa um problema não é um exagero e pode ser uma coisa boa se ajudar a otimizar seu processo de desenvolvimento. Não causa danos e permite que você apenas precise atualizar um conjunto de software em vez de dois. Então, por que se preocupar com dois sistemas em vez de um?


Pode ser um exagero (sim, com essa definição) se o sistema entrar no seu caminho. Gostaria de saber se é uma boa ideia usar o git para projetos pessoais. Você poderia me dizer quais são as vantagens específicas ? Esta resposta não aborda isso. Eu vejo o git como um sistema mais poderoso e poderoso demais para projetos pessoais. Porém, não deve haver necessariamente nenhum dano, desde que não atrapalhe o seu caminho. Você poderia expandir sua resposta?
Anto

1
Excesso de habilidade também é usado quando o esforço usado para aplicar a solução está fora de proporção. Indiscutivelmente, se você já está usando o subversion para projetos locais, o esforço necessário para aprender o Git ou o que for um exagero. Ou possivelmente uma lição útil para desenvolver habilidades transferíveis, é claro. Pessoalmente, eu ainda uso o subversion - ele me mordeu algumas vezes, mas deixou apenas pequenas cicatrizes. Estou interessado em aprender o Git, mas toda vez que fui procurar, os tutoriais que encontrei eram enigmáticos ou não conseguia ferramentas estáveis ​​para o Windows ou havia algum outro obstáculo que fazia tudo parecer um exagero.
Steve314

7

Eu uso o Git para meus projetos individuais e adoro isso. Eu estava usando o Subversion anteriormente e ainda estou vendo uma desvantagem no uso do Git. É mais poderoso, mas não de uma maneira que torne as coisas simples mais complicadas. Tornar coisas simples desnecessariamente complicadas / caras / lentas / etc. IMHO é uma condição necessária para chamar algo de exagero. Além disso, no Github, eu bifurquei os projetos individuais de outras pessoas para adicionar um recurso que eu queria e depois enviei solicitações pull. Eu acharia muito legal se alguém interessado nos meus projetos fizesse a mesma coisa.


7

Eu nunca usei o controle de origem em projetos pessoais antes do DVCS, por isso é um pouco estranho imaginar alguém tendo a visão oposta. Algumas das minhas razões são:

  • Fácil de configurar e desmontar. Por exemplo, um colega me deu um quebra-cabeça de programação na semana passada que eu resolvi em várias pequenas etapas. Fiz um repositório Git que durou 45 minutos para manter meu trabalho e depois ele se foi. Não sei como é fácil algo assim na subversão, mas nunca ouvi falar de alguém fazendo isso.
  • Desconectado. Para mim, poder trabalhar offline é muito mais um benefício para um projeto de hobby do que um para o trabalho. Não preciso abrir um buraco no firewall doméstico ou hospedar um projeto publicamente. Posso colocar temporariamente um repositório em um pen drive ou laptop e ainda assim manter tudo sincronizado.
  • Tudo colocado. Reunir o repo e a árvore de trabalho facilita o acompanhamento de pequenos projetos durante coisas como atualizações do sistema operacional.
  • Recursos poderosos. Claro, eu não preciso da energia o tempo todo, mas está lá quando eu preciso, e não consome nenhum recurso quando não preciso.

6

Disseram-me que git-bisecté realmente bom encontrar o commit exato que introduziu um determinado comportamento, navegando em commits, dependendo da sua entrada.

Você terá que fazer isso algum dia por coisas que simplesmente não consegue entender o que aconteceu.


EDIT: Além disso, a capacidade de ramificação é muito importante quando você precisa fazer correções de bug em versões antigas que os clientes usam. Você deve ser capaz de gerenciar "apenas conserte essa pequena coisa, mas eu não quero a versão mais recente, porque não quero testá-la novamente agora".


2

Depende de quão sério você deseja obter sobre a versão do seu próprio código. Se o que você está construindo é, por exemplo, uma biblioteca simples que só terá a versão atual (ou enquanto isso for verdade), eu pessoalmente usaria apenas uma opção de backup básica como o Dropbox. Se você perder todo o seu código, poderá recuperá-lo da Web e o Dropbox terá um backup de versão de 30 dias se você realmente fizer algo estúpido.

No entanto, se você, por exemplo, precisar manter os ramos Produção e Desenvolvimento, o git é absolutamente uma ótima ferramenta - e muito mais rápido que o svn. Mas lembre-se do risco de falha do disco rígido, se você armazenar apenas os dados localmente.


1
Sim, eu uso o DropBox para projetos pessoais. A versão é nem de perto tão sofisticado como um verdadeiro VCS, mas é bom para projetos menores que eu faço no meu tempo livre, e não requer nenhuma atenção em tudo (por exemplo, não compromete, arquivos apenas atualizar como você trabalha sobre eles..)
jhocking

ah, e por causa do desenvolvimento de jogos, meus projetos tendem a ter muitos arquivos binários (arquivos de imagem, clipes de áudio etc.) e a maioria dos sistemas de controle de versão são realmente destinados apenas ao código-fonte.
Jhocking 19/04

O Git funciona bem com arquivos binários, as diferenças são apenas menos interessantes. Felizmente diffing em git não é exatamente bloqueado - se você pode encontrar uma ferramenta de comparação binário que você ama, você pode usá-lo com git muito facilmente (a partir da linha de comando)
Chris Moschini

Disseram-me que o Git gasta muito espaço com a versão de arquivos binários, mas o que me disseram pode estar incorreto. Basicamente, disseram-me que a maioria dos ativos binários (suponho que nem todos os arquivos binários, mas as imagens e sons que entram em um jogo) precisam ser salvos inteiramente em todas as versões e, portanto, o Git preenche seu disco rígido com o repositório local.
Jhocking

Só é um desperdício se você não quis fazer a versão dos arquivos binários. Se você precisar versioná-los, o histórico de versões não será desperdiçado. Eu acho que eles estão implicando acidentalmente que o git incha seu histórico de versões ao rastrear binários - isso está incorreto. git.wiki.kernel.org/index.php/GitSvnComparsion
Chris Moschini:

2

Eu sempre, sempre, sempre utilizava um sistema de controle de versão para qualquer tipo de projeto de desenvolvimento. Grande ou pequeno realmente não importa. Seja jogando em casa com algum tipo de nova tecnologia, escrevendo um pouco de ajuda para facilitar minha vida ou desenvolvendo-me profissionalmente em uma equipe grande e distribuída - eu sempre desejaria um sistema de controle de versão para me apoiar.

Claro, na maioria das vezes, para pequenos projetos pessoais, você não usará a maioria dos recursos, mas configurar um repositório git (ou mesmo um repositório local do Subversion) não é grande coisa, então vá em frente! E antes que você perceba, você vai querer saber "caramba, qual foi o conteúdo do arquivo X na última sexta-feira?". Sem controle de versão - boa sorte ;-)

Então, realmente não importa se você usa git ou SVN - pessoalmente, estou começando a migrar mais e mais coisas do SVN para o git, mas o principal é usar o controle de versão - mesmo para as pequenas coisas.


1

Somente porque ninguém o mencionou: para projetos pessoais, o darcs é realmente bom e menos envolvido do que o git para fazer um controle direto da versão. Não é tão rápido para projetos maiores, mas o Subversion também não!


1
Isso parece meio relacionado a quão bem você conhece os dardos. Eu nunca o usei, mas usei muito o git. Para mim, o git é muito direto, mas eu aposto que estaria coçando a cabeça se usasse darcs.
19411 Sam

1
Se você já dominou a interface do usuário insana do git, darcs seria uma caminhada.
precisa saber é o seguinte

1
você pode explicar por que darcs é melhor para pequenos projetos do que o git?
shabunc

0

Pode ser uma poderosa mudança de paradigma mental para entender que o que fazemos é experimentação. Ter uma ferramenta barata / fácil para dar suporte a isso aumenta sua capacidade de avançar, em parte porque aumenta sua capacidade de desistir de qualquer experimento quando o resultado é ruim.

Muitos desenvolvedores dizem: Bem, eu apenas faço cópias do meu código. Mas essas cópias se tornam difíceis de gerenciar e acabam sendo desorganizadas. Você tem várias cópias e não consegue lembrar qual cópia para quê e, em seguida, tente descobrir quando é seguro excluí-las.

Tudo isso se torna ainda mais valioso quando o experimento envolve alterações coordenadas em vários arquivos. E quando se trata de um projeto solo, o uso do Git se torna ainda mais simples.

Em vez de me perguntar se devo usá-lo em um projeto solo, agora penso que pena não ter descoberto isso antes.


Para obter as opiniões dos designers sobre isso, assista a Linus no Git no YouTube (~ 70 mins)
WarrenT
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.