Do TFS para o Git

14

Sou desenvolvedor .NET e já usei o TFS (Team Foundation Server) como meu software de controle de origem várias vezes. Os bons recursos do TFS são:

  1. Boa integração com o Visual Studio (então eu faço quase tudo visualmente; sem comandos do console)
  2. Fácil check-out, processo de check-in
  3. Fácil fusão e resolução de conflitos
  4. Construções automatizadas fáceis
  5. Ramificação

Agora, quero usar o Git como backbone, repositório e controle de fonte dos meus projetos de código aberto. Meus projetos estão em linguagem C #, JavaScript ou PHP com bancos de dados MySQL ou SQL Server como mecanismo de armazenamento.

Acabei de usar a ajuda do github.com para esse fim e criei um perfil lá e baixei uma GUI para o Git. Até essa parte foi tão fácil.

Mas eu estou quase preso em seguir adiante. Eu só quero fazer algumas operações simples (realmente simples), incluindo:

  1. Criando um projeto no Git e mapeando-o para uma pasta no meu laptop
  2. Fazendo check-out / check-in de arquivos e pastas
  3. Resolvendo conflitos

É tudo o que preciso fazer agora. Mas parece que a GUI não é tão amigável. Espero que a GUI tenha um Connect To...ou algo parecido e, em seguida, espero que uma lista de projetos seja exibida e, quando eu escolher um, espero ver a lista de arquivos e pastas desse projeto, assim como explorar seu projeto TFS no Visual Studio. Então, eu quero poder clicar com o botão direito do mouse em um arquivo e selecionar check-in...ou check-outalgo assim.

Eu espero muito? O que devo fazer para usar o Git facilmente como o TFS? O que estou perdendo aqui?

Saeed Neamati
fonte
8
Mudei de SVN para git há um ano e estou muito feliz com isso. Eu NÃO recomendaria o SVN para ninguém, exceto para um odiador rígido da linha de comando. Depois de aprender o git, você vai adorar.
Maaartinus 15/10
14
Por que o pessoal do Windows é tão obcecado por interfaces gráficas?
Tdc #
8
@ Tdammers Porque linha de comando no Windows é uma merda como o inferno? Eu sei, existe o PowerShell, mas eles o usam?
Maaartinus 15/10
3
@Saeed, para começar, você espera que exista algo como fazer check-in e check-out de arquivos no git. Nenhum VCS utilizável tem isso há anos.
Daniel Roseman 15/10
1
Recomendado ler: ericsink.com/entries/vcbe_print_edition_free.html Ele explica os conceitos básicos de controle de versão e as diferenças entre centralizadas e descentralizadas (que ainda poderia usar um servidor central, mente.)
Inca

Respostas:

19

As vantagens que o git surgiu ao descartar muitas suposições antigas sobre o que um VCS deve fazer. As desvantagens do git vieram de não poder aproveitar a experiência anterior e não poder fazer as coisas da maneira que você está acostumado.

Se você vai mudar de outra coisa para o git, tente iniciar tabula-rasa (embora seja impossível fazer isso na prática). Avalie-o com base no que faz e quão bem faz, não em como faz, em comparação com o modo como você está acostumado a fazê-lo. Não é que você espere demais, é que suas expectativas são ortogonais ao que o git fornece. Se você é casado com a operação da GUI, ficará desapontado. O Git tem ferramentas de GUI disponíveis, mas elas não adicionam muito. Isso não é um fracasso em fornecê-los, pois não há muito que uma GUI possa adicionar. O GitK ajuda, não nas operações do dia-a-dia, mas na visualização da estrutura da filial e no exame ou pesquisa no histórico.

Aqui está uma analogia pateta do que quero dizer com "ortogonal". Uma das coisas que você pode fazer com um jornal é embrulhar peixe nele ou usá-lo para alinhar uma gaiola. Mas esses não são essenciais para a função de um jornal, são recursos incidentais da forma em que ele se encontra. Esperando que o git "faça check-in de arquivos" ou "permita que você selecione projetos" ou forneça um "conecte-se a ... "é como esperar poder embrulhar peixes ou alinhar sua gaiola com o site de um jornal .

kylben
fonte
Opa, esqueci de explicar a edição. Acabei de adicionar o último parágrafo depois de me levantar para tomar mais café e ter a analogia na minha cabeça.
Kllben
3
Adorei a metáfora no final. +1
Yam Marcovic
7

Você já considerou mercurial? Como o git, é um DCVS e permite fazer todas as coisas legais que se pode fazer com um DCVS. Como o git, existe um bom provedor de serviços baseado em nuvem (bitbucket). Mas, ao contrário do git, a história do Windows é bastante decente, você não é um cidadão de segunda classe. Você tem boas opções de ferramentas (TortiseHG) e uma integração decente do Visual Studio (VisualHG).

Porém, nada será como o TFS no visual studio - o mundo simplesmente não está conectado dessa maneira.

Wyatt Barnett
fonte
1
Concordo que, há alguns anos, mudei do VSS para o Mercurial e foi uma epifania real. De repente, pude fazer coisas que nunca pensei que fossem práticas. Então mudei para svne perdi muitas coisas que eram tão fáceis hg. Agora estou indo para gite tenho sentimentos confusos. Adoro recuperar muitas dessas instalações que perdi svn, mas ainda sinto falta da simplicidade em hgcomparação com a complexidade desnecessária git. Mesmo a instalação do TortoiseGit no Windows exige que você pule através de bastidores que simplesmente não são necessários com o TortoiseHg .
Mark Booth
@ Mark Booth: Eu concordo que o git não é muito fácil de usar, mas que complexidade desnecessária ? Os problemas de instalação não contam, eles podem ser atribuídos ao TortoiseGit (que é um programa diferente) ou ao Windows.
Maaartinus 18/10/11
Isso seria melhor no bate-papo, mas não vejo necessidade de área de índice / cache / armazenamento temporário, IMHO o padrão deve ser confirmar tudo com a opção de confirmações parciais, se solicitado (melhor ainda seria arquivar as alterações que você não usa) não queira imediatamente, execute novamente os testes de unidade, confirme e desinstale). Eu também odeio ter que criar explicitamente um novo ramo quando eu quero um. Com hg, um ramo sem nome é criado silenciosamente sempre que você se compromete com um não-chefe. No git, se você se afasta de uma cabeça sem ramificação, pode potencialmente perdê-la e depois coletar o lixo!
Mark Booth
6

Mudei de SVN para git há um ano e estou muito feliz com isso. No entanto, não confio em nenhuma GUI e, caso você recuse rigidamente a linha de comando, pode ser um problema.

Parece que você espera gitfuncionar da maneira que está acostumado, mas não funciona. Não é difícil, mas você deve dar uma olhada em seus princípios antes de prosseguir.

Criando um projeto no Git e mapeando-o para uma pasta no meu laptop

O Git é distribuído, o que significa que você sempre trabalha com seu repositório local, que pode ser mapeado para qualquer número de controles remotos, incluindo zero. Ao brincar com o projeto de outras pessoas, estou usando dois controles remotos: o repositório git ou SVN e o meu próprio servidor.

Eu sempre começo criando um diretório vazio e depois ou git initou git clone SOME-REMOTE-REPOSITORY. Este link pode ajudá-lo.

Fazendo check-out / check-in de arquivos e pastas

Você perdeu para escrever qual GUI você está usando. Ambos TortoiseGite git-guicertamente podem fazê-lo.

Resolvendo conflitos

Para isso eu estou usando git-guiou meu editor de texto favorito.

Espero que a GUI tenha um Connect To ... ou algo assim

Conecte-se ao que, quando houver 0 a N controles remotos? O Git não fica conectado a um servidor remoto, ele cria a conexão apenas temporariamente e apenas para os poucos comandos que trabalham com o repositório remoto. A maior parte do trabalho é realizada localmente.

então eu espero que uma lista de projetos seja mostrada

Estou assumindo que projectsvocê quer dizer repositories.

Receio que não exista isso. O Git em um servidor remoto funciona estritamente com apenas um repositório. Listar todos os repositórios é equivalente a listar todos os diretórios que contêm o subdiretório .git. Tenho certeza de que há algo assim GitHub.

Eu escolho um, espero ver a lista de arquivos e pastas desse projeto, assim como explorar

Mais uma vez, receio que não exista, pois gitfunciona localmente. E, novamente, não seria de muita utilidade. Simplesmente clone o repositório e explore-o no seu computador. Embora a clonagem de grandes repositórios leve algum tempo, todas as operações subseqüentes são muito mais rápidas e você pode observar qualquer confirmação ou ramificação.

Quero poder clicar com o botão direito do mouse em um arquivo e selecionar check-in ... ou check-out e coisas assim.

Mais uma vez, gitfunciona localmente. Portanto, não faz sentido fazer check-in ou check-out em um repositório remoto. Trabalhar dessa maneira é uma perda de tempo, mesmo em uma LAN rápida. Leve o repositório para o seu computador, trabalhe com ele e git pushas alterações no controle remoto. Pense nisso como publicar suas alterações e também fazer backup. Você deve confirmar localmente com muita frequência .

Antes de iniciar o trabalho, git fetchou git pullas alterações do controle remoto, caso outra pessoa esteja trabalhando com ele.

Eu espero muito?

Sim e não. Você espera algo diferente do que ele oferece. Você pode obter algo muito melhor, gité poderoso, flexível, seguro, rápido como o inferno e pode fazer tudo o que precisa, mas não pode imitar exatamente o que um VCS centralizado faz.

maaartinus
fonte
5

Eu fiz o journy da fonte visual seguro para tfs para svn para git.

Passar de vss para tfs foi uma experiência agradável. Passar de tfs para svn foi uma experiência agradável. Passar de svn para git tem sido uma espécie de batalha interna.

Muitas vezes, me considero bastante conservador e tento me apegar ao que funciona. Uma boa interface gráfica é para mim preferível à linha de comando e eu me encontrei procurando por uma interface gráfica que me permitisse brincar com as crianças legais com quem trabalho. Todos eles usavam o git exclusivamente com a linha de comando.

O momento eureka para mim veio quando desisti da busca por um gui de bala de prata e comecei a tentar o git bash (ainda estou aprendendo).

Eu tenho alguns guis instalados e eles complementam o git na linha de comando. Extensões Git, provedor de controle de fonte Git para visual studio e tartaruga git. Mas eu digo: familiarize-se com o git bash. Os comandos podem ser um pouco enigmáticos, mas uma vez que você os aprende, eles são muito mais rápidos que o gui.

Ramificar com o git é simplesmente INCRÍVEL comparado aos outros. Crie ramificações e alterne entre ramificações quase instantaneamente. Você pode fazer coisas que você não se incomodaria em fazer com o svn porque o svn basicamente copia sua cópia de trabalho (pelo menos da maneira que eu fiz).

Acho que o Git tem uma curva de aprendizado mais íngreme que o svn. Mas uma vez que você "entende" com o git, você não quer voltar.

Git todo o caminho.

tomasat
fonte
5

Você está acostumado a ter um servidor que armazena seus arquivos e é o proprietário onipotente deles. Para editar um arquivo, você deve pedir permissão ao servidor.

Git não é assim. Pense no git desta maneira: você tem seu repositório local. O Git permite confirmar alterações, confirmações reversas, ramificação fácil e rápida etc. Quando você deseja fazer backup do seu histórico de controle de origem, envia as alterações para outra repositório, que "só acontece de ser" um servidor, como GitHub.com.

Fluxo de trabalho:

  1. Clonar (Download) / Criar repositório
  2. Faça algumas alterações. Continue com o desenvolvimento sem se preocupar com os outros.
  3. Envie para outro repositório (pode ser um servidor como o GitHub).
  4. Quando você envia por push para um repositório, o proprietário desse outro repositório é notificado sobre o envio pendente e deve decidir se aceita ou não essas confirmações, recusa-as ou aceita apenas um subconjunto delas.
  5. O ciclo continua.

Isso é tudo.

Yam Marcovic
fonte
1

O que você quer dizer com "o" git gui? Há um zilhão deles, incluindo um plugin para integração do visual studio, se bem me lembro. Se uma GUI não funcionar para você, tente um pouco mais até encontrar uma que funcione. Eu pessoalmente uso GUIs diferentes para tarefas diferentes (e a CLI para outros).

No entanto, o git é mais uma estrutura de controle de versão do que um sistema fixo. Você ainda precisará aprender alguns conceitos básicos para aproveitar ao máximo.

Karl Bielefeldt
fonte
-2

Eu espero muito?

sim

O que devo fazer para usar o Git facilmente como o TFS?

Nada. O Git é centrado na CLI e não possui um bom front-end (eu sei sobre o TortoiseGit, que não é resposta, em comparação com outros Tortoise *). Você pode tentar usar o SmartGit (cuidado com o Java)

Lazy Badger
fonte
1
-1: O check-in / out de arquivos e a resolução de conflitos não 'esperam muito' do controle de origem.
Steven Evers
2
+1 Verificá-los diretamente de um servidor remoto simplesmente não faz sentido. É apenas para diminuir a velocidade, mesmo através da LAN. Fazer essas coisas é algo para o FTP, não para o VCS.
Maaartinus 15/10
1
A "entrada / saída de arquivos" não é uma operação fundamental para um VCS. É um recurso de implementação comum à maioria dos VCSs e que possui efeitos colaterais sutis, porém infelizes.
kylben
2
@kylben: fazer check-in / out é uma maneira de analisar o controle de versão; editar e mesclar é outra maneira. Alguns VCs usam a abordagem anterior, oferecendo bloqueios exclusivos e a capacidade de verificar arquivos individuais; outros aceitam o último e, com eles, você baixa o repositório inteiro, faz as alterações locais e envia-as de volta ao controle remoto; o VCS se encarrega de gerenciar mudanças conflitantes, solicitando sua opinião em caso de dúvida. Nenhuma das abordagens é melhor, mas geralmente você não pode dobrar um VCS para aquele para o qual não foi feito.
tdammers
1
Ao 'fazer check-in / out', eu estava realmente falando sobre como o VCS baseado em bloqueio implementa as coisas, e não sobre como você pode baixar os arquivos de origem para edição (o que é realmente algo que todo VCS deve ser capaz de fazer). O fato de muitos VCs se referirem ao mero processo de baixar um arquivo como 'checkout' é um IMO incorreto - nada é verificado e o repositório não se lembra de quem possui o arquivo.
tdammers