Desenvolvimento de software é um trabalho colaborativo. Como engenheiro de software, você precisa compartilhar seu trabalho com outras pessoas. Mas compartilhar código e colaboração pode ficar complicado. É difícil acompanhar várias mudanças que acontecem durante o ciclo de vida de um software. Portanto, as equipes de desenvolvimento dependem das ferramentas de controle de versão para ajudar no processo de colaboração de software. O Git é uma das ferramentas de controle de versão mais proeminentes da indústria de software.
Dica: Neste tutorial, você aprenderá a usar os fundamentos do Git. Cada seção termina com algumas perguntas. Você pode ler as perguntas antes de começar a ler a seção. Isso ajudará você a entender e prestar atenção aos pontos importantes.
Divirta -se aprendendo git!
Git: Uma breve visão geral
Git é um sistema de controle de versão distribuído. Ele mantém o controle de todas as alterações que você faz em seus arquivos e pastas. Torna mais fácil salvar seu trabalho em andamento. Se houver um problema, você pode verificar facilmente uma versão anterior do arquivo ou pasta. Se necessário, você pode até reverter toda a sua base de código para uma versão mais antiga.
O desenvolvimento do Git começou em 2005. O grupo Linux Kernel usado para manter seu código no Bitkeeper, um sistema de controle de versão distribuída proprietária. No entanto, o Bitkeeper retirou seu uso livre do produto. Assim, Linus Torvalds, criador e desenvolvedor principal do Linux, projetou um novo sistema de controle de versão distribuída de código aberto que atenderia aos requisitos da comunidade de desenvolvimento Linux. E Git nasceu.
Como um sistema de controle de versão distribuída, o Git não requer uma autoridade centralizada para acompanhar o código. Controles de versão centralizada mais antigos, como CVs, SVN ou Perforce, requerem servidores centrais para manter o histórico de mudanças. O Git pode acompanhar todas as alterações localmente e trabalhar ponto a ponto. Portanto, é mais versátil do que os sistemas centralizados.
Questões:
Instalando o git
Para sistemas Linux, instalando o git é fácil. Se você estiver usando uma distribuição baseada no Debian como o Ubuntu, poderá usar o APT Instale:
$ sudo apt install git-all
Para Fedora, Rhel ou CentOS, você pode usar:
$ sudo dnf install git-all
Você pode verificar se o Git foi instalado, usando o seguinte comando:
$ git -versão
Ele deve mostrar a versão do Git que você instalou, por exemplo:
Git versão 2.17.0
Depois de instalar o Git, é hora de configurar seu nome de usuário e e -mail:
$ Git Config -Usuário global.Nome "Yourusername"
$ Git Config -Usuário global.Email "[email protected] "
Você pode verificar se as configurações foram definidas corretamente usando o seguinte comando:
$ git config -lista
do utilizador.Nome = YourUsername
do utilizador.email = [email protected]
Dica: É importante definir o usuário.nome e usuário.E -mail porque essas configurações são usadas para rastrear suas alterações.
Questões
Entendendo o git conceitualmente
Para usar o Git, primeiro você precisa entender esses quatro conceitos:
O diretório de trabalho, a área de preparação e o repositório são locais para sua máquina. O repositório remoto pode ser qualquer outro computador ou servidor. Vamos pensar nesses conceitos como quatro caixas que podem manter papéis A1 padrão.
Suponha que você esteja escrevendo um documento manualmente em um papel A1 em sua mesa. Você mantém este documento na caixa de diretório de trabalho. Em um certo estágio do seu trabalho, você decide que está pronto para manter uma cópia do trabalho que já fez. Então você faz uma fotocópia do seu papel atual e o coloca na caixa de estadiamento.
A caixa de estadiamento é uma área temporária. Se você decidir descartar a fotocópia na caixa de estadiamento e atualizá -la com uma nova cópia do documento do diretório de trabalho, não haverá registro permanente desse documento encenado.
Suponha que você tenha certeza de que deseja manter o registro permanente do documento que você tem na caixa de estadiamento. Então você faz uma fotocópia do documento da caixa de estadiamento e move -o para a caixa de repositório.
Quando você o move para a caixa de repositório, duas coisas acontecem:
A entrada do log ajudará você a encontrar esse instantâneo específico do seu documento, se precisar no futuro.
Agora, na caixa de repositório local, você tem um instantâneo do seu trabalho e uma entrada de log. Mas só está disponível para você. Então você faz uma cópia do seu documento de repositório local junto com o arquivo de log e o coloca em uma caixa na sala de suprimentos da empresa. Agora qualquer pessoa da sua empresa pode vir e fazer uma cópia do seu documento e levá -lo à mesa deles. A caixa na sala de suprimentos seria o repositório remoto.
O repositório remoto é como compartilhar seu documento usando o Google Docs ou Dropbox.
Questões:
Seu primeiro repositório Git
Depois de instalar o Git, você pode começar a criar seus próprios repositórios Git. Nesta seção, você vai inicializar seu repositório Git.
Suponha que você esteja trabalhando em um projeto de desenvolvimento da web. Vamos criar uma pasta chamada Project_Helloworld e mudar para o diretório:
$ mkdir Project_helloworld
$ CD Project_helloworld
Você pode dizer ao Git para monitorar este diretório com o seguinte comando:
$ git init
Você deve ver uma saída como esta:
Repositório Git vazio inicializado em/usuários/zakh/_work/learngit/git_tutorial/
Project_helloworld/.git
Agora quaisquer arquivos e pastas dentro do Project_helloworld serão rastreados pelo Git.
Questões:
Comandos básicos do Git: status, log, adicionar e comprometer
O comando de status mostra a condição atual do seu diretório de trabalho e o comando log mostra o histórico. Vamos tentar o comando de status:
$ git status
No mestre da filial
COMPRIMENTO INICIAL
Nada a comprometer (criar/copiar arquivos e usar "git add" para rastrear)
A saída do comando de status Git está dizendo que você está no ramo principal. Esta é a filial padrão que o Git inicializa. (Você pode criar seus próprios ramos. Mais sobre filiais depois). Além disso, a saída está dizendo que não há nada para se comprometer.
Vamos tentar o comando log:
$ git log
Fatal: o seu ramo atual 'mestre' ainda não tem nenhuma confirmação
Então, é hora de criar algum código. Vamos criar um arquivo chamado índice.html:
Você pode usar o editor de texto para criar o arquivo. Depois de salvar o arquivo, verifique o status novamente:
$ git status
No mestre da filial
COMPRIMENTO INICIAL
Arquivos não rastreados:
(Use "git add…" para incluir no que será comprometido)
índice.html
Nada adicionado para cometer, mas arquivos não rastreados presentes (use "git add" para rastrear)
Git está lhe dizendo que você tem um arquivo chamado índice.HTML em seu diretório de trabalho que está não rastreado.
Vamos garantir que o índice.HTML é rastreado. Você precisará usar o comando add:
$ git add Índice.htmlComo alternativa, você pode usar o “.”Opção para adicionar tudo no diretório:
$ git add .
Agora vamos verificar o status novamente:
$ git status
No mestre da filial
COMPRIMENTO INICIAL
Mudanças a serem comprometidas:
(Use "Git RM -Cachado ..." para se soltar)
Novo arquivo: índice.html
O verde indica que o índice.O arquivo HTML está sendo rastreado pelo Git.
Dica: Conforme mencionado nas instruções acima, se você usar o comando:
$ Git RM -Índice Cachado.htmlSeu índice.HTML voltará ao status não rastreado. Você terá que adicioná -lo novamente para trazê -lo de volta ao estadiamento.]
Vamos verificar o log novamente:
$ git log
Fatal: o seu ramo atual 'mestre' ainda não tem nenhuma confirmação
Portanto, mesmo que o Git seja Índice de Rastreamento.HTML, ainda não há nada no repositório Git sobre o arquivo. Vamos cometer nossas mudanças:
$ git Commit -m "Compromiting Index.html "O texto dentro das citações após o "-m" é um comentário que entrará no arquivo de log. Você pode usar o Git Commit sem "-m", mas o Git abrirá um editor de texto pedindo que você escreva os comentários. É mais fácil apenas colocar os comentários diretamente na linha de comando.
Agora vamos verificar nosso arquivo de log:
$ git log
COMIT F136D22040BA81686C9522F4FF94961A68751AF7
Autor: Zak H
Data: Seg 4 de junho 16:53:42 2018 -0700
Índice de Comprometimento.html
Você pode ver que está mostrando um commit. Você cometeu com sucesso suas alterações no seu repositório local. Se você quiser ver o mesmo log de maneira concisa, pode usar o seguinte comando:
$ git log --oneelineAvançando, usaremos esta forma do comando log porque facilita a compreensão do que está acontecendo.
Vamos começar a editar o índice.html. Abra o índice.Arquivo HTML em um editor e altere a linha "Hello World" para "Hello World! Sou eu!”E salve. Se você verificar o status novamente, verá que o GIT notou que está editando o arquivo:
$ git status
No mestre da filial
Mudanças não encenadas para comprometer:
(use "git add…" para atualizar o que será comprometido)
(Use "checkout git - ..." para descartar mudanças no diretório de trabalho)
modificado: índice.html
Nenhuma alteração adicionada ao comprometimento (use "git add" e/ou "commit git -a")
A mudança ainda está em seu diretório de trabalho. Você precisa empurrá -lo para a área de estadiamento. Use o comando add que você usou antes:
$ git add .
Verifique o status novamente:
$ git status
No mestre da filial
Mudanças a serem comprometidas:
(Use "Git Reset Head…" para se soltar)
modificado: índice.html
Agora suas mudanças estão na área de preparação. Você pode comprometê -lo com o repositório para salvar permanente:
$ git commit -m "ÍNDICE MODIFICADO.html para uma mensagem mais feliz "
[Mestre 0586662] Índice modificado.html para uma mensagem mais feliz
1 arquivo alterado, 1 inserção (+), 1 exclusão (-)
Você pode verificar o log para suas alterações permanentes:
$ git log --oneeline
0586662 ÍNDICE MODIFICADO.html para uma mensagem mais feliz
F136D22 Compromitter Index.html
Nesta seção, você aprendeu a usar o status, registrar, adicionar e confirmar comandos para acompanhar seus documentos no Git.
Questões:
Voltando aos arquivos mais antigos usando checkout
Quando você compromete um arquivo no Git, ele cria um hash único para cada compromisso. Você pode usá -los como identificadores para retornar a uma versão mais antiga.
Suponhamos que você queira voltar à sua versão anterior do índice.html. Primeiro, vejamos o índice.HTML na condição atual:
$ CAT INDEX.htmlVocê pode ver que tem a versão mais recente (“Olá mundo! Sou eu!”). Vamos verificar o log:
$ git log --oneeline
0586662 ÍNDICE MODIFICADO.html para uma mensagem mais feliz
F136D22 Compromitter Index.html
O hash para a versão anterior foi F136D22 ("Hello World"). Você pode usar o comando de checkout para chegar a essa versão:
$ git checkout f136d22
Nota: Verificando 'F136D22'.
Você está no estado de 'cabeça isolada'. Você pode olhar em volta, fazer mudanças experimentais
e cometê -los, e você pode descartar qualquer compromisso que fizer neste estado
sem impactar nenhum ramificador, realizando outro checkout.
Se você deseja criar uma nova filial para manter os compromissos que você cria, você pode
Faça isso (agora ou mais tarde) usando -b com o comando de checkout novamente. Exemplo:
checkout git -B
Head está agora em F136D22… Compromiting Index.html
Se você olhar para o conteúdo do índice.html, você verá:
$ CAT INDEX.htmlSó tem "Hello World". Então seu índice.HTML mudou para a versão mais antiga. Se você verificar o status:
$ git status
Cabeça destacada em F136D22
nada para se comprometer, diretório de trabalho limpo
Git está basicamente dizendo que a cabeça não está no commit mais recente. Você pode voltar ao comprometimento mais recente, conferindo a filial mestre usando o seguinte comando:
$ git checkout mestreAgora, se você verificar o status:
$ git status
No mestre da filial
nada para se comprometer, diretório de trabalho limpo
O aviso vermelho se foi. Além disso, se você verificar seu índice.HTML, você deve estar de volta à versão mais recente:
$ CAT INDEX.htmlO comando de checkout leva você a vários estados. Vamos aprender mais sobre o checkout na próxima seção.
Questões:
Checkout, ramificação e fusão
A ramificação é um dos melhores recursos do Git. Ajuda você a separar seu trabalho e experimentar mais. Em outros sistemas de controle de versão, a ramificação era demorada e difícil. Git facilitou a ramificação e a fusão.
Como você notou no comando de status, quando você cria um novo repositório Git, você está no ramo mestre.
$ git status
No mestre da filial
nada para se comprometer, diretório de trabalho limpo
Suponha que você esteja fazendo um site para seu amigo David. Você quer reutilizar o código do seu próprio site. Ramificação é uma ótima solução. Vamos chamar o ramo de David_website.
Você pode emitir o seguinte comando:
$ git ramo David_website
Você pode usar o seguinte comando para ver todos os ramos:
$ Git Branch -Lista
David_Website
* mestre
A estrela (*) ao lado do Mestre significa que você ainda está no ramo mestre. Você pode conferir o ramo David_Website com o seguinte comando:
checkout de $ git David_website
Mudou para o ramo 'David_website'
Agora, se você verificar novamente a lista de filiais, você vê:
$ Git Branch -Lista
* David_Website
mestre
Então você está no ramo David_Website.
Vamos mudar o índice.html de “Hello World! Sou eu!"Para" Hello World! É David!”E então encene e cometê -lo:
$ git add .
$ git Commit -m "Site alterado para David"
Se você verificar os logs, você deve ver:
$ git log --oneeline
345c0f4 alterou o site para David
0586662 ÍNDICE MODIFICADO.html para uma mensagem mais feliz
F136D22 Compromitter Index.html
E seu arquivo de índice deve ficar assim:
$ CAT INDEX.htmlAgora vamos conferir o ramo mestre novamente:
$ git checkout mestre
Mudou para a filial 'Mestre'
Se você verificar o status e o log:
$ git status
No mestre da filial
nada para se comprometer, diretório de trabalho limpo
$ git log --oneeline
0586662 ÍNDICE MODIFICADO.html para uma mensagem mais feliz
F136D22 Compromitter Index.html
Observe que você não tem seu terceiro compromisso no mestre. Porque esse compromisso é mantido apenas no ramo David_Website.
Isso é o que aconteceu
Suponha que nesta fase você decide, você não deseja continuar seu site. Você será apenas o desenvolvedor de David. Então você deseja mesclar as mudanças na filial de David_website para o mestre. Na filial mestre, você só precisa emitir os seguintes comandos (o comando de status é usado para verificar se você está no lugar certo):
$ git status
No mestre da filial
nada para se comprometer, diretório de trabalho limpo
$ git mesclar David_website
Atualizando 0586662… 345C0F4
Avanço rápido
índice.html | 2 +-
1 arquivo alterado, 1 inserção (+), 1 exclusão (-)
Dica: Você está puxando mudanças de David_Website para Master. Você tem que estar no mestre para conseguir isso.
Agora, se você verificar o log no mestre, verá o terceiro compromisso está lá:
$ git log --oneeline
345c0f4 alterou o site para David
0586662 ÍNDICE MODIFICADO.html para uma mensagem mais feliz
F136D22 Compromitter Index.html
Você fundiu com sucesso o ramo David_Website em mestre. E seu índice.HTML for Master Branch parece idêntico a David_Website Branch:
$ CAT INDEX.htmlVocê pode manter o ramo David_Website:
$ Git Branch -Lista
David_Website
* mestre
Ou você pode excluí -lo:
$ git ramo -d David_website
Filial excluído David_Website (era 345c0f4).
Após a exclusão, você não deve mais ver o ramo David_Website:
$ Git Branch -Lista
* mestre
Dica: Durante uma mesclagem, se o git não puder se fundir automaticamente, isso lhe dará erros de conflito de mesclagem. Nesse caso, você deve resolver manualmente os problemas de mesclagem.
Questões:
Repositório remoto
Até agora, todo o seu trabalho tem sido local. Você tem cometeu suas mudanças em um repositório local. Mas é hora de compartilhar seu trabalho com o mundo.
O repositório remoto do Git é basicamente outra cópia do seu repositório local que pode ser acessado por outros. Você pode configurar um servidor e torná -lo o repositório remoto. Mas a maioria das pessoas usa Github ou Bitbucket para esse fim. Você pode criar repositórios públicos gratuitamente lá, que podem ser acessados por qualquer pessoa.
Vamos criar um repositório remoto no Github.
Primeiro, você precisa criar uma conta do GitHub []. Depois de ter a conta, crie um novo repositório usando o botão "novo repositório". Use "Project_Website" como o nome do repositório (você pode escolher outra coisa, se quiser).
Você deve ver uma guia de código com instruções como estas:
eco "# project_website" >> leia.MD
git init
git add readme.MD
Git Commit -M "Primeiro Commits"
git remoto adicionar origem [email protected]: yourusername/project_website.git
Git Push -u Origin Master
Copie o seguinte comando "Git Remote Add Origin" e execute -o no seu diretório de trabalho:
$ git remoto adicionar origem [email protected]: yourusername/project_website.git
NOTA: No seu caso, seu nome de uso deve ser o que você usou para criar sua conta do github.
No comando acima, você instruiu a localização do repositório remoto. O comando está dizendo ao Git que a "origem" do seu diretório de trabalho do Project_Helloworld será "[email protected]: yourusername/project_website.git ”.
Agora empurre seu código de sua filial mestre para origem (repositório remoto):
$ Git Push Origin Master
Contando objetos: 9, feito.
Compressão delta usando até 4 threads.
Objetos de compactação: 100% (6/6), feito.
Objetos de escrita: 100% (9/9), 803 bytes | 0 bytes/s, feito.
Total 9 (Delta 2), reutilizado 0 (delta 0)
Remoto: resolvendo deltas: 100% (2/2), feito.
Para [email protected]: yourusername/project_website.git
* [New Branch] Mestre -> Mestre
Se você refrescar seu navegador no Github, deve ver que o índice.o arquivo html está lá em cima. Portanto, seu código é público e outros desenvolvedores podem verificar e modificar o código no repositório remoto.
Como desenvolvedor, você estará trabalhando com o código de outras pessoas. Então vale a pena tentar verificar o código do github.
Vamos para um novo diretório onde você não tem nada. No lado direito do repositório do GitHub, você notará o botão "Clone ou Download". Se você clicar nele, ele deve lhe dar um endereço SSH. Execute o seguinte comando com o endereço SSH:
$ git clone [email protected]: yourusername/project_website.git
A saída deve ficar assim:
$ git clone [email protected]: yourusername/project_website.git
Clonando em 'Project_website'…
Remoto: contando objetos: 9, feito.
Remoto: Compressioning Objetos: 100% (4/4), feito.
Remoto: Total 9 (Delta 2), reutilizado 9 (Delta 2), Reilvatou 0
Objetos recebidos: 100% (9/9), feito.
Resolução Deltas: 100% (2/2), feito.
Verificando a conectividade ... feita.
Ele criará um project_website em sua pasta limpa. Se você entrar, você deve ver o índice.HTML do seu Project_Helloworld.
Então você alcançou o seguinte:
Vamos outro arquivo do novo diretório de trabalho Project_Website:
$ touch readme.MD
$ git add .
$ git Commit -m "Adicionado readme.md "
$ Git Push Origin Master
Se você atualizar a página do GitHub Project_Website, você verá o ReadMe.arquivo md lá.
Nota: Quando você baixará o código do GitHub, o diretório de trabalho sabe automaticamente a origem. Você não precisa defini -lo com o comando "git remoto add orig Origin".
Questões:
Você pode encontrar mais informações sobre todos os comandos nos documentos git []. Embora existam ferramentas de interface do usuário disponíveis, a linha de comando é a melhor maneira de dominar o git. Isso lhe dará uma base mais forte para o seu trabalho de desenvolvimento.