<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hildeberto</title>
    <description>The latest articles on DEV Community by Hildeberto (@hilam).</description>
    <link>https://dev.to/hilam</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F142660%2F7038a0c4-be4f-419b-be46-844f2b860792.jpeg</url>
      <title>DEV Community: Hildeberto</title>
      <link>https://dev.to/hilam</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hilam"/>
    <language>en</language>
    <item>
      <title>Abraçar mudanças (IV)</title>
      <dc:creator>Hildeberto</dc:creator>
      <pubDate>Mon, 07 Nov 2022 11:11:53 +0000</pubDate>
      <link>https://dev.to/hilam/abracar-mudancas-iv-3p63</link>
      <guid>https://dev.to/hilam/abracar-mudancas-iv-3p63</guid>
      <description>&lt;p&gt;Este é o quarto artigo de uma série sobre &lt;a href="https://www.git-scm.com"&gt;Git&lt;/a&gt;. Veja os outros artigos: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/hilam/abracar-as-mudancas-i-295i"&gt;I - Controle de versão&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/hilam/abracar-as-mudancas-ii-246b"&gt;II - Configuração&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/hilam/abracar-as-mudancas-iii-5f7h"&gt;III - O que há por baixo dos panos&lt;/a&gt;&lt;br&gt;
IV - Comandos mais usados&lt;br&gt;
V - Fluxo de trabalho&lt;br&gt;
VI - Serviços Git na web&lt;br&gt;
VII - Contribuindo com código aberto&lt;/p&gt;

&lt;h3&gt;
  
  
  Comandos mais usados
&lt;/h3&gt;

&lt;p&gt;Há muito material disponível na rede, sobre comandos do git. Vou apenas colocar os que achei mais interessantes na última pesquisa que fiz.&lt;/p&gt;

&lt;h4&gt;
  
  
  Git fichas
&lt;/h4&gt;

&lt;p&gt;Um ótimo projeto, para um conhecimento granular dos comandos git é o &lt;a href="https://gitfichas.com/"&gt;Git Fichas&lt;/a&gt;, criado e mantido por &lt;a href="https://dev.to/jesstemporal"&gt;Jessica Temporal&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Posts da Jéssica sobre git, na plataforma dev.to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/jesstemporal/5-dicas-para-fazer-o-seu-pull-request-brilhar-k7a"&gt;https://dev.to/jesstemporal/5-dicas-para-fazer-o-seu-pull-request-brilhar-k7a&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/jesstemporal/resolvendo-conflitos-4jen"&gt;https://dev.to/jesstemporal/resolvendo-conflitos-4jen&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/jesstemporal/corrigindo-a-origem-de-um-branch-com-git-rebase-4a1n"&gt;https://dev.to/jesstemporal/corrigindo-a-origem-de-um-branch-com-git-rebase-4a1n&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/jesstemporal/atualizando-um-branch-com-git-rebase-3605"&gt;https://dev.to/jesstemporal/atualizando-um-branch-com-git-rebase-3605&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/jesstemporal/criando-um-novo-branch-e-mudando-pra-ele-com-apenas-um-comando-3c7n"&gt;https://dev.to/jesstemporal/criando-um-novo-branch-e-mudando-pra-ele-com-apenas-um-comando-3c7n&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/jesstemporal/desfazendo-os-ultimos-commits-usando-git-reset-4ink"&gt;https://dev.to/jesstemporal/desfazendo-os-ultimos-commits-usando-git-reset-4ink&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/jesstemporal/desfazendo-o-ultimo-commit-e-mantendo-as-alteracoes-para-um-proximo-commit-568j"&gt;https://dev.to/jesstemporal/desfazendo-o-ultimo-commit-e-mantendo-as-alteracoes-para-um-proximo-commit-568j&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/jesstemporal/usando-git-stash-e-git-stash-pop-5dlf"&gt;https://dev.to/jesstemporal/usando-git-stash-e-git-stash-pop-5dlf&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/jesstemporal/entenda-a-diferenca-entre-git-stash-pop-e-git-stash-apply-9k0"&gt;https://dev.to/jesstemporal/entenda-a-diferenca-entre-git-stash-pop-e-git-stash-apply-9k0&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Outras referências
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.freecodecamp.org/portuguese/news/10-comandos-do-git-que-todo-desenvolvedor-deveria-conhecer/"&gt;https://www.freecodecamp.org/portuguese/news/10-comandos-do-git-que-todo-desenvolvedor-deveria-conhecer/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://training.github.com/downloads/pt_BR/github-git-cheat-sheet/"&gt;https://training.github.com/downloads/pt_BR/github-git-cheat-sheet/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://comandosgit.github.io/"&gt;https://comandosgit.github.io/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.codigofonte.com.br/artigos/top-25-comandos-do-git"&gt;https://www.codigofonte.com.br/artigos/top-25-comandos-do-git&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;São algumas recomendações para o aprendizado dos comandos mais usados no git.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Abraçar mudanças (III)</title>
      <dc:creator>Hildeberto</dc:creator>
      <pubDate>Mon, 28 Dec 2020 15:01:52 +0000</pubDate>
      <link>https://dev.to/hilam/abracar-as-mudancas-iii-5f7h</link>
      <guid>https://dev.to/hilam/abracar-as-mudancas-iii-5f7h</guid>
      <description>&lt;p&gt;Este é o terceiro artigo de uma série sobre &lt;a href="https://www.git-scm.com"&gt;Git&lt;/a&gt;. É um assunto extenso que será dividido em: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/hilam/abracar-as-mudancas-i-295i"&gt;I - Controle de versão&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/hilam/abracar-as-mudancas-ii-246b"&gt;II - Configuração&lt;/a&gt;&lt;br&gt;
III - O que há por baixo dos panos&lt;br&gt;
&lt;a href="https://dev.to/hilam/abracar-mudancas-iv-3p63"&gt;IV - Comandos mais comuns&lt;/a&gt;&lt;br&gt;
V - Fluxo de trabalho&lt;br&gt;
VI - Serviços Git na web&lt;br&gt;
VII - Contribuindo com código aberto&lt;/p&gt;

&lt;h3&gt;
  
  
  O que há por baixo dos panos
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6K1CVqWZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i47p6z9s83tljmnr1vxy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6K1CVqWZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i47p6z9s83tljmnr1vxy.png" alt="Alt Text" width="499" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O Repositório do Git é uma pasta, denominada &lt;code&gt;.git/&lt;/code&gt;, criada pelo comando &lt;code&gt;git init&lt;/code&gt; numa pasta "raiz", em que se quer rastrear mudanças. &lt;/p&gt;

&lt;p&gt;O repositório é controlado pelo Git, e raramente o usaremos diretamente. Através de um sistema de arquivos "paralelo" ao do sistema operacional e um banco de dados do tipo "chave-valor", são gerenciados os elementos necessários para o controle de versões. &lt;/p&gt;

&lt;p&gt;Cada elemento no repositório tem um &lt;strong&gt;identificador único&lt;/strong&gt; (hash), para manter a integridade dos dados. Ali, os dados serão sempre incluídos (não há exclusão). Pastas e arquivos rastreados, marcações sobre as alterações, metadados e objetos internos, usados pelo Git para cumprir suas funções.&lt;/p&gt;

&lt;p&gt;Uma das maiores contribuições do Git, em relação ao controle de versão, é a &lt;strong&gt;forma&lt;/strong&gt; como armazena as alterações, cujas consequências principais são a economia de espaço em disco e a capacidade de "ramificar" facilmente o trabalho, muito menos custoso que as ferramentas anteriores (CVS, SVN).&lt;/p&gt;

&lt;h3&gt;
  
  
  Commit
&lt;/h3&gt;

&lt;p&gt;Um dos elementos principais do controle de versão são as confirmações de alterações selecionadas, comumente chamadas "commits", que são tratadas pelo Git como instantâneos ou "snapshots", que propiciam a maior parte da funcionalidade da ferramenta.&lt;/p&gt;

&lt;p&gt;Os arquivos da pasta em que se encontra o repositório, também chamada área de trabalho (working area), podem estar em algum desses estados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Não rastreado (untracked): enquanto não for adicionado, ao menos uma vez, ao índice de confirmações (Stage index)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Não modificado (unmodified): já é rastreado pelo repositório, mas não teve alteração, do último "commit" até o momento&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modificado (modified): já é rastreado pelo repositório e teve alteração, desde o último "commit"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Confirmado (staged): novo arquivo adicionado ao rastreameno do repositório ou arquivo já rastreado, modificado desde o último "commit" e adicionado ao índice de confirmações (stage index)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HMNTxzE0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jw0vae8injgpgjszdka8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HMNTxzE0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jw0vae8injgpgjszdka8.png" alt="Alt Text" width="880" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Vale ressaltar, aos falantes de português, que a palavra "stage" significa "palco" e "to stage", "encenar". Por que traduzir como "confirmação", ou "confirmado"? "Entrar em cena" é **confirmar a participação do ator no espetáculo**...&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O "commit" registra, num formato interno, as confirmações adicionadas ao índice, atribuindo-lhes um identificador único (hash), e associando a uma mensagem fornecida que, geralmente, explica as alterações enviadas ao repositório.&lt;/p&gt;

&lt;p&gt;O instantâneo do repositório registra os arquivos não modificados, através do identificador (hash) do último "commit" daquele arquivo, e, dos arquivos modificados, além da última modificação até então, registra "o que" mudou (a &lt;strong&gt;diferença&lt;/strong&gt; entre o anterior e o atual).&lt;/p&gt;

&lt;p&gt;A economia de espaço em disco é notória, com essa opção. Não é necessário replicar o arquivo em diferentes instantâneos. Com os identificadores é possível obter um histórico completo do que aconteceu àquele arquivo, e se necessário, reverter a um momento anterior, de qualquer arquivo rastreado.&lt;/p&gt;

&lt;p&gt;As alterações armazenadas seguem a seguinte diagramação:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hh2ZJ3VW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zqsc9mum7g4cb5oe5tgh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hh2ZJ3VW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zqsc9mum7g4cb5oe5tgh.png" alt="Alt Text" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O registro de inclusão, o primeiro commit de um arquivo, vai armazená-lo completo. As alterações seguintes armazenarão apenas o que foi modificado (inclusões, alterações e exclusões de texto, arquivo renomeado, excluído, etc.), sempre através de identificadores únicos (hashs), em cada confirmação.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ramificações
&lt;/h3&gt;

&lt;p&gt;Outro elemento crucial do Git, favorecido pela arquitetura da ferramenta, é a facilidade de criar ramificações (branches) do trabalho no repositório. Tais ramificações são criadas com o identificador do commit de origem, e terão seus próprios commits, separados do ramo principal.&lt;/p&gt;

&lt;p&gt;Novamente, um ganho de espaço em disco considerável. Nas ferramentas anteriores, o custo de uma ramificação era altíssimo (duplicação), além da complexidade para reunir a ramificação ao ramo principal, equivalentemente custosa. Isso foi superado pelo Git e sua arquitetura.&lt;/p&gt;

&lt;p&gt;Trabalhar numa ramificação significa ter todos os elementos do ramo principal disponíveis e, sobre eles, construir novidades e alterações sem afetar diretamente o que já existia. &lt;/p&gt;

&lt;p&gt;Num determinado momento, em que a ramificação evolui ao ponto em que se quer que faça parte do ramo principal, a reunião (merge) do trabalho é feita de maneira praticamente transparente.&lt;/p&gt;

&lt;p&gt;Geralmente, as ramificações são polêmicas entre os desenvolvedores. Entre os que não usam em nenhuma ocasião e os que usam para tudo, há que se ter boa noção de que o trabalho remoto, em equipe, necessita de uma organização ajustada, e que as ramificações ajudam a minimizar a complexidade de tal tarefa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Distribuído
&lt;/h3&gt;

&lt;p&gt;Outra distinção do Git em relação aos seus concorrentes é a sua natureza distribuída. As operações locais podem ser sincronizadas num repositório remoto.&lt;/p&gt;

&lt;p&gt;Essa sincronização, quase sempre, é de ramificações e instantâneos, bem menos custosos para transmissão em rede, por não replicarem os arquivos de forma completa.&lt;/p&gt;

&lt;p&gt;Falaremos sobre as ramificações e a distribuição do trabalho, com mais detalhes, em artigo posterior.&lt;/p&gt;

&lt;p&gt;Referência:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain"&gt;Git internals&lt;/a&gt;, no Git Book&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No &lt;a href="https://dev.to/hilam/abracar-mudancas-iv-3p63"&gt;próximo artigo&lt;/a&gt;, uma geral sobre os comandos mais usados.&lt;/p&gt;

</description>
      <category>git</category>
      <category>development</category>
      <category>desenvolvimento</category>
    </item>
    <item>
      <title>Abraçar mudanças (II)</title>
      <dc:creator>Hildeberto</dc:creator>
      <pubDate>Sat, 19 Dec 2020 14:18:51 +0000</pubDate>
      <link>https://dev.to/hilam/abracar-as-mudancas-ii-246b</link>
      <guid>https://dev.to/hilam/abracar-as-mudancas-ii-246b</guid>
      <description>&lt;p&gt;Este é o segundo artigo de uma série sobre &lt;a href="https://www.git-scm.com"&gt;Git&lt;/a&gt;. É um assunto extenso que será dividido em: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/hilam/abracar-as-mudancas-i-295i"&gt;I - Controle de versão&lt;/a&gt;&lt;br&gt;
II - Configuração&lt;br&gt;
&lt;a href="https://dev.to/hilam/abracar-as-mudancas-iii-5f7h"&gt;III - O que há por baixo dos panos&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/hilam/abracar-mudancas-iv-3p63"&gt;IV - Comandos mais comuns&lt;/a&gt;&lt;br&gt;
V - Fluxo de trabalho&lt;br&gt;
VI - Serviços Git na web&lt;br&gt;
VII - Contribuindo com código aberto&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuração
&lt;/h3&gt;

&lt;p&gt;O comando responsável pela configuração é o &lt;code&gt;git config&lt;/code&gt;. O Git tem muitos níveis possíveis de configuração. Trataremos aqui: &lt;strong&gt;no repositório, no usuário e no sistema&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Esses níveis são expostos por arquivos-texto que contêm as opções de configuração vigentes. As configurações que não estiverem declaradas nesses arquivos, usarão um &lt;strong&gt;valor padrão&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Uma configuração no &lt;strong&gt;nível do sistema&lt;/strong&gt; é gravada pelo comando &lt;code&gt;git config --system&lt;/code&gt;, seguido do nome da configuração e do seu valor. Esse par "nome-valor" será salvo no arquivo &lt;code&gt;/etc/gitconfig&lt;/code&gt;. E necessário ter permissão de &lt;strong&gt;superusuário&lt;/strong&gt; para configurar o Git nesse nível. &lt;/p&gt;

&lt;p&gt;Os valores aplicados serão usados para todos os usuários do sistema operacional. Como exemplo, abaixo o comando que utilizará o valor "main" como &lt;strong&gt;nome da ramificação principal&lt;/strong&gt;, na criação de um repositório:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo git config --system init.defaultBranch main&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A configuração no nível de usuário é gravada pelo comando &lt;code&gt;git config --global&lt;/code&gt;, seguido do nome da configuração e do seu valor. Será salva no arquivo &lt;code&gt;~/.gitconfig&lt;/code&gt; ou &lt;code&gt;~/.config/git/config&lt;/code&gt;, a depender do sistema operacional, sendo o ~, o símbolo da pasta padrão do usuário conectado. Os valores aplicados serão usados para o usuário conectado. Exemplos comuns:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git config --global user.name "Hildeberto"&lt;/code&gt; e&lt;br&gt;
&lt;code&gt;git config --global user.email "hildeberto@gmail.com"&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;usados para ajustar nome e email que serão usados para &lt;strong&gt;atribuir&lt;/strong&gt; as modificações nos repositórios.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;git config --global alias.st 'status'&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;usado para declarar um "alias" (apelido, outra forma de se referir) para o comando "status", que a partir de então pode ser referenciado apenas como "st", ou seja um &lt;code&gt;git st&lt;/code&gt; obterá o mesmo resultado que um &lt;code&gt;git status&lt;/code&gt;. (falaremos sobre "alias" com mais detalhes)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A configuração no nível de repositório é gravada pelo comando &lt;code&gt;git config --local&lt;/code&gt;, seguido do nome da configuração e do seu valor. Será gravado no arquivo &lt;code&gt;.git/config&lt;/code&gt;, na pasta do repositório. Os valores aplicados serão usados para aquele repositório específico. Exemplo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git config --local user.name "Outronome"&lt;/code&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vai registrar as alterações do repositório com outro nome de usuário, que aquele definido no nível de usuário.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para obter a configuração vigente para o repositório em que está localizado, use o comando &lt;code&gt;git config --list&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Qualquer configuração pode ser &lt;strong&gt;sobrescrita&lt;/strong&gt;, ajustada por um valor diferente, por uma configuração de nome igual, na seguinte ordem de precedência: repositório, usuário, sistema. &lt;/p&gt;

&lt;p&gt;Ou seja, o que é configurado no nível do repositório sobrescreve a mesma configuração no nível de usuário ou do sistema. &lt;/p&gt;

&lt;p&gt;Praticamente tudo é configurável no Git. O comando &lt;code&gt;git help --config&lt;/code&gt; listará todas as opções de configuração disponíveis. Mais detalhes podem ser obtidos com o comando &lt;code&gt;git help config&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Referência
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Git Configuration (&lt;a href="https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration"&gt;https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No &lt;a href="https://dev.to/hilam/abracar-as-mudancas-iii-5f7h"&gt;próximo artigo&lt;/a&gt;, vamos ver como é a ferramenta "por baixo dos panos".&lt;/p&gt;

</description>
      <category>git</category>
      <category>development</category>
      <category>desenvolvimento</category>
    </item>
    <item>
      <title>Abraçar mudanças (I)</title>
      <dc:creator>Hildeberto</dc:creator>
      <pubDate>Sat, 19 Dec 2020 13:22:50 +0000</pubDate>
      <link>https://dev.to/hilam/abracar-as-mudancas-i-295i</link>
      <guid>https://dev.to/hilam/abracar-as-mudancas-i-295i</guid>
      <description>&lt;p&gt;Este é o primeiro artigo de uma série sobre &lt;a href="https://www.git-scm.com"&gt;Git&lt;/a&gt;. É um assunto extenso que será dividido em: &lt;/p&gt;

&lt;p&gt;I - Controle de versão&lt;br&gt;
&lt;a href="https://dev.to/hilam/abracar-as-mudancas-ii-246b"&gt;II - Configuração&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/hilam/abracar-as-mudancas-iii-5f7h"&gt;III - O que há por baixo dos panos&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/hilam/abracar-mudancas-iv-3p63"&gt;IV - Comandos mais comuns&lt;/a&gt;&lt;br&gt;
V - Fluxo de trabalho&lt;br&gt;
VI - Serviços Git na web&lt;br&gt;
VII - Contribuindo com código aberto&lt;/p&gt;

&lt;h3&gt;
  
  
  Controle de versão
&lt;/h3&gt;

&lt;p&gt;Nos processos de escrita, nos defrontamos constantemente com um desafio: &lt;strong&gt;precisamos produzir&lt;/strong&gt; (incluir, alterar ou excluir texto); para testar novas possibilidades, descartar coisas que não fazem mais sentido,  aplicar novas aprendizagens, é necessário &lt;strong&gt;manter versões anteriores&lt;/strong&gt;, para que se possa perceber a evolução em que a obra foi processada e, eventualmente, retornar a um estágio anterior, desistindo de tais mudanças.&lt;/p&gt;

&lt;p&gt;A forma viva dos escritos é o &lt;strong&gt;rascunho&lt;/strong&gt;. A escrita acontece enquanto processo. Tudo é rascunho, até que nos &lt;strong&gt;comprometemos&lt;/strong&gt; com um "momento", para dar a obra como "acabada". Não costumamos enxergar a gradação e evolução numa obra acabada, mas elas estão lá. &lt;/p&gt;

&lt;p&gt;Daí, decorre uma lição importante: não se apegue demais ao que escreve, pois tudo flui. Mesmo a obra dada como acabada por um autor, ainda &lt;strong&gt;poderá evoluir (ou degradar)&lt;/strong&gt;, ser escrita de forma diferente, seja pelo mesmo autor, seja por outros.&lt;/p&gt;

&lt;p&gt;Códigos em linguagens de programação, se beneficiam muito do que chamaremos "controle de versão". É necessário testar antes de distribuir, sempre mantendo a possibilidade de reversão de quaisquer mudanças, e, em algum momento, há o comprometimento com uma estabilidade temporária, que poderá ser distribuída a terceiros.&lt;/p&gt;

&lt;p&gt;A ferramenta mais utilizada atualmente para controle de versão é o &lt;a href="https://www.git-scm.com/downloads"&gt;Git&lt;/a&gt;. O objetivo é a fácil recuperação em caso de erros ou perda de arquivos. Os meios: histórico e documentação das mudanças, comparação de diferenças e possibilidade de desfazer alterações, todas elas disponíveis nessa ferramenta.&lt;/p&gt;

&lt;h3&gt;
  
  
  Termos comuns do Git
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Repository (repositório): Uma pasta de arquivos, nomeada &lt;strong&gt;.git&lt;/strong&gt;, criada e controlada pela ferramenta, que armazena objetos internos, metadados e os arquivos e pastas que queremos &lt;strong&gt;rastrear&lt;/strong&gt;. Tem, por padrão uma ramificação (branch) inicial, atualmente denominada "main"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clone: Cópia, duplicação de um repositório&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Working area (área de trabalho): Uma lista de arquivos da pasta sendo rastreada, em que cada arquivo tem um &lt;strong&gt;estado&lt;/strong&gt;, na ramificação ativada no momento: "não rastreado" (untracked), "não modificado" (unmodified), "modificado" (modified) ou "confirmado" (staged)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Index (índice, sumário): Um arquivo do repositório que armazena informação sobre &lt;strong&gt;quais alterações farão parte do próximo&lt;/strong&gt; envio ao repositório. Também conhecida como Staging Area (área de preparação)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Commit (envio, entrega): Confirmação das mudanças incluídas no índice, que são enviadas ao repositório, na forma de "instantâneos" (snapshots, no sentido fotográfico). Um momento de &lt;strong&gt;comprometimento&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Branch (ramo, galho): Uma ramificação (versão) obtida a partir do ramo principal ou de outra ramificação, cujas confirmações de alterações estão &lt;strong&gt;separadas&lt;/strong&gt; do ramo de origem&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Push (empurrar): Transferir arquivos de um repositório fonte (atual) para outro repositório (local ou remoto)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pull (puxar, extrair): Trazer as últimas mudanças de um repositório (local ou remoto) para o repositório atual.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No &lt;a href="https://dev.to/hilam/abracar-as-mudancas-ii-246b"&gt;próximo artigo&lt;/a&gt;, começamos a desentranhar a ferramenta, iniciando pela sua configuração.&lt;/p&gt;

</description>
      <category>git</category>
      <category>development</category>
      <category>desenvolvimento</category>
    </item>
    <item>
      <title>Porquê Linux?</title>
      <dc:creator>Hildeberto</dc:creator>
      <pubDate>Thu, 08 Aug 2019 22:43:01 +0000</pubDate>
      <link>https://dev.to/hilam/porque-linux-3dic</link>
      <guid>https://dev.to/hilam/porque-linux-3dic</guid>
      <description>&lt;p&gt;Para quaisquer linguagens de programação, exceto provavelmente para linguagens mantidas pela e para Apple, o melhor ambiente operacional para a atividade de desenvolvimento de sistemas é o &lt;a href="https://duckduckgo.com/?q=linux+operating+system&amp;amp;t=ffab"&gt;Linux&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;O Windows 10 agora permite instalações Linux (&lt;a href="https://docs.microsoft.com/en-us/windows/wsl/install-win10"&gt;WSL&lt;/a&gt;), tentando convencer aos desenvolvedores que não precisam mais instalar um Linux em dual boot, ou mesmo desinstalar o Windows.&lt;/p&gt;

&lt;p&gt;Eu afirmo que, qualquer que seja sua escolha, será uma boa escolha. Se quiser experimentar, não vai faltar &lt;a href="https://www.linux.org/pages/download/"&gt;opção&lt;/a&gt;. Eu mesmo já usei CentOS, Red Hat, Debian, Ubuntu, entre outros. O Linux suporta a grande maioria dos servidores corporativos atualmente em atividade. Desde a  pequena empresa até os grandes Cloud Providers. Nessas máquinas rodam nossos sistemas.&lt;/p&gt;

&lt;p&gt;Desenvolver no mesmo ambiente operacional onde o sistema vai rodar é um importante motivo pelo qual você deve usar esse mesmo ambiente para programar. Além disso, é um ambiente estável, maduro, mais seguro, mais customizável. Enfim, se você não acha que já respondi à pergunta inicial, não perca mais seu tempo.&lt;/p&gt;

&lt;p&gt;Minha escolha atual de ambiente operacional para desenvolvimento é o &lt;a href="https://xubuntu.org/"&gt;Xubuntu&lt;/a&gt; 18.04.2 LTS, versão desktop. Trata-se de uma distribuição Debian-like, com uma interface gráfica (Xfce) leve e eficiente. A interface gráfica, no meu caso, é a mais simples possível. Faço poucas configurações visuais, embora haja muitas disponíveis. (Fontes e temas são fáceis de configurar, e é onde preciso mexer, com certeza.)&lt;/p&gt;

&lt;p&gt;Aí é só instalar seu editor de textos ou IDE preferida, um multiplexador de terminal (você deverá usar bastante no processo de desenvolver, não tem jeito), e você estará pronto para começar. Em breve vou detalhar algumas ferramentas que tornam a vida do desenvolvedor mais fácil. Para instalação de linguagens de programação, por exemplo.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>development</category>
      <category>ambienteoperacional</category>
      <category>desenvolvimento</category>
    </item>
    <item>
      <title>Porquê Python?</title>
      <dc:creator>Hildeberto</dc:creator>
      <pubDate>Thu, 18 Apr 2019 11:46:54 +0000</pubDate>
      <link>https://dev.to/hilam/porque-python-2c3</link>
      <guid>https://dev.to/hilam/porque-python-2c3</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdo89k0xmuxf1ika5z6o1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdo89k0xmuxf1ika5z6o1.png" alt="XKCD Python"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.xkcd.com/353/" rel="noopener noreferrer"&gt;Fonte&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por volta de 2010, num período em que eu estava coordenando a equipe de desenvolvimento, e, seguindo orientações dos projetos nacionais da instituição, fizemos todos diversos treinamentos, com o intuito de definir um "processo de desenvolvimento" (concluído, fortemente baseado em RUP) e usar a linguagem de programação Java, para desenvolver os sistemas que seriam usados ora em diante. &lt;/p&gt;

&lt;p&gt;Após esse treinamento eu, que já tinha programado em Cobol, C, Pascal, Clipper, Object Pascal, PL/SQL, PHP, até Bash, me senti profundamente incomodado com aquela direção. Uma linguagem tão verbosa, e naquela época, cheia de configurações em arquivos XML, não deveria estar conquistando tanto terreno corporativo. Mas fui voto vencido. Eu participei em cerca de 60 horas de treinamento e não consegui ter nenhum sentimento positivo com Java.&lt;/p&gt;

&lt;p&gt;Em 2011, precisávamos definir um CMS para ser usado na intranet. Até pensamos em criar um, usando Java, mas acabamos decidindo não reinventar a roda. Os candidatos eram codificados em Java, Python e Ruby. A equipe já conhecia o Java e partimos num treinamento do Plone, que usa Python como linguagem principal. Em 24 horas de treinamento, eu estava completamente apaixonado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Porquê Python?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.python.org/" rel="noopener noreferrer"&gt;Python&lt;/a&gt; é uma linguagem de programação de &lt;a href="https://becode.com.br/linguagens-alto-nivel-x-baixo-nivel/" rel="noopener noreferrer"&gt;alto nível&lt;/a&gt;, criada em 1991, por &lt;a href="https://pt.wikipedia.org/wiki/Guido_van_Rossum" rel="noopener noreferrer"&gt;Guido van Rossum&lt;/a&gt;. &lt;a href="https://pt.wikipedia.org/wiki/Monty_Python" rel="noopener noreferrer"&gt;Monty Python&lt;/a&gt; era um grupo de comediantes ingleses, que inspirou o nome da linguagem.&lt;/p&gt;

&lt;p&gt;Uma simples consulta no &lt;a href="https://duckduckgo.com/?q=porqu%C3%AA+python" rel="noopener noreferrer"&gt;DuckDuckGo&lt;/a&gt; vai trazer várias fontes de referência, com excelentes artigos, palestras e até vídeos, que exaurem bastante bem o assunto da pergunta-título. Cito alguns tópicos que você vai encontrar nesse material:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linguagem de programação livre e de código aberto, com governança democrática através da &lt;a href="https://www.python.org/psf/" rel="noopener noreferrer"&gt;Python Software Foundation&lt;/a&gt; (equivalente ao que conhecemos por Organização Não-Governamental Sem Fins Lucrativos)&lt;/li&gt;
&lt;li&gt;Ideal para iniciantes, pela legibilidade e simplicidade&lt;/li&gt;
&lt;li&gt;Com pouco código, rapidamente, você consegue bastante resultado (NÃO É verbosa!)&lt;/li&gt;
&lt;li&gt;Tão boa de ensinar como é de aprender. Várias instituições de ensino estão adotando a linguagem como a primeira a ser ensinada aos seus alunos&lt;/li&gt;
&lt;li&gt;A versatilidade da linguagem impressiona. É usado para:

&lt;ul&gt;
&lt;li&gt;qualquer situação que necessite automação de tarefas repetíveis&lt;/li&gt;
&lt;li&gt;desenvolvimento para janelas (Windows, Linux, Android, iOS)&lt;/li&gt;
&lt;li&gt;desenvolvimento web (frontend, backend)&lt;/li&gt;
&lt;li&gt;análise e manipulação de imagens, vídeos e textos&lt;/li&gt;
&lt;li&gt;inteligência artificial e aprendizado de máquina&lt;/li&gt;
&lt;li&gt;química, biologia, matemática, estatística&lt;/li&gt;
&lt;li&gt;arte digital, música eletrônica, jogos&lt;/li&gt;
&lt;li&gt;operações em servidores&lt;/li&gt;
&lt;li&gt;entre outras tantas possibilidades...&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Um conjunto de &lt;a href="https://pypi.org/" rel="noopener noreferrer"&gt;bibliotecas&lt;/a&gt; de código aberto invejável, que garantem a versatilidade citada anteriormente&lt;/li&gt;

&lt;li&gt;É uma linguagem desejada no mercado de trabalho. Empresas como Google, Facebook, DreamWorks, Canonical, Red Hat, NASA, são algumas das maiores, que podem ser citadas aqui.&lt;/li&gt;

&lt;li&gt;Aprender Python ajuda no aprendizado das outras linguagens&lt;/li&gt;

&lt;li&gt;Interage facilmente com outras linguagens&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://www.python.org/community/" rel="noopener noreferrer"&gt;Comunidade&lt;/a&gt; de usuários diferenciada em relação à inclusão de pessoas ao ecossistema da linguagem. &lt;/li&gt;

&lt;li&gt;A comunidade &lt;a href="https://www.python.org.br" rel="noopener noreferrer"&gt;Python Brasil&lt;/a&gt; reúne grupos de usuários em todo o Brasil, interessados em difundir e divulgar a linguagem de programação. Veja a &lt;a href="https://python.org.br/comunidades-locais/" rel="noopener noreferrer"&gt;lista&lt;/a&gt; e procure a mais próxima de você! &lt;/li&gt;

&lt;li&gt;Tem comunidade Python na &lt;a href="https://pb.python.org.br/" rel="noopener noreferrer"&gt;Paraíba&lt;/a&gt;!&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Aprenda Python gratuitamente online:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@PythonparaZumbis/playlists" rel="noopener noreferrer"&gt;Python para zumbis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>iniciante</category>
      <category>linguagem</category>
    </item>
    <item>
      <title>Porquê programar?</title>
      <dc:creator>Hildeberto</dc:creator>
      <pubDate>Thu, 18 Apr 2019 11:33:52 +0000</pubDate>
      <link>https://dev.to/hilam/porque-programar-3mh9</link>
      <guid>https://dev.to/hilam/porque-programar-3mh9</guid>
      <description>&lt;p&gt;Meu desafio pessoal na área de desenvolvimento de sistemas iniciou em 1986, e consistiu, na época, aprender Clipper; para mudar um sistema "corporativo", que emitia folha de pagamento, controlava estoque, imprimia pedidos e notas fiscais, entre outras funcionalidades, com o qual eu já trabalhava como usuário.&lt;/p&gt;

&lt;p&gt;Lembro que desejava fortemente alterar coisas do programa. Sequências de menus, disposição de telas, fluxo de certas rotinas, etc. Essas mudanças facilitariam o meu trabalho e o de outros funcionários do escritório. Incentivado pelo próprio desenvolvedor daquele sistema, que me deu acesso ao código, parti para o desafio adolescente que me faria tomar um "rumo" na vida.&lt;/p&gt;

&lt;h3&gt;
  
  
  Porquê programar?
&lt;/h3&gt;

&lt;p&gt;Mitchel Resnick, diretor do grupo Lifelong Kindergarten, do MIT Media Lab, &lt;a href="https://exame.abril.com.br/carreira/por-que-aprender-programacao-e-tao-crucial-quanto-saber-ler/"&gt;afirma&lt;/a&gt; que a programação é uma das habilidades do século 21, e deveria ser tão importante quanto ler ou escrever. Segundo ele, em um mundo repleto de tecnologia, quem não aprender a programar será programado. Software está cada vez mais em tudo, e a "Internet das coisas" é um próximo passo no caminho da nossa sociedade tecnológica. A importância de aprender a codificar vai além das oportunidades de emprego. Uma das possibilidades desse aprendizado é ver o mundo de outras maneiras.&lt;/p&gt;

&lt;p&gt;Outra possibilidade importante, que gosto de ressaltar, é que quem aprende a programar aprimora sua proteção digital, seja individual ou corporativa. Utilizar programas dos quais você pode acessar o código fonte, é uma das formas de garantir melhor sua segurança. Ter certeza que aquele aplicativo que você usa, na empresa ou no seu celular, não está roubando dados sem que ninguém perceba.&lt;/p&gt;

&lt;p&gt;Codificar permite, ainda, que se possa contribuir na construção do mundo tecnológico, através da participação em projetos de código aberto, principalmente. E mesmo que não seja um projeto "open source", é possível influenciar a sociedade, a cultura e a economia, entre outras áreas, através da programação de sistemas e aplicativos. Mesmo que não seja sua preocupação "melhorar o mundo", vocẽ vai poder melhorar sua própria vida, criando automatização para tarefas chatas, demoradas e/ou repetitivas, o que vai te possibilitar mais tempo para outras coisas, quiçá mais importantes.&lt;/p&gt;

&lt;p&gt;Por último, mas não menos importante, programar pode (e deve) ser divertido!&lt;/p&gt;

&lt;h4&gt;
  
  
  Aprenda programação online
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hourofcode.com/pt"&gt;Hour of Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codecademy.com/pt"&gt;Code Academy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codeschool.com/courses#all"&gt;Code School&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.learncafe.com/cursos-online/informatica-e-internet/linguagens-de-programacao?order=date&amp;amp;filter=free"&gt;LearnCafe&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>iniciante</category>
      <category>linguagem</category>
    </item>
  </channel>
</rss>
