
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">
<channel>
  <title>Blog | Ernane.dev </title>
  <atom:link href="https://blog.ernane.dev/feed.xml" rel="self" type="application/rss+xml"/>
  <link>https://blog.ernane.dev/</link>
  <description>Aprenda e se atualize. Aqui você encontra todo e qualquer conteúdo para aprender e se manter informado.</description>
  <lastBuildDate>2022-04-23T14:54:45.621Z</lastBuildDate>
  <language>pt-BR</language>
  <sy:updatePeriod> weekly </sy:updatePeriod>
  <sy:updateFrequency> 1 </sy:updateFrequency>
  <generator>https://blog.ernane.dev/</generator>
  <image>
    <url>https://blog.ernane.dev/favicon.ico</url>
    <title>Ernane.dev</title>
    <link>https://blog.ernane.dev/</link>
    <width>32</width>
    <height>32</height>
  </image>
  <item>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://images.unsplash.com/photo-1627398242454-45a1465c2479?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1374&q=80" 
      medium="image" type="image/*" width="300" height="250" />
      <title>A diferença entre funções tradicionais e arrow functions no javascript</title>
      <link>https://blog.ernane.dev/post/a-diferenca-entre-funcoes-tradicionais-e-arrow-functions-no-javascript</link>
      <dc:creator>
        <![CDATA[ Ernane Ferreira ]]>
      </dc:creator>
      <pubDate>2022-04-23T14:54:45.621Z</pubDate>
      <category> <![CDATA[ Estudo ]]> </category>
      <category> <![CDATA[ javascript ]]> </category>
<category> <![CDATA[ code ]]> </category>
<category> <![CDATA[ functions ]]> </category>
      <guid isPermaLink="true">https://blog.ernane.dev/post/a-diferenca-entre-funcoes-tradicionais-e-arrow-functions-no-javascript</guid>
      <description>
        <![CDATA[ Não se engane, não é só a compactibilidade e sintaxe elegante que diferem as maneiras de se declarar funções no Javascript. ]]>
      </description>
      <content:encoded>
        <![CDATA[ <p>As arrow functions é um recurso relativamente novo implementando no ES6 (<a href="https://www.w3schools.com/js/js_es6.asp" title="ECMAScript 6" target="_blank">ECMAScript 6</a>) que, aos nossos olhos, se trata apenas de uma sintaxe mais concisa e elegante para declarar expressões de função no Javascript. Embora as funções tradicionais e as arrow functions funcionem de maneira semelhante, devemos tomar cuidado com certas diferenças que podem ser imperceptíveis.</p><h2 id="sintaxe">Sintaxe <i class="fas fa-link link__title-icon"></i></h2><p>É notória a diferença da sintaxe entre os dois modelos, já que nas arrow function se torna possível reduzir consideravelmente o número de linhas presentes na declaração função, principalmente se já se trata de uma função simples. Veja exemplos:</p><p>Imagine uma função que recebe o nome de um usuário e o imprime no console. Na maneira tradicional, poderíamos declará-la da seguinte maneira:</p><pre><code>function sayMyNane(name){  console.log(`My name is ${name}!`);}sayMyNane('Ernane'); <span style="color: rgb(36, 64, 97);">// =&gt; My name is Ernane.</span></code></pre><p>Já com as arrow functions presentes a partir do ES6, poderíamos fazer da seguinte maneira:</p><pre><code>const sayMyName = (name) =&gt; {  console.log(`My name is ${name}`);}sayMyNane('Ernane'); <span style="color: rgb(36, 64, 97);">// =&gt; My name is Ernane.</span><br></code></pre><p>Lembrando que para o caso das arrow functions, as chaves só são necessárias se uma expressão estiver presente, valendo a mesma regra para os parêntesis, já que são necessários apenas se houver mais de um argumento a ser passado. Dessa forma, poderíamos reduzir ainda mais e escrever o exemplo acima da seguinte maneira:</p><pre><code>const sayMyName = name =&gt; console.log(`My name is ${name}`; sayMyNane('Ernane'); <span style="color: rgb(36, 64, 97);">// =&gt; My name is Ernane.</span><br></code></pre><p>Simples, não é? ✨ dessa forma, podemos ver como uma arrow function pode facilitar a declaração de uma determinada função por causa de sua sintaxe e ainda devolver o mesmo resultado que uma declaração comum.</p><h2 id="utilizacao-da-palavra-chave-this">Utilização da palavra-chave this <i class="fas fa-link link__title-icon"></i></h2><p>Ao contrário da declaração tradicional, as arrow functions não possuem seu próprio <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this" title="this" target="_blank">this</a> elemento, pois o valor de this dentro de uma arrow function permanece o mesmo dentro de todo o ciclo de vida da função e está sempre vinculado ao valor de this na função pai tradicional mais próxima.</p><p>Isso ficou um pouco estranho? 🤔 deixe-me tentar descomplicar com um exemplo:</p><p>Retomando o exemplo utilizado no tópico anterior, imagine que possuímos um objeto <span style="background-color: rgb(36, 64, 97);">pessoa</span> que tem seu nome definido como um dos seus atributos e possui uma função que imprime no console o nome dessa determinada pessoa. A depender do tipo de função utilizada, ela não conseguirá acessar corretamente o objeto pai que possui o atributo <span style="background-color: rgb(36, 64, 97);">name</span> procurado e, dessa forma, seu retorno será <span style="background-color: rgb(36, 64, 97);">undefined</span>.</p><pre><code>let person = {  name: "Ernane Ferreira",  sayMyName: () =&gt; console.log(`My name is ${</code>this.name<code>}.`)};person.sayMyName(); <span style="color: rgb(36, 64, 97);">// =&gt; My name is .</span></code></pre><p>Já para o caso da função ser declarada no modelo tradicional, o this funcionará como o esperado e obteremos corretamente o atributo buscado. 🤗</p><pre><code>let person = {&nbsp; name: "Ernane Ferreira",&nbsp; sayMyName: function() {    console.log(`My name is ${this.name}.`);  }};person.sayMyName(); <span style="color: rgb(36, 64, 97);">// =&gt; My name is Ernane Ferreira.</span></code></pre><h2 id="acesso-aos-argumentos">Acesso aos argumentos <i class="fas fa-link link__title-icon"></i></h2><p>O objeto <a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Functions/arguments" title="arguments" target="_blank">arguments</a> é uma variável local disponível dentro de todas as funções e é ela que torna possível a referência dos argumentos de uma função dentro da mesma utilizando o objeto arguments. No entanto, as arrow functions não possuem vinculo com o objeto <span style="background-color: rgb(36, 64, 97);">arguments:</span>&nbsp;</p><pre><code>const showArguments = () =&gt; console.log(arguments);showArguments(1, 2, 3) <span style="color: rgb(36, 64, 97);">// =&gt; ReferenceError: arguments is not defined.</span></code></pre><p>No caso de uma função regular, podemos facilmente acessar uma listagem dos argumentos passados como parâmetro no momento da chamada da função:</p><pre><code>function showArguments(){   console.log(arguments); }showArguments(1, 2, 3) <span style="color: rgb(36, 64, 97);">// =&gt; Arguments(3) [1, 2, 3]</span></code></pre><h2 id="utilizando-se-do-operador-new">Utilizando-se do operador new <i class="fas fa-link link__title-icon"></i></h2><p>O operador <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new" title="new" target="_blank">new</a> permite a criação da instância de um tipo de objeto definido pelo usuário ou de um dos tipos de objetos internos que tenham uma <b>função construtora.&nbsp;</b>As funções tradicionais são construtíveis e podem ser chamadas através do operador new. Em contrapartida, as arrow functions são chamáveis e&nbsp;<b style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size);">não </b>construtíveis, ou seja, essas funções nunca podem ser utilizadas como funções construtoras e nunca poderão ser invocadas com o operador new.&nbsp;</p><p>Portanto, para esse tipo de execução em funções tradicionais, obtemos o seguinte resultado na execução:</p><pre><code>function sayMyName(){  console.log(`My name is ${name}`); }new sayMyName('Ernane'); <span style="color: rgb(36, 64, 97);">// =&gt; Ernane</span></code></pre><p>Já para as arrow functions:</p><pre><code>const sayMyName = () =&gt; console.log(`My name is ${name}`);new sayMyName('Ernane'); <span style="color: rgb(36, 64, 97);">// =&gt; Uncaught TypeError: sayMyName is not a constructor</span></code></pre><h2 id="parametros-com-nomeclatura-duplicada">Parâmetros com nomeclatura duplicada <i class="fas fa-link link__title-icon"></i></h2><p>As arrow functions não permitem o nome de parâmetros duplicados, mas as funções tradicionais permitem dependendo da aplicação ou não aplicação do modo estrito (<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode" title="Strict Mode" target="_blank">Strict Mode</a>) na implementação do código. Por exemplo, o javascript abaixo é totalmente válido:</p><pre><code>function addTwoNumbers(x, x){  console.log(x+x);}addTwoNumbers(1,1); <span style="color: rgb(36, 64, 97);">// =&gt; 2</span></code></pre><p>Entretanto, o mesmo código com o modo estrito aplicado já não é mais válido:</p><pre><code>'use strict';function addTwoNumbers(x, x){&nbsp; console.log(x+x);} <span style="color: rgb(36, 64, 97);">// =&gt; Uncaught SyntaxError: Duplicate parameter name not allowed in this context</span><br></code></pre><p>Na utilização de arrow functions, isso ocorre independentemente da aplicação do modo estrito. Em ambos os casos, a execução é inválida:</p><pre><code>const addTwoNumbers = (x, x) =&gt; console.log(x+x); <span style="color: rgb(36, 64, 97);">// =&gt; SyntaxError: Uncaught SyntaxError: Duplicate parameter name not allowed in this context.</span></code></pre><p>Dessa forma, é sempre bom termos bastante atenção quanto a utilização das arrow functions no lugar das funções tradicionais. Apesar de sua sintaxe ser muito agradável, elas possuem alguns pontos, como os citados acima, que devemos tomar cuidado para não deixar passar.&nbsp;</p><p>Em todo caso, é aconselhável um estudo mais aprofundado sobre o assunto. Como sempre, deixarei abaixo alguns links de recomendação para o aprofundamento da temática.</p><p>Espero que tenha gostado dessa postagem e que ela tenha te ajudado a encontrar o que você procurava! 💙</p><h2 id="links">Links <i class="fas fa-link link__title-icon"></i></h2><ul><li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions" title="Functions Declarations" target="_blank">Functions Declarations</a>;</li><li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions" title="Arrow functions expressions" target="_blank">Arrow functions expressions</a>;</li><li><a href="https://www.w3schools.com/js/js_arrow_function.asp" title="Javascript Arrow Functions" target="_blank">Javascript Arrow Functions</a>;</li><li><a href="https://www.w3schools.com/js/js_es6.asp" title="New Features in ES6" target="_blank">New Features in ES6</a>;</li></ul> ]]>
      </content:encoded>
    </item><item>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://i.ibb.co/0MK84Rt/computer-gf0f0db19d-1920.jpg" 
      medium="image" type="image/*" width="300" height="250" />
      <title>3 melhores ferramentas para validar metatags presentes no seu site</title>
      <link>https://blog.ernane.dev/post/3-melhores-ferramentas-para-validar-metatags-presentes-no-seu-site</link>
      <dc:creator>
        <![CDATA[ Ernane Ferreira ]]>
      </dc:creator>
      <pubDate>2022-02-20T16:23:20.652Z</pubDate>
      <category> <![CDATA[ SEO ]]> </category>
      <category> <![CDATA[ MetaTags ]]> </category>
<category> <![CDATA[ Social ]]> </category>
      <guid isPermaLink="true">https://blog.ernane.dev/post/3-melhores-ferramentas-para-validar-metatags-presentes-no-seu-site</guid>
      <description>
        <![CDATA[ É muito importante validar e verificar como seu artigo ou nova página web será exibida ao ser compartilhada. ]]>
      </description>
      <content:encoded>
        <![CDATA[ <p>  Quando uma página presente na web é compartilhada — seja no   <a href="https://www.facebook.com/" title="Facebook" target="_blank">Facebook</a>,   <a href="https://twitter.com/home" title="Twitter" target="_blank">Twitter</a>,   <a href="https://www.linkedin.com/in/ernane" title="Linkedin" target="_blank">Linkedin</a>,   <a href="https://www.instagram.com/ernane.jx/" title="Instagram" target="_blank">Instagram</a>,   <a href="https://www.whatsapp.com/" title="whatsapp" target="_blank">whatsapp</a>,   etc. — geralmente existe algum tipo de visualização prévia da mesma na aplicação a qual ela está sendo compartilhada (um título, trecho de texto, descrição do que se trata, imagem ou qualquer coisa que esteja disponível). Quando você é o autor desse conteúdo, é de extrema importância ter bastante controle sobre as informações que estão sendo exibidas, pois outras pessoas compartilham os links dos seus conteúdos.</p><p>  Aqui veremos as principais (e ao meu ver, as melhores)&nbsp;ferramentas disponíveis para validação e criação de tags meta para o seu site. Inclusive, as ferramentas que serão citadas são as que uso sempre que posto algum novo conteúdo e não tenho total certeza de como algumas plataformas irão exibi-los. 🧐</p><h2 id="hey-meta">Hey Meta <i class="fas fa-link link__title-icon"></i></h2><p>  Uma das coisas mais importantes ao adicionar as tags no cabeçalho do seu site, é focar principalmente nas mais essenciais. Para compartilhamento social, as mais importantes são <b>título </b>e <b>descrição</b>. Muitos serviços que permitem o compartilhamento de links usarão essas tags para criar cartões com o objetivo de apresentar uma prévia do seu conteúdo. Mesmo que tenham tags específicas, como Facebook e Twitter, sempre que não encontrarem suas tags, os serviços irão procurar a&nbsp;<b>descrição</b> e&nbsp;<b>título</b>&nbsp;genéricos para saber o que exibir no compartilhamento.</p><p>Uma ferramenta que faz um ótimo trabalho com essas tags é <a href="https://www.heymeta.com/" title="o Hey Meta" target="_blank">o Hey Meta</a>.&nbsp;Nela, você poderá colocar qualquer url para ser verificada e a mesma mostrará quais tags meta encontrou em sua varredura ou, se possível, tentará adivinhar qual deveria estar presente. Essa ferramenta também fornece uma maneira fácil e prática de adicionar as tags essenciais em seu site a partir de um 'template' que eles geram para você na própria plataforma com base no seu conteúdo.</p><figure><img src="https://i.ibb.co/cC65y4f/hm.png" alt="Hey Meta - Quickly Check &amp; Build Your Meta Tags" width="1000" height="1000"><figcaption>Hey Meta - Quickly Check &amp; Build Your Meta Tags</figcaption></figure><h2 id="depurador-do-facebook">Depurador do Facebook <i class="fas fa-link link__title-icon"></i></h2><p>A empresa <a href="https://developers.facebook.com/" title="link para o meta for developers" target="_blank">Meta</a>, antes conhecida como Facebook, desenvolveu o <a href="https://ogp.me/" title="protocolo Open Graph" target="_blank">protocolo Open Graph</a>&nbsp;e o Facebook se utiliza dele para exibir seus cartões de visualização em links de compartilhamento. Dessa forma, o Open Graph se tornou um padrão de compartilhamento social disponível na web e isso é afirmado em sua página inicial:</p><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">  <p>Embora existam muitas tecnologias e esquemas diferentes que possam ser combinados, não há uma única tecnologia que forneça informações suficientes para representar ricamente qualquer página da Web no gráfico social. O protocolo Open Graph baseia-se nessas tecnologias existentes e oferece aos desenvolvedores algo para implementar.</p>  <p style="text-align: right;">(traduzido de <a href="https://ogp.me/" title="O protocolo Open Graph" target="_blank">O protocolo Open Graph</a>)</p></blockquote><p>Como mencionado anteriormente, o Facebook e outras redes que usam suas próprias tags meta irão retornar às tags base caso não encontrem a sua própria ou as tags Open Graph (OG tags). Entretanto, como também citado, o OG se tornou um padrão de compartilhamento social e, dessa forma, se torna importante implementar ao menos as tags OG primárias em qualquer página que você disponibilizar na internet. As principais são: <span style="background-color: rgb(36, 64, 97);">og:type</span>, <span style="background-color: rgb(36, 64, 97);">og: title</span>, <span style="background-color: rgb(36, 64, 97);">og:description</span>, <span style="background-color: rgb(36, 64, 97);">og:image</span> e <span style="background-color: rgb(36, 64, 97);">og:url</span>.</p><p>Como o Facebook é o mais forte nesse ramo, ele também assumiu&nbsp;a responsabilidade de fornecer aos desenvolvedores uma ótima ferramenta para <a href="https://developers.facebook.com/tools/debug/" title="validar as OG tags em qualquer URL" target="_blank" style="background-color: ; font-family: var(--body-font); font-size: var(--normal-font-size);">validar as OG tags em <b>qualquer URL</b></a>. Essa aplicação oferece uma forma de validar e visualizar como as suas páginas irão aparecer quando forem compartilhadas no Facebook.</p><figure><img src="https://i.ibb.co/C1RH2pT/ffd.png" alt="Meta para Desenvolvedores - Depurador de Compartilhamento" width="1000" height="1000"><figcaption>Meta para Desenvolvedores - Depurador de Compartilhamento</figcaption></figure><h2 id="validador-de-cartao-do-twitter">Validador de cartão do Twitter <i class="fas fa-link link__title-icon"></i></h2><p>Assim como o Facbeook, o&nbsp;<a href="https://twitter.com/" title="Twitter" target="_blank">Twitter</a> também possui o seu próprio protocolo à parte. As tags para construção do cartão do Twitter sobre seu conteúdo são utilizadas apenas pela rede social, pois a maioria das outras plataformas assumem as tags OG ou as tags nativas como principal foco para a obtenção de dados da url associada.</p><p>A maior vantagem e o principal foco em se utilizar dos cartões do Twitter é ter mais controle sobre a manipulação de como o cartão irá representar a sua página na plataforma e, para isso, a rede social possui uma enorme <a href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/markup" title="lista de opções de tags twitter" target="_blank">lista de opções</a> para serem incluídas. Devido ao fato de ser algo específico da plataforma, não é um problema se ater as tags meta nativas e OG tags, pois o Twitter continuará utilizando as tags OG e/ou as nativas disponíveis. <a href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/markup" title="Overview of all Twitter Card Tags" target="_blank">Aqui</a> você pode verificar quais tags OG presentes em sua página são encontradas e retornadas pelo twitter.</p><p>De qualquer forma, as tags do Twitter são ótimas para se utilizar caso você queira mais controle sobre o que irá aparecer no momento do compartilhamento da sua página, pois a plataforma desenvolveu um <a href="https://cards-dev.twitter.com/validator" title="validador de URLs do twitter" target="_blank">validador de URLs do twitter</a> para te ajudar a verificar e validar como seu conteúdo irá aparecer para os usuários ao ser compartilhado.</p><figure><img src="https://i.ibb.co/QNWD6vc/ttc.png" alt="Validador de Catões do Twitter" width="1000" height="1000"><figcaption>Validador de Catões do Twitter</figcaption></figure><p>Essas foram as três principais ferramentas que utilizo e acho extremamente interessantes para verificar as informações presentes em minhas tags meta sempre que publico um novo conteúdo, principalmente aqui no blog! 😌 Provavelmente esse post que você está lendo agora foi validado por uma delas ou por todas. Faça um teste e compartilhe!&nbsp;</p><p>Espero que você também possa usar essas ferramentas para ter um controle maior sobre as visualizações do seu conteúdo quando forem compartilhados e que essa postagem tenha te ajudado a encontrar o que você procurava! 💙</p><h2 id="links">Links <i class="fas fa-link link__title-icon"></i></h2><ul>  <li><a href="https://cards-dev.twitter.com/validator" title="Validador dos cartões do Twitter" target="_blank">Validador dos cartões do Twitter</a>;</li>  <li><a href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/markup" title="Documentação do Twitter sobre suas tags" target="_blank">Documentação do Twitter sobre suas tags</a>;</li>  <li><a href="https://developers.facebook.com/tools/debug/" title="Validador do Facebook" target="_blank">Validador do Facebook</a>;</li>  <li><a href="https://www.heymeta.com/" title="Plataforma Hey Meta" target="_blank">Plataforma Hey Meta</a>;</li>  <li><a href="https://ogp.me/" title="O protocolo Open Graph" target="_blank">O protocolo Open Graph</a>;</li>  <li><a href="https://developers.google.com/search/docs/advanced/crawling/special-tags" title="Metatags que o Google Interpreta" target="_blank">Metatags que o Google Interpreta</a>.</li></ul> ]]>
      </content:encoded>
    </item><item>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://i.ibb.co/TBcwGRg/i-Mac-1-1.webp" 
      medium="image" type="image/*" width="300" height="250" />
      <title>Netlify e Google Domains: como configurá-los corretamente</title>
      <link>https://blog.ernane.dev/post/netlify-e-google-domains-como-configuralos-corretamente</link>
      <dc:creator>
        <![CDATA[ Ernane Ferreira ]]>
      </dc:creator>
      <pubDate>2022-02-02T02:48:14.769Z</pubDate>
      <category> <![CDATA[ Tutoriais ]]> </category>
      <category> <![CDATA[ Netlify ]]> </category>
<category> <![CDATA[ Google ]]> </category>
<category> <![CDATA[ Tutorial ]]> </category>
<category> <![CDATA[ Desenvolvimento-Web ]]> </category>
      <guid isPermaLink="true">https://blog.ernane.dev/post/netlify-e-google-domains-como-configuralos-corretamente</guid>
      <description>
        <![CDATA[ Os passos necessários para realizar as configurações de um dominio provido pelo Google Domains e seu site hospedado no Netlify. ]]>
      </description>
      <content:encoded>
        <![CDATA[ <p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Recentemente, para implementação do meu </font></font><a href="https://ernane.dev/" title="Link para o site Ernane.dev" target="_blank"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">portfólio</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">,</font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">&nbsp;adquiri o meu próprio domínio. </font><font style="vertical-align: inherit;">Sempre quis ter um próprio e optei&nbsp;</font><font style="vertical-align: inherit;">por comprar via </font></font><a href="https://domains.google/" title="Link para o Google Domains" target="_blank"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">domínios do Google</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.&nbsp;</font></font><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">O processo de compra é relativamente simples, só são necessários os dados do cartão de crédito e endereço. </font><font style="vertical-align: inherit;">Após isso, já&nbsp;</font></font></font><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">estava com o meu domínio registrado, mas as configurações não são tão simples quanto o registro.</font></font></font><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.. 🧐&nbsp;</font></font></font></p><p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Decidi hospedar o meu site no </font></font><a href="https://www.netlify.com/" title="Link para o netlify" target="_blank"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Netlify.com</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, mas</font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">&nbsp;as configurações para outra empresa não devem ser tão diferentes. </font><font style="vertical-align: inherit;">Abaixo mostrarei os passos para realizar as configurações do novo domínio adquirido com o site já hospedado.</font></font></p><p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Para ficar mais simples de compreender, as etapas foram divididas em duas: a primeira para a captura dos servidores de nomes no netlify e a outra para a aplicação deles no painel do google domains. </font><font style="vertical-align: inherit;">Boa leitura! </font><font style="vertical-align: inherit;">📒</font></font></font></font></p><h2 id="configuracao-no-netlify"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Configuração no Netlify </font></font><i class="fas fa-link link__title-icon"></i></h2><ol><li><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">&nbsp;No console do netlify, acesse seu site e vá para a sessão de&nbsp;</font></font></font></font></font></font><span style="color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); background-color: rgb(36, 64, 97);"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Configurações de domínio;</font></font></font></font></font></font></span></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">&nbsp;Em seguida, clique em </font></font></font></font><span style="background-color: rgb(36, 64, 97);"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Adicionar domínio personalizado,</font></font></font></font></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">&nbsp;um provável botão verde 😝;</font></font></font></font></li><li><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Após isso, provavelmente o seu domínio terá um banner inicializando com a opção 2 sendo <span style="background-color: rgb(36, 64, 97);">Configurar seu domínio personalizado.</span></font></font></font></font></font></font><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">&nbsp;Quando aparecer, clique nele;</font></font></font></font></font></font></li><li><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Agora você será solicitado a fornecer o domínio que comprou (n</font></font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">o meu caso, foi </font></font></font></font><a href="https://ernane.dev/" title="Linkando para o site Ernane.dev" target="_blank" style="background-color: ; font-family: var(--body-font); font-size: var(--normal-font-size);"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ernane.dev</font></font></font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">).</font></font><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">&nbsp;</font></font></font></font><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Se você for o proprietário do domínio, o site solicitará que você valide que realmente é o dono, mas basta clicar&nbsp;</font></font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">em verificar. </font></font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Um bom ponto a se levar em conta é que o próprio Netlify pode fornecer um domínio à você;</font></font></font></font></li><li><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Depois de todos esses passos, você será redirecionado para as configurações do seu domínio e </font></font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">verá um aviso solicitando que você configure seu DNS:&nbsp; </font></font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Clique em </font></font></font></font><span style="color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); background-color: rgb(36, 64, 97);"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Opções</font></font></font></font></span><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">  &nbsp;➡&nbsp;  </font></font></font></font><span style="color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); background-color: rgb(36, 64, 97);"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Configurar DNS Netlify;</font></font></font></font></span></li><li><font><font><span style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Adicione o domínio no campo solicitado - Provavelmente o Netlify solicitará que você verifique novamente seu domínio;</font></font></span></font></font></li><li><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Adicione os registros DNS - Os registros DNS para seus sites Netlify serão configurados automaticamente. </font></font></font><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Você poderá pular essa parte, a menos que tenha um e-mail configurado com seu domínio;</font></font></font></li><li><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ative o DNS Netlify - O Nelify lhe dará nomes de seus provedores de nome. </font></font></font></font></font></font></font><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Mantenha-os abertos ou salve-os e dirija-se ao seu provedor de nome de domínio.</font></font></font></font></font></font></font></li></ol><p><span style="color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size);"><p style="text-align: center;"><font style="color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); background-color: ; vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Prontinho! Com o Netlify</font></font></font><font style="color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); background-color: ; vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">&nbsp;já está tudo okay. 😄</font></font></font></p></span></p><h2 id="dominios-do-google"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Domínios do Google</font></font><i class="fas fa-link link__title-icon"></i></h2><p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Aqui será um pouco mais simples! 😁</font></font></p><ol><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">No painel de configurações do seu domínio no Google Domains, vá para a seção Domain Name System -&nbsp;</font></font></font></font><span style="background-color: rgb(36, 64, 97);"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">DNS.</font></font></font></font></span></li><li><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Na seção&nbsp; </font></font></font></font><span style="color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); background-color: rgb(36, 64, 97);"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">NameServers</font></font></font></font></span><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, selecione a opção </font></font></font></font><span style="color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); background-color: rgb(36, 64, 97);"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Usar nameservers personalizados</font></font></font></font></span><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font></font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Para dominios do google, antes de adicionar os meus próprios, tornou-se necessário desabilitar o </font></font></font></font><a href="https://cloud.google.com/dns/docs/dnssec" title="Redirecionar para a documentação do google sobre DNSSEC" target="_blank" style="background-color: ; font-family: var(--body-font); font-size: var(--normal-font-size);"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">DNSSEC</font></font></font></font></a><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> (Domain Name System Security Extensions), um recurso do (DNS) que autentica respostas à pesquisas de nome de domínio;</font></font></font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Em seguida, adicione os servidores de nomes que foram fornecidos pelo Netlify nos passos anteriores aos campos disponíveis.</font></font></li></ol><p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">E fim! </font><font style="vertical-align: inherit;">seguindo todos os passos, seu domínio já estará configurado. </font><font style="vertical-align: inherit;">Você verá que os domínios do google poderão recomendar uma espera de aproximadamente 48 horas para que as alterações sejam realizadas</font><font style="vertical-align: inherit;">, mas comigo foi relativamente rápido. Após cerca de 15 a 30 minutos... Tcharann! </font><font style="vertical-align: inherit;">🎉 l</font><font style="vertical-align: inherit;">á estava o meu novo site com o domínio configurado corretamente.</font></font></p><p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Espero que tenha gostado dessa postagem e te ajudado, de alguma forma, a encontrar o que você procurava! </font><font style="vertical-align: inherit;">💙</font></font></p><h2 id="links:"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Links: </font></font><i class="fas fa-link link__title-icon"></i></h2><ul><li><a href="https://docs.netlify.com/domains-https/custom-domains/" title="Documentação do Netlify sobre domínios personalizados" target="_blank"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Documentação do Netlify sobre domínios personalizados (en)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ;&nbsp;</font></font></li><li><a href="https://cloud.google.com/domains/docs/register-domain" title="Documentação do Google Domains sobre registro de novos domínios" target="_blank"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Documentação do Google Domains sobre registro de novos domínios</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ;</font></font></li><li><a href="https://cloud.google.com/dns/docs/dnssec" title="Documentação do google" target="_blank"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Visão geral das segurança de segurança de DNS (DNSSE)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></li></ul> ]]>
      </content:encoded>
    </item><item>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://images.unsplash.com/photo-1629654297299-c8506221ca97?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1074&q=80" 
      medium="image" type="image/*" width="300" height="250" />
      <title>Configurando terminal Linux para mostrar branch atual em diretórios versionados</title>
      <link>https://blog.ernane.dev/post/configurando-terminal-linux-para-mostrar-branch-atual-em-diretorios-versionados</link>
      <dc:creator>
        <![CDATA[ Ernane Ferreira ]]>
      </dc:creator>
      <pubDate>2022-04-23T19:33:29.451Z</pubDate>
      <category> <![CDATA[ Tutoriais ]]> </category>
      <category> <![CDATA[ bash ]]> </category>
<category> <![CDATA[ terminal ]]> </category>
<category> <![CDATA[ ubuntu ]]> </category>
<category> <![CDATA[ dev ]]> </category>
<category> <![CDATA[ git ]]> </category>
      <guid isPermaLink="true">https://blog.ernane.dev/post/configurando-terminal-linux-para-mostrar-branch-atual-em-diretorios-versionados</guid>
      <description>
        <![CDATA[ Facilite sua vida como desenvolvedor e saiba qual a branch atual em seu espaço de trabalho sem complicações. E o melhor? Sem instalar nada adicional! ]]>
      </description>
      <content:encoded>
        <![CDATA[ <p>Uma das dádivas de um bom desenvolvedor é saber exatamente onde está inserindo suas alterações. Atualmente, a melhor forma de se fazer isso, principalmente utilizando versionamento de código com o Git, é validar a branch do diretório de trabalho atual. Para isso, temos alguns caminhos:&nbsp;</p><ul><li>Utilizar o comando do próprio git para mostrar a branch atual:</li></ul><pre><code><span style="color: rgb(79, 97, 40);">$</span> git status<span style="color: rgb(36, 64, 97);">On branch masterYour branch is up to date with 'origin/master'.</span><span style="color: rgb(36, 64, 97);">nothing to commit, working tree clean</span></code></pre><p>Ou ainda:</p><pre><code><span style="color: rgb(79, 97, 40);">$</span> git branch<span style="color: rgb(155, 187, 89);">* master</span></code></pre><ul><li>Podemos instalar algum outro terminal de terceiro (como, por exemplo, o <a href="https://ohmyz.sh/" title="Link da página home do om my zsh" target="_blank">Oh My ZSH</a>), mas isso é conversa para uma outra publicação! 😎</li><li>Outra opção é simplesmente manipular o seu terminal nativo para mostrar seu branch atual sempre que tiver um diretório versionado pelo git. Essa alternativa é o que veremos nesse post!</li></ul><h2 id="alterando-as-configuracoes-para-exibir-a-branch-atual">Alterando as configurações para exibir a branch atual <i class="fas fa-link link__title-icon"></i></h2><p>Normalmente, as configurações do terminal não mostram a branch do diretório atual se estiver versionado pelo git e, por padrão, são mostradas apenas o <span style="background-color: rgb(36, 64, 97);">usuário</span>, <span style="background-color: rgb(36, 64, 97);">host</span>&nbsp;(nome da máquina) e o <span style="background-color: rgb(36, 64, 97);">path</span>&nbsp;(caminho atual). Porém, ele possui algumas configurações que podem ser manipuladas a partir de uma variável em seu arquivo denominado&nbsp;<span style="background-color: rgb(36, 64, 97);">PS1</span>. Para isso, basta abrir o arquivo <span style="background-color: rgb(36, 64, 97);">.bashrc</span>ou <span style="background-color: rgb(36, 64, 97);">.bash_profile&nbsp;</span>em seu editor de texto preferido e adicionar o seguinte comando ao final:</p><pre><code>export PS1='\u@\h\[\033[01;34m\] \w\[\033[0;32m\]$(__git_ps1 " (%s)")\[\033[01;34m\]$\[\033[00m\] '</code></pre><p>Para aplicar as configurações, é necessário recarregar o arquivo. Podemos fazer isso reiniciando o sistema, realizando Log Out ou simplesmente recarregando o arquivo de configurações:</p><pre><code>source ~/.bashrc # ou source ~/.bash_profile</code></pre><p>Pronto! 🎉 Já temos a nossa branch atual sendo mostrada em diretórios que estejam versionados pelo git.&nbsp;</p><h2 id="configuracoes-adicionais">Configurações adicionais <i class="fas fa-link link__title-icon"></i></h2><p>Mas por que não ir além? Deixarei abaixo algumas possíveis configurações adicionais de cores, por exemplo, que podem ser realizadas para deixar as informações presentes mais pertinentes possíveis para o seu caso de uso.</p><h3 id="valores:">Valores: <i class="fas fa-link link__title-icon"></i></h3><ul><li><span style="background-color: rgb(36, 64, 97);">\u</span>: Usuário atualmente logado na máquina;</li><li><span style="background-color: rgb(36, 64, 97);">\h</span>: Nome da máquina (host), previamente cadastrado;</li><li><span style="background-color: rgb(36, 64, 97);">\H</span>: Nome da máquina completo, previamente cadastrado;</li><li><span style="background-color: rgb(36, 64, 97);">\w</span>: Diretório de trabalho atual completo;</li><li><span style="background-color: rgb(36, 64, 97);">\W</span>: Diretório de trabalho atual minificado, apenas o nome base (último segmento);</li><li><span style="background-color: rgb(36, 64, 97);">$(__git_ps1 "%s")</span>: Branch atual caso esteja em um repositório versionado pelo git, caso contrário senão exibirá nada.</li></ul><h3 id="cores:">Cores: <i class="fas fa-link link__title-icon"></i></h3><ul><li>Azul: \[\033[0;34m\];</li><li>Vermelho: \[\033[0;31m\];</li><li>Vermelho Fluorescente: \[\033[1;31m\];</li><li>Verde: \[\033[0;32m\];</li><li>Verde Fluorescente: \[\033[1;32m\];</li><li>Branco Forte: \[\033[1;37m\];</li><li>Cinza: \[\033[0;37m\];</li><li>Padrão: \[\033[0m\].</li></ul><p>Prontinho! Essa é a gama de configurações simples e poderosas disponíveis para utilização que poderão facilitar ainda mais a sua auto-localização no processo de desenvolvimento e, de quebra, permitir uma personalização da forma que quiser e achar válida. O meu está assim no momento em que escrevo esse post:</p><pre>👾 ~/path/path<span style="color: rgb(118, 146, 60);">(master)</span>$<code></code></pre><p>Sim, com emoji! 😬</p><p>O que foi mostrado aqui é apenas um pouco do que é possível ser feito. Por isso, como de costume, deixarei alguns links que utilizei como referência para escrever e que você poderá utilizar para ir além no assunto.</p><p>&nbsp;Boa leitura!</p><p>Espero que tenha gostado dessa postagem e que ela tenha te ajudado a encontrar o que você procurava! 💙</p><h2 id="links:">Links: <i class="fas fa-link link__title-icon"></i></h2><p><a href="https://zsh.sourceforge.io/Doc/Release/Prompt-Expansion.html#Visual-effects" title="Prompt-Expansion - Visual-effects" target="_blank"></a></p><ul><a href="https://zsh.sourceforge.io/Doc/Release/Prompt-Expansion.html#Visual-effects" title="Prompt-Expansion - Visual-effects" target="_blank"></a><li><a href="https://zsh.sourceforge.io/Doc/Release/Prompt-Expansion.html#Visual-effects" title="Prompt-Expansion - Visual-effects" target="_blank"></a><a href="https://zsh.sourceforge.io/Doc/Release/Prompt-Expansion.html#Visual-effects" title="Prompt-Expansion - Visual-effects" target="_blank">Prompt-Expansion - Visual-effects</a>;</li><li><a href="https://www.maketecheasier.com/8-useful-and-interesting-bash-prompts/" title="8 useful and interesting bash prompts" target="_blank" style="background-color: ; font-family: var(--body-font); font-size: var(--normal-font-size);">8 useful and interesting bash prompts;</a></li><li><a href="https://www.vivaolinux.com.br/topico/Shell-Script/Customizando-Prompt-de-Comando-Bash-e-Zsh" title="Customizando Prompt de Comando Bash e Zsh" target="_blank" style="background-color: ; font-family: var(--body-font); font-size: var(--normal-font-size);">Customizando Prompt de Comando Bash e Zsh</a>;</li><li><a href="https://slashdot.org/story/01/07/06/122259/what-does-your-command-prompt-look-like" title="what does your command prompt look like" target="_blank" style="background-color: ; font-family: var(--body-font); font-size: var(--normal-font-size);">What does your command prompt look like</a>.</li></ul> ]]>
      </content:encoded>
    </item><item>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://i.ibb.co/6HR5ds0/git-1.png" 
      medium="image" type="image/*" width="300" height="250" />
      <title>Guia rápido e prático dos principais comandos git</title>
      <link>https://blog.ernane.dev/post/guia-rapido-e-pratico-dos-principais-comandos-git</link>
      <dc:creator>
        <![CDATA[ Ernane Ferreira ]]>
      </dc:creator>
      <pubDate>2022-02-09T03:17:52.568Z</pubDate>
      <category> <![CDATA[ Tutoriais ]]> </category>
      <category> <![CDATA[ Git ]]> </category>
<category> <![CDATA[ versionamento-de-código ]]> </category>
      <guid isPermaLink="true">https://blog.ernane.dev/post/guia-rapido-e-pratico-dos-principais-comandos-git</guid>
      <description>
        <![CDATA[ Desenvolva de uma vez por todas a capacidade de versionar e tratar corretamente seus arquivos com o git, o sistema de controle de versão mais utilizado. ]]>
      </description>
      <content:encoded>
        <![CDATA[ <p id=""><a href="https://pt.wikipedia.org/wiki/Git" title="Sobre o Git" target="_blank">Git</a> é um sistema de controle de versão gratuito e de código aberto, originalmente criado por <a href="https://en.wikipedia.org/wiki/Linus_Torvalds" title="Biografia do Linus Torvalds na WikiPedia" target="_blank">Linus Torvalds</a>&nbsp;no ano de 2005. Ao contrário de sistemas de controle de versão centralizados mais antigos, como o SVN&nbsp;e CVS, o Git é distribuído, pois todo desenvolvedor tem o histórico completo de seu repositório de código localmente.</p><p id="">O Git também oferece excelente suporte para ramificação, mesclagem e reescrita do histórico do repositório, o que levou a muitos fluxos de trabalho e ferramentas inovadoras e poderosas. As solicitações pull é uma ferramenta popular que permite que as equipes colaborem em ramificações do Git e revisem com eficiência o código uns dos outros. Atualmente, o Git é o sistema de controle de versão mais utilizado no mundo e é considerado o padrão moderno para desenvolvimento de software.</p><h2 id="certo!-mas,-por-onde-eu-comeco?-🤔">Certo! mas por onde eu começo? 🤔 <i class="fas fa-link link__title-icon"></i></h2><p>É simples: instale o Git na sua máquina! fácil, não é? atualmente o Git está disponível para as mais diversas plataformas e você pode encontrar como realizar esse download/instalação no seu próprio site.</p><p>🔗&nbsp;<a href="http://git-scm.com/" title="Site do Git" target="_blank">Git para todas as plataformas</a>&nbsp;</p><h2 id="configure-o-git-em-sua-maquina">Configure o Git em sua máquina <i class="fas fa-link link__title-icon"></i></h2><p>Configure informações de usuário para todos os repositórios. 👨‍💻</p><ul><li>Primeiramente, podemos configurar o nome que você quer ligado as suas transações de commit:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git config --global user.name "seu nome"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>De maneira análoga, o email:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git config --global user.email "endereco-de-email"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><p>Com isso, você já está apto a usar o git e ter suas informações vinculadas a seus commits.</p><h2 id="criando-repositorios">Criando Repositórios <i class="fas fa-link link__title-icon"></i></h2><p>Inicie um novo repositório ou obtenha algum já existente.</p><ul><li>Inicia um novo repositório <span style="background-color: rgb(23, 54, 93);">local</span> com um nome específico:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git init "nome-do-projeto"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Realiza o download de um projeto existente, bem como todo o seu histórico de versão:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git clone "url"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><h2 id="realizando-e-revisando-alteracoes">Realizando e revisando alterações <i class="fas fa-link link__title-icon"></i></h2><p>Revise edições, verifique o status de arquivos e crie transação de commit 🧐</p><ul><li>Lista todos os arquivos novos, modificados e/ou deletados para serem commitados:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git status</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Mostra diferenças nos arquivos que ainda não foram adicionadas:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git diff</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>&nbsp;Adiciona o seu estado atual para ser commitado e realiza um&nbsp;<span style="background-color: rgb(36, 64, 97);">snapshot 📸</span>&nbsp;do arquivo:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git add "arquivo"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Mostra a diferença entre arquivos selecionados e a suas últimas versões já 'commitadas':</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git diff --staged</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Desmarca o arquivo, mas preserva seu conteúdo atual:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git reset "arquivo"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Salva o último snapshot realizado no arquivo permanentemente no histórico de versão:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git commit -m "mensagem descritiva do commit"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><h2 id="mudancas-agrupadas">Mudanças agrupadas <i class="fas fa-link link__title-icon"></i></h2><p>Nomeie uma série de commits e, em seguida, combine as alterações adequadamente em uma ramificação</p><ul><li>Lista todas as ramificações (branches) locais no repositório atual:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git branch</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Cria uma nova ramificação:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git branch "nome-da-ramificação"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Muda para uma ramificação específica e atualiza o diretório de trabalho atual:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git checkout "nome-da-ramificação"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Combina o histórico de uma ramificação específica com a ramificação atual:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git merge "nome-de-uma-ramificação"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Exclui uma ramificação específica:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git branch -d "nome-da-ramificação"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><h2 id="alteracoes-de-nomeclatura">Alterações de nomeclatura <i class="fas fa-link link__title-icon"></i></h2><p>Mude e remova os arquivos versionados</p><ul><li>Remove o arquivo do diretório atual de trabalho e seleciona o mesmo para ser removido:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git rm "arquivo"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Remove o arquivo do controle de versão, mas preserva seu estado localmente:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git rm --cached "arquivo"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Muda o nome do arquivo e o seleciona para o commit:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git mv "arquivo-com-nome-atual" "arquivo-com-nome-renomeado"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><h2 id="evite-o-rastreamento-nao-desejados">Evite o rastreamento não desejados <i class="fas fa-link link__title-icon"></i></h2><p>Crie exceções para arquivos que você deseja que não sejam rastreados e adicionados ao histórico de versão do seu projeto. Para isso, se torna necessária a criação de um arquivo de texto comum na raiz do projeto de nome específico: <span style="background-color: rgb(36, 64, 97);">.gitignore</span>&nbsp;🕵️</p><p>Este arquivo serve para suprimir o versionamento acidental de arquivos e diretórios correspondentes aos padrões especificados, como por exemplo:</p><pre style="position: relative;"><code>build/.env</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><p>Essas especificações não permitem que arquivos presentes no diretório <span style="background-color: rgb(36, 64, 97);">build</span>, ou arquivos que possuem extenção <span style="background-color: rgb(36, 64, 97);">.env</span> presente em <b>todo o projeto</b>, sejam rastreados ou adicionados acidentalmente para o histórico de versão.</p><p>Para listar os arquivos ignorados no projeto a partir dos padrões presentes no gitignore, use o comando abaixo:</p><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git ls-files --other --ignored --exclude-standard</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><h2 id="salve-fragmentos-de-codigo">Salve fragmentos de código <i class="fas fa-link link__title-icon"></i></h2><p>Arquive, restaure e/ou exclua estágios e alterações incompletas presentes no projeto.</p><ul><li>Armazena temporariamente as modificações de todos os arquivos já rastreados:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git stash</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Aplica as alterações presentes no último stash:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git stash apply</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Restaura os arquivos recentes em stash:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git stash pop</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Lista todos os conjuntos de alterações presentes em stash:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git stash list</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Descarta os conjuntos de alterações mais recentes em stash:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git stash drop</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><h2 id="revise-seu-historico-de-versao">Revise seu histórico de versão <i class="fas fa-link link__title-icon"></i></h2><p>Navegue, valide e inspecione a evolução dos arquivos presentes no projeto.</p><ul><li>Lista todo o histórico de versões para o branch atual:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git log</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Lista o histórico de versões para um arquivo, incluindo mudanças em seu nome:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git log --follow "arquivo"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Mostra a diferença de conteúdo entre duas ramificações:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git diff "primeira-ramificação"..."segunda-ramificação"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Retorna mudanças de metadata e conteúdo para o commit especificado:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git show "commit"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><h2 id="reabra-seus-commits">Reabra seus commits <i class="fas fa-link link__title-icon"></i></h2><p>Desfaça enganos cometidos e crie um histórico substituto&nbsp;</p><ul><li>Volta o histórico de versão ao estado do commit passado, mas mantendo as alterações no espaço de trabalho:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git reset "commit"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><ul><li>Retorna ao estado do commit passado, mas desfazendo todas as alterações e commits realizados após ele:</li></ul><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git reset --hard "commit"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><h2 id="sincronize-e-salve-as-suas-alteracoes">Sincronize e salve as suas alterações <i class="fas fa-link link__title-icon"></i></h2><p>Baixa todo o histórico de um marcador de repositório:</p><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git fetch "marcador"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><p>Combina o marcador da ramificação passada na ramificação local:</p><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git merge "marcador"/"branch"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><p>Envia todos os commits da ramificação local para a sua versão remota:</p><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git push "alias" "branch"</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><p>Baixa o histórico presente no repositório remoto e incorpora as mudanças no repositório local:</p><pre style="position: relative;"><code><span style="color: rgb(79, 97, 40);">$</span> git pull</code><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div><div class="open_grepper_editor" title="Edit &amp; Save To Grepper"></div></pre><p>Ufaa! 😅</p><p>Sem dúvidas você está com mais do que o necessário para versionar o seu código de maneira correta e segura. O bom de se utilizar do git é que, como foi citado anteriormente, ele é globalmente utilizado, o que possibilita aplicarmos esse conhecimento adquirido em qualquer plataforma que disfrute de seus serviços, como o Github, GitLab, etc.</p><p>Pode ter certeza que existem muitos outros comandos presentes no git que poderão te ajudar no dia a dia, mas essa listagem de comandos acima consegue te dar um ferramental muito forte para começar. Contudo, como de costume, deixo abaixo algumas referências que você poderá utilizar para desbravar esse mundo do versionamento de código.</p><p>Espero que tenha gostado dessa postagem e que ela tenha te ajudado de alguma forma a encontrar o que você procurava! 💙</p><h2 id="links">Links <i class="fas fa-link link__title-icon"></i></h2><ul><li><a href="https://git-scm.com/docs/" title="Documentação do git em seu site oficial" target="_blank">Documentação do Git em seu site oficial</a>;</li><li><a href="https://training.github.com/downloads/pt_BR/github-git-cheat-sheet.pdf" title="Folha de dica de Git" target="_blank">Folha de dicas de Git proporcionado pelo GitHub</a>.</li></ul> ]]>
      </content:encoded>
    </item><item>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://images.unsplash.com/photo-1536859355448-76f92ebdc33d?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1469&q=80" 
      medium="image" type="image/*" width="300" height="250" />
      <title>Configurando diferentes provedores git com autenticação por SSH</title>
      <link>https://blog.ernane.dev/post/configurando-diferentes-provedores-git-com-autenticacao-por-ssh</link>
      <dc:creator>
        <![CDATA[ Ernane Ferreira ]]>
      </dc:creator>
      <pubDate>2022-04-23T03:41:59.447Z</pubDate>
      <category> <![CDATA[ Tutoriais ]]> </category>
      <category> <![CDATA[ bash ]]> </category>
<category> <![CDATA[ terminal ]]> </category>
<category> <![CDATA[ git ]]> </category>
<category> <![CDATA[ dev ]]> </category>
<category> <![CDATA[ shh ]]> </category>
      <guid isPermaLink="true">https://blog.ernane.dev/post/configurando-diferentes-provedores-git-com-autenticacao-por-ssh</guid>
      <description>
        <![CDATA[ Saiba como configurar corretamente mais de um provedor com diferentes chaves SSH em sua máquina. ]]>
      </description>
      <content:encoded>
        <![CDATA[ <p>Recentemente me encontrei em um dilema onde teria que desenvolver para um projeto que estava com seu repositório remoto armazenado no <a href="https://gitlab.com/" title="Link para o GitLab" target="_blank">GitLab</a>, mas&nbsp;minha máquina está configurada para acessar, via SSH, meus repositórios no <a href="https://www.github.com" title="Link para o Github" target="_blank">GitHub</a>, site que uso como provedor principal atualmente.</p><p>Dessa forma, teria duas opções: continuar como configuração principal o GitHub e me autenticar com usuário e senha a todo momento quando enviar alterações para o projeto no GitLab ou, a melhor forma, configurar minha máquina para que identificasse qual projeto e qual provedor eu queira enviar a alteração. Com isso, poderá surgir a dúvida: como fazer isso? Bom, é isso que veremos agora! 😎</p><h2 id="gere-as-chaves-ssh-para-cada-provedor">Gere as chaves SSH para cada provedor <i class="fas fa-link link__title-icon"></i></h2><p>Primeiramente, precisamos gerar as nossas SSH Keys. Se você estiver se perguntando "mas o que é isso?", aí vai a explicação: uma chave SSH é uma credencial de acesso que segue protocolo SSH que tem função semelhante à de nomes de usuário e senhas, mas as chaves são usadas principalmente para processos automatizados e para implementar o login único por administradores de sistema e usuários avançados, como nós! 😌</p><p>Para realizar essa configuração independente, precisamos de uma para cada provedor que queremos configurar. No meu caso, é o GitHub e o GitLab:<span style="color: rgb(79, 97, 40);"><br><br></span></p><pre><code><span style="color: rgb(79, 97, 40);">$</span> ssh-keygen -t rsa -C " user@email.com " -b 4096 -f ~/.ssh/id_rsa_github</code></pre><pre><code><span style="color: rgb(79, 97, 40);">$</span> ssh-keygen -t rsa -C " user@email.com " -b 4096 -f ~/.ssh/id_rsa_gitlab</code></pre><p>Isso irá gerar chaves utilizando com base o(s) seu(s) e-mail(s) e as armazenará no diretório&nbsp;<span style="background-color: rgb(36, 64, 97);">.ssh.</span>&nbsp;</p><h2 id="adicionando-as-chaves-nos-respectivos-provedores">Adicionando as chaves nos respectivos provedores <i class="fas fa-link link__title-icon"></i></h2><p>Já com as chaves em mãos, precisamos copiá-las e adicioná-las nas configurações de SSH de cada provedor. Para visualizar as chaves, você poderá abrir os arquivos gerados anteriormente em seu editor de texto preferido (inclusive, tenho uma publicação sobre um editor ótimo bem <a href="https://blog.ernane.dev/post/como-alavancar-sua-produtividade-com-o-visual-studio-code/" title="Postagem no blog.ernane.dev no visual studio code" target="_blank">aqui</a>) ou&nbsp;se quiser apenas vê-las no próprio terminal, execute os seguintes comandos abaixo:</p><pre><code><span style="color: rgb(36, 64, 97);"># Visualizar a chave pública do GitHub&nbsp;</span><span style="color: rgb(79, 97, 40);">$</span> cat &lt;  ~/.ssh/id_rsa_github.pub</code></pre><p>Copie o conteúdo e adicione-o no painel de configurações de chaves SSH da conta no GitHub.</p><pre><code><span style="color: rgb(36, 64, 97);"># Visualizar a chave pública do GitLab</span><span style="color: rgb(79, 97, 40);">$</span> cat &lt;  ~/.ssh/id_rsa_gitlab.pub</code></pre><p>Copie o conteúdo e adicione-o no painel de configurações de chaves SSH da conta no GitLab.&nbsp;</p><p>O processo será o mesmo independente do provedor, a única coisa que provavelmente poderá mudar será as configurações de chaves SSH no painel. Após adicionar em cada provedor, precisamos adicionar também no <span style="background-color: rgb(36, 64, 97);">SSH-agent,</span>&nbsp;que é um gerenciador de chaves SSH responsável por armazená-las em uma memória de processo e deixá-las disponíveis para quando precisarmos efetuar login para nos autenticar. Para adicioná-las, podemos executar os seguintes comandos:</p><pre><code><span style="color: rgb(36, 64, 97);"># Para o GitHub</span><span style="color: rgb(79, 97, 40);">$</span> ssh-add ~/.ssh/id_rsa_github<span style="color: rgb(36, 64, 97);"># Para o GitLab</span><span style="color: rgb(79, 97, 40);">$</span> ssh-add ~/.ssh/id_rsa_gitlab</code></pre><h2 id="configurar-usabilidade-das-chaves">Configurar usabilidade das chaves <i class="fas fa-link link__title-icon"></i></h2><p>Agora que temos as chaves geradas e vinculadas ao nosso gerenciador e aos respectivos provedores remotamente, precisamos apenas informar a nossa máquina qual e quando utilizar corretamente. Primeiramente, crie um arquivo de configuração no diretório principal das chaves:</p><pre><code><span style="color: rgb(79, 97, 40);">$</span> touch ~/.ssh/config</code></pre><p>Depois adicione as configurações respectivas aos provedores que você deseja utilizar para que ele identifique qual chave deverá utilizar para se autenticar a partir do host da solicitação:</p><pre><code><span style="color: rgb(36, 64, 97);"># Conta do GitHub</span>Host github.com&nbsp; HostName github.com&nbsp; PreferredAuthentications publickey&nbsp; IdentityFile ~/.ssh/id_rsa_github<span style="color: rgb(36, 64, 97);"># Conta do GitLab</span>Host gitlab.com&nbsp; HostName gitlab.com&nbsp; PreferredAuthentications publickey&nbsp; IdentityFile ~/.ssh/id_rsa_gitlab</code></pre><p>Pronto! 🎉 Se estiver tudo correto, você já poderá utilizar e se conectar com diferentes chaves ssh em provedores diferentes de forma eficiente, sem precisar se autenticar com usuário/e-mail e senha toda vez que precisar realizar alguma alteração em seu servidor/provedor de repositório remoto.</p><h2 id="testando-configuracoes-de-conexao">Testando configurações de conexão <i class="fas fa-link link__title-icon"></i></h2><p>Para testar as conexões, você poderá utilizar os seguintes comandos:</p><pre><code><span style="color: rgb(36, 64, 97);"># Teste de conexão com o GitHub</span><span style="color: rgb(79, 97, 40);">$</span> ssh -T git@github.com</code><p><font color="#244061">yes<br></font><font color="#244061"># Hi UserName! You've successfully authenticated, <br></font><font color="#244061"># but GitHub does not provide shell access.</font></p></pre><p>Agora para o GitLab:</p><pre><code><span style="color: rgb(36, 64, 97);"># Teste de conexão com o GitLab</span><span style="color: rgb(79, 97, 40);">$</span> ssh -T git@gitlab.com<span style=""></span></code><p><code><span style=""><font color="#244061">yes<br></font></span></code><code><span style=""><font color="#244061"># Welcome to GitLab, @UserName!</font></span></code></p></pre><p>Pronto! Tudo testado e configurado. 🚀</p><p>Espero que essa postagem tenha te ajudado a encontrar o que você procurava! 💙<br></p> ]]>
      </content:encoded>
    </item><item>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://i.ibb.co/PTcnbv2/npm.jpg" 
      medium="image" type="image/*" width="300" height="250" />
      <title>Desenvolvendo componente svelte e publicando como um pacote no npm</title>
      <link>https://blog.ernane.dev/post/desenvolvendo-componente-svelte-e-publicando-como-um-pacote-no-npm</link>
      <dc:creator>
        <![CDATA[ Ernane Ferreira ]]>
      </dc:creator>
      <pubDate>2022-04-27T13:37:43.972Z</pubDate>
      <category> <![CDATA[ Tutoriais ]]> </category>
      <category> <![CDATA[ npm ]]> </category>
<category> <![CDATA[ svelte ]]> </category>
<category> <![CDATA[ package ]]> </category>
<category> <![CDATA[ component ]]> </category>
      <guid isPermaLink="true">https://blog.ernane.dev/post/desenvolvendo-componente-svelte-e-publicando-como-um-pacote-no-npm</guid>
      <description>
        <![CDATA[ Publique seu componente svelte favorito como um pacote no npm e disponibilize-o para que seja utilizado a qualquer momento. ]]>
      </description>
      <content:encoded>
        <![CDATA[ <p>Quando gostamos de um determinado componente que desenvolvemos, acabamos utilizando e reutilizando ele inúmeras vezes, isso de diversas formas diferentes, seja; replicando seus arquivos e lógica em diversos locais diferentes no projeto, ou em diversos outros projetos, ou simplesmente reimplementando o mesmo componente várias e várias vezes. Isso irá funcionar, é claro. Entretanto, não é a melhor maneira de se atuar nessa situação.</p><p>Imagine que você terá que realizar uma manutenção, ou simples alteração, digamos, de cor nesse componente. Imagine que são 10, 100, 200.. Bom, terá que realizar essa mudança em cada componente presente em seu projeto, correto? E se ele já estiver aplicado em outros projetos? bom, a alteração deverá ser realizada também. A problemática acho que já deu para entender-mos. Mas, como resolve-la?</p><p>Quando se trata de um projeto que se utiliza da mesma tecnologia, no caso que veremos nesse post o <a href="https://svelte.dev/" title="Svelte.dev" target="_blank">Svelte</a> por exemplo, você pode criar um componente e publicá-lo como um pacote no NPM e reutilizá-lo sempre que precisar. Isso é o que veremos aqui! já para os casos onde os projetos não compartilham da mesma tecnologia, esse já é um assunto para um outro momento. Mas, se você gosta de spoilers poderá ler sobre WebComponents.</p><h2 id="o-que-iremos-desenvolver?">O que iremos desenvolver? <i class="fas fa-link link__title-icon"></i></h2><p>Recentemente fiz um simples componente svelte - daí a ideia do post - para realizar avaliações. É simplesmente um aninhado de estrelas e nele o usuário poderá mostrar sua satisfação com tal conteúdo que o componente devolverá em sua prop de configuração a informação selecionada. Será ele que iremos desenvolver!</p><p>Para isso, é necessário que você possua uma conta no NPM, tenha o NodeJs e NPM instalados em sua máquina e paciência para se aventurar!</p><h2 id="inicializando-o-projeto">Inicializando o projeto <i class="fas fa-link link__title-icon"></i></h2><p>A primeira etapa, como qualquer projeto, é criarmos um diretório para ele. vamos lá!</p><pre><code>$ mkdir svelte-star-rating$ svelte-star-rating</code></pre><p><code>Agora, podemos inicializarmos de fato o nosso projeto.</code></p><pre><code>$ npm init -y</code></pre><p><code>Esse comando irá criar um arquivo <span style="background-color: rgb(36, 64, 97);">package.json</span> e preencherá algumas informações automaticamente sobre o pacote que estamos desenvolvendo como nome, autor, descrição, etc.. a flag <span style="background-color: rgb(36, 64, 97);">-y</span> irá realizar um breve preenchimento automático. Caso queira fazer manualmente execute sem ela. Mas, não se preocupe, Sempre poderá alterar o package.json quando necessário.</code></p><h2 id="instalando-dependencias-necessarias">Instalando dependências necessárias <i class="fas fa-link link__title-icon"></i></h2><p>O passo seguinte é realizarmos a instalação dependências de desenvolvimento necessárias do nosso pacote. Dessa forma, perceba que o package.json irá acrescentar a seção de dev dependencies. Além disso, irei aproveitar para realizar algumas alterações como, nome, autor, keywords, etc.. Fique à vontade para preencher como achar pertinente.</p><p>Por fim, o package.json deverá se parecer com o seguinte:</p><pre>{  "name": "@ernane/svelte-star-rating",  "version": "1.0.0",  "description": "Simple component to assign scores based on stars.",  "homepage": "https://github.com/ErnaneJ/svelte-star-rating",  "bugs": {    "url": "https://github.com/ErnaneJ/svelte-star-rating/issues"  },  "repository": {    "type": "git",    "url": "git+https://github.com/ErnaneJ/svelte-star-rating.git"  },  "keywords": [    "svelte",    "star",    "ratting",    "component",    "sapper"  ],  "author": "ernane &lt;ernane.junior25@gmail.com&gt;",  "license": "MIT",  "devDependencies": {    "rollup": "^2.39.0",    "rollup-plugin-node-resolve": "^5.2.0",    "rollup-plugin-svelte": "^7.1.0",    "svelte": "^3.32.3"  }}</pre><h2 id="criacao-do-componente">Criação do componente <i class="fas fa-link link__title-icon"></i></h2><p>Como de costume, crio meus arquivos de lógica geralmente em um subdiretório nomeado <span style="background-color: rgb(36, 64, 97);">src</span>, irei seguir esse padrão aqui. Dessa forma, criaremos um arquivo <span style="background-color: rgb(36, 64, 97);">index.js</span>, ele será o ponto de partida do nosso componente.</p><p>Basicamente iremos importar o componente principal do nosso pacote e exportá-lo como default no index. Será algo dessa forma:</p><pre><code><span style="color: rgb(36, 64, 97);">// src/index.js</span>import SvelteStarRating from './SvelteStarRating.svelte';export default SvelteStarRating;</code></pre><p>Como consequência teremos agora que criar o arquivo, que será o nosso componente svelte em si, SvelteStarRating.svelte. Para testarmos, vamos apenas colocar uma mensagem de teste no momento!</p><pre><span style="color: rgb(36, 64, 97);">&lt;!-- src/SvelteStarRating.svelte --&gt;</span>&lt;p&gt;Hello World! It's my first package svelte component! ✨ SvelteStarRating ✨&lt;/p&gt;</pre><p>Nesse arquivo teremos toda a lógica e implementação do nosso pacote. Nele adicionaremos estilos, imports necessários, dentre outras coisas.. Vamos em frente, jajá voltaremos nele!</p><h2 id="formalizando-estrutura">Formalizando estrutura <i class="fas fa-link link__title-icon"></i></h2><p>Agora que temos a estrutura principal do nosso componente, precisamos formalizá-la em nosso <span style="background-color: rgb(36, 64, 97);">package.json</span>. Para isso será necessário realizarmos mais algumas alterações nele.</p><pre><code>    <span style="color: rgb(36, 64, 97);">// ...</span>    "main": "dist/index.js",    "module": "dist/index.mjs",    "svelte": "src/index.js",    "scripts": {        "build": "rollup -c",        "dev": "rollup -c -w"    },        <span style="color: rgb(36, 64, 97);">// ...</span></code></pre><p><code>Como essa parte é um pouco delicada, vamos ver o que ela está realmente fazendo:</code></p><ul><li>Em <span style="background-color: rgb(36, 64, 97);">main</span> definimos qual será a saída após a execução do script de compilação,</li><li>em <span style="background-color: rgb(36, 64, 97);">module</span> definimos o mesmo, porém como saída um arquivo de extensão <span style="background-color: rgb(36, 64, 97);">mjs</span> para que o Node diferencie-o dentre os módulos criados com <span style="background-color: rgb(36, 64, 97);">CommonJS</span> e o <span style="color: rgb(36, 64, 97);">ES6</span>.</li><li>Em <span style="background-color: rgb(36, 64, 97);">svelte</span>, estamos definindo o caminho do nosso arquivo principal, o <span style="background-color: rgb(36, 64, 97);">index.js</span> que criamos anteriormente.</li><li>E, por fim, <span style="background-color: rgb(36, 64, 97);">scripts</span> serão os comandos utilizados para execução e compilação em desenvolvimento.</li></ul><p>Perceba que o subdiretório <span style="background-color: rgb(36, 64, 97);">dist</span>, que especificamos nos dois primeiros comandos, não existe pois será gerado automágicamente ✨.</p><p>Após essas pequenas mudanças o nosso <span style="background-color: rgb(36, 64, 97);">package.json</span> ficará da seguinte maneira:</p><pre style="text-align: left;">{  "name": "@ernane/svelte-star-rating", "version": "1.0.0",  "description": "Simple component to assign scores based on stars.",  "main": "dist/index.js",  "module": "dist/index.mjs",  "svelte": "src/index.js",  "scripts": {    "build": "rollup -c",    "dev": "rollup -c -w"  },  "homepage": "https://github.com/ErnaneJ/svelte-star-rating",  "bugs": {    "url": "https://github.com/ErnaneJ/svelte-star-rating/issues"  },  "repository": {    "type": "git",    "url": "git+https://github.com/ErnaneJ/svelte-star-rating.git"  },  "keywords": [    "svelte",    "star",    "ratting",    "component",    "sapper"  ],  "author": "ernane &lt;ernane.junior25@gmail.com&gt;",  "license": "MIT",  "devDependencies": {    "rollup": "^2.39.0",    "rollup-plugin-node-resolve": "^5.2.0",    "rollup-plugin-svelte": "^7.1.0",    "svelte": "^3.32.3"  }}</pre><h2 id="criando-o-arquivo-rollup.config.js">Criando o arquivo rollup.config.js <i class="fas fa-link link__title-icon"></i></h2><p>Bem provavelmente você já tem familiaridade com este arquivo por se tratar do Svelte. Mas basicamente realizamos a configuração básica de compilação do nosso singelo projeto.</p><pre><code>import svelte from "rollup-plugin-svelte";</code>import resolve from "rollup-plugin-node-resolve";const pkg = require("./package.json");export default {    input: "src/AtButton.svelte",    output: [        { file: pkg.module, format: "es" },        { file: pkg.main, format: "umd", name: "Name" },    ],    plugins: [svelte(), resolve()],};</pre><p>Ufa! Pacote configurado com sucesso para utilização. 🥳</p><h2 id="testando-componente-localmente">Testando componente localmente <i class="fas fa-link link__title-icon"></i></h2><p>Antes de publicarmos o nosso novo componente no <span style="background-color: rgb(36, 64, 97);">NPM</span>, é bom sempre testarmos ele para ver como está realmente e se seu resultado é satisfatório. Para isso, podemos utilizá-lo em nossa maquina mesmo antes de enviarmos para publicação. Para isso, vamos criar, em paralelo, um simples projeto em Svelte. Para esse caso, irei utilizar o próprio svelte-playground.</p><pre><code>$ npx degit sveltejs/template svelte-playground</code></pre><p>em seguida acessamos o projeto clonado e instalamos duas dependências iniciais.</p><pre><code>$ cd svelte-playground$ npm install</code></pre><p>Agora, para podermos utilizar o nosso componente como um pacote do npm e aplicarmos nesse projeto podemos executar o seguinte comando no diretório do nosso pacote <span style="background-color: rgb(36, 64, 97);">svelte-star-rating</span></p><pre><code>$ npm link</code></pre><p>Com ele obteremos uma resposta semelhante a essa:</p><pre><code>npm WARN svelte-star-rating@1.0.0 No repository field.audited 17 packages in 0.711s3 packages are looking for funding  run `npm fund` for detailsfound 0 vulnerabilities</code></pre><p>Após isso, agora no projeto de teste <span style="background-color: rgb(36, 64, 97);">svelte-playground</span> podemos executar o mesmo comando, porém agora, passando a diretório do nosso novo pacote em nossa máquina.</p><pre><code>$ npm link /path/svelte-star-rating</code></pre><p>Dessa forma podemos utilizar o nosso componente como um pacote localmente, e o melhor de tudo, em tempo real!</p><h2 id="utilizando-componente-localmente">Utilizando componente localmente <i class="fas fa-link link__title-icon"></i></h2><p>Acesse o projeto de teste que criamos, svelte-playground, e execute o projeto em desenvolvimento utilizando o comando presente em seu package.json</p><pre><code>$ npm run dev</code></pre><p>Em seguida acesse o navegador na porta sugerida e veja a aplicação em execução. Após isso, podemos agora aplicarmos o nosso componente a esse projeto e assim visualizarmos suas alterações em tempo de execução.</p><p>para isso, vamos ate o arquivo <span style="background-color: rgb(36, 64, 97);">src/app.svelte</span>, para realizarmos algumas alterações.</p><pre>&lt;script&gt;  <span style="color: rgb(36, 64, 97);">...</span>  import StarRating from "@ernane/svelte-star-rating";  <span style="color: rgb(36, 64, 97);">...</span>&lt;/script&gt;<span style="color: rgb(36, 64, 97);">...</span>&lt;StarRating/&gt;<span style="color: rgb(36, 64, 97);">...</span></pre><p>E então teremos o nosso componente sendo executado localmente. Fantástico, não!?</p><p>Agora é so desenvolvermos da maneira que quisermos o nosso novo componente e ir verificando se as alterações realizadas condiz com o que queremos. Aqui está o status atual do desenvolvimento do meu <a href="https://github.com/ErnaneJ/svelte-star-rating" title="svelte-star-rating" target="_blank">svelte-star-rating</a>.<br><br></p><h2 id="publicando-pacote-no-npm">Publicando pacote no NPM <i class="fas fa-link link__title-icon"></i></h2><p>Ótimo, já temos o nosso componente funcionando gostaríamos. E agora? bom, agora publicamos ele! A publicação é tão simples quanto um <span style="background-color: rgb(36, 64, 97);">push</span>, olha só..</p><p>primeiramente, você deverá estar logado em sua conta do <span style="background-color: rgb(36, 64, 97);">NPM</span>, caso não esteja ou não saiba é so seguir os passos descritos <a href="https://docs.npmjs.com/creating-a-new-npm-user-account" title="login no npm" target="_blank">aqui</a>.</p><p>Após estar logado, e com certeza de que deseja publicar a primeira versão do seu pacote, é so executar o seguinte comando:</p><pre><code>$ npm publish --access public</code></pre><p>Pronto! pode acessar o seu perfil na página do <span style="background-color: rgb(36, 64, 97);">NPM</span> que você verá um novo pacote adicionado! 🎉 Simples não?! </p><h2 id="testando-meu-novo-pacote-npm">Testando meu novo pacote NPM <i class="fas fa-link link__title-icon"></i></h2><p>Isso aqui, sem dúvidas, você já fez centenas de vezes, ou talvez menos 😅.. Acesse as informações do seu pacote que lá dirá como realizar a instalação. Mas seguindo os padrões você poderá realizar com o simples <span style="background-color: rgb(36, 64, 97);">npm install</span> passando o nome, definido no <span style="background-color: rgb(36, 64, 97);">package.json</span>, do seu projeto!</p><p>ou seja,</p><pre>$ npm i @ernane/svelte-star-rating</pre><p>O uso será o mesmo de antes, importar e utiliza.r Bom, isso você já sabe!</p><p>Caso tenha alguma dúvida, aqui está o <a href="https://github.com/ErnaneJ/svelte-star-rating" title="link repositorio" target="_blank">repositório</a> que utilizei para armazenar o pacote citado aqui no artigo e o link do mesmo já <a href="https://www.npmjs.com/package/@ernane/svelte-star-rating" title="Link do projeto no npm" target="_blank">publicado no npm</a>!</p><p>Espero que tenham gostado dessa postagem e que ela tenha te ajudado, de alguma forma, a encontrar ou que você procurava! 💙</p><h2 id="links">links <i class="fas fa-link link__title-icon"></i></h2><ul><li><a href="https://docs.npmjs.com/" title="Documentação oficial do NPM" target="_blank">Documentação oficial do NPM</a>;</li><li><a href="https://rollupjs.org/guide/en/" title="Documentação do Rollup" target="_blank">Documentação do Rollup</a>;</li><li><a href="https://svelte.dev/docs" title="Documentação do Svelte" target="_blank">Documentação do Svelte</a>;</li></ul> ]]>
      </content:encoded>
    </item><item>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://i.ibb.co/d6gwB3M/vs.png" 
      medium="image" type="image/*" width="300" height="250" />
      <title>Como alavancar sua produtividade com o Visual Studio Code</title>
      <link>https://blog.ernane.dev/post/como-alavancar-sua-produtividade-com-o-visual-studio-code</link>
      <dc:creator>
        <![CDATA[ Ernane Ferreira ]]>
      </dc:creator>
      <pubDate>2022-02-08T00:32:06.526Z</pubDate>
      <category> <![CDATA[ Dicas ]]> </category>
      <category> <![CDATA[ Dica ]]> </category>
<category> <![CDATA[ vsCode ]]> </category>
<category> <![CDATA[ Código ]]> </category>
<category> <![CDATA[ Editor ]]> </category>
      <guid isPermaLink="true">https://blog.ernane.dev/post/como-alavancar-sua-produtividade-com-o-visual-studio-code</guid>
      <description>
        <![CDATA[ Utilize todo potencial disponível do editor de texto mais querido da última década: o Vs Code. Você irá melhorar consideravelmente sua produtividade com estes atalhos. ]]>
      </description>
      <content:encoded>
        <![CDATA[ <p><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;">Não há dúvidas de que o </font></font><a href="https://code.visualstudio.com/" title="Código do Visual Studio |  Página inicial" target="_blank" style="background-color: ; font-family: var(--body-font); font-size: var(--normal-font-size);"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Visual Studio Code</font></font></a><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;">&nbsp;(VS Code), editor de código de código aberto desenvolvido pela <a href="https://www.microsoft.com/" title="Microsoft" target="_blank">Microsoft</a>, é um dos editores mais queridos da última década devido ser uma ótima ferramenta para o dia a dia n</font></font>ão se tratando apenas de código, mas da edição de qualquer tipo de texto.&nbsp;</p><h2 id="visual-studio-ou-visual-studio-code?-🤔">Visual Studio ou Visual Studio Code? 🤔 <i class="fas fa-link link__title-icon"></i></h2><p>O <a href="https://visualstudio.microsoft.com/" title="Link para a página do visual studio" target="_blank">Visual Studio</a>&nbsp;é uma IDE desenvolvida pela Microsoft, dedicada ao .NET Framework e a linguagens robustas como C, C++, C# e F#. Por ser uma solução completa, é uma ferramenta bem mais pesada do que o Visual Studio Code, que trataremos aqui, e que por sua vez trata de funcionalidades mais simples como a fácil edição de código com suporte a várias linguagens de programação, terminal integrado e controle de versão. Sendo, dessa forma, uma ferramenta mais leve. Mas não se engane, muito poderosa! 💪</p><h2 id="um-mundo-aberto-de-funcionalidades">Um mundo aberto de funcionalidades <i class="fas fa-link link__title-icon"></i></h2><p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">O VS Code é capaz de fazer muitas coisas que nos ajudam a trabalhar melhor. A</font></font><span style="color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size);">princípio ele é, e pode realmente parecer, uma ferramenta muito simples, mas ele possui uma loja de extensões imensa, e que continua crescendo constantemente.</span></p><p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ou seja, com essa enorme coleção de extensões, podemos adicionar diversas funcionalidades e personalizações, ao VS Code de forma bem simples e prática. Dessa maneira, ele pode facilmente ser comparado a grandes IDEs pagas. Caso se interesse, f</font></font><font style="background-color: ; color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size); vertical-align: inherit;"><font style="vertical-align: inherit;">acilmente qualquer</font></font><span style="color: var(--text-color); font-family: var(--body-font); font-size: var(--normal-font-size);">usuário pode criar uma extensão e publicar na loja. Desse modo, sempre há novas ferramentas que podem ser interessantes para alguém.</span></p><h2 id="atalhos-para-aumentar-sua-produtividade">Atalhos para aumentar sua produtividade <i class="fas fa-link link__title-icon"></i></h2><p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Como qualquer outra ferramenta, é de crucial importância que seus usuários aprendam a manuseá-la com destreza. Quanto mais você se aperfeiçoar nisso, mais fácil será trabalhar com ela em seu cotidiano.&nbsp;</font></font>Este poderoso editor, assim como a maioria dos outros, possui atalhos que nos tornam mais ágeis na execução de certas atividades, principalmente as mais repetitivas.</p><p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Os atalhos são muitos, mas aqui vamos ver os principais que não podem faltar no seu dia a dia. </font><font style="vertical-align: inherit;">🚀</font></font></p><ul><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+K CTRL+0 ou CTRL+K CTRL+J</b>: Dobrar ou desdobrar todas as funções ou métodos</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+G</b>: Ir para a linha</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+P</b>: Ir para o arquivo</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>F8</b>: Ir para o próximo erro ou aviso</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>F12</b>: Ir para a definição da função ou método</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>ALT+F12</b>: Mostrar a definição da função ou método</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+ALT+UP</b> ou <b>CTRL+ALT+DOWN:</b> Adicione um cursor acima ou abaixo da linha atual</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>SHIFT+ALT+I</b>: inserir um cursor no final de cada linha selecionada</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+F2</b>: Selecionar todas as ocorrências da seleção</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+SHIFT+.</b>: Ir para navegação via breadcrumbs</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+ALT+LEFT</b> ou <b>CTRL+ALT+RIGHT</b>: Mover o editor em grupos</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>SHIFT+ALT+0</b>: Alternar o layout dos grupos em vertical e horizontal</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>ALT+Z</b>: Alternar entre quebra de linha</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+KM</b>: Change a linguagem do arquivo</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+B</b>: Mostrar/esconder a barra lateral</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>SHIFT+ALT+UP</b> ou <b>SHIFT+ALT+DOWN</b>: Copiar a linha pra cima ou pra baixo</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+SHIFT+K</b>: Apagar linha selecione</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>F2</b>: Renomear simbolo ou variável</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+KC</b>: Comparar arquivo atual com a área de download+</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+SHIFT+5</b>: Terminal divisor</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+K CTRL+S</b>: Mostrar atalhos</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+TAB</b>: Alternar entre aba</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+L</b>: Selecionar toda linha</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+SHIFT+L</b>: Selecionar todas as ocorrências da seleção atual</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+F2</b>: Selecionar todas as ocorrências da palavra</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+SHIFT+SPACE</b>: Mostrar definição dos parâmetros</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+K CTRL+X</b>: Apagar espaços em branco</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+SHIFT+H</b>: Substituir em todos os arquivos</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>SHIFT+ALT+</b>F: Formatar todo o documento</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+K CTRL+F</b>: Formatar seleção</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+KV</b>: Abrir preview ao lado (ex. Markdown)</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+,</b>: Abrir configurações do usuário</font></font></li><li><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><b>CTRL+KZ</b>: Entrar no modo Zen</font></font></li></ul><p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Sem dúvida alguma, essa é apenas a ponta do iceberg, pois existem muuuitos outros atalhos disponíveis para usar e melhorar o seu fluxo de trabalho como desenvolvedor. C</font><font style="vertical-align: inherit;">aso se interesse, deixo aqui abaixo desse post alguns links de onde procurar mais informações!</font></font></p><p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Espero que tenha gostado dessa postagem e que ela tenha te ajudado, de alguma forma, a encontrar o que você procurava! </font><font style="vertical-align: inherit;">💙</font></font></p><h2 id="links"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Links</font></font><i class="fas fa-link link__title-icon"></i></h2><ul><li><a href="https://code.visualstudio.com/" title="estúdio visual" target="_blank"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">https://code.visualstudio.com/</font></font></a></li><li><a href="https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf" title="atalhos de teclado-linux.pdf" target="_blank"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf</font></font></a></li><li><a href="https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf" title="teclado-atalhos-macos.pdf" target="_blank"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf</font></font></a></li></ul> ]]>
      </content:encoded>
    </item>
  </channel>
</rss>
