<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: @dyhalmeida</title>
    <description>The latest articles on DEV Community by @dyhalmeida (@dyhalmeida).</description>
    <link>https://dev.to/dyhalmeida</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F404009%2F17cbb55a-bd45-4a54-a4ed-0dce659deb4b.jpg</url>
      <title>DEV Community: @dyhalmeida</title>
      <link>https://dev.to/dyhalmeida</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dyhalmeida"/>
    <language>en</language>
    <item>
      <title>Trabalhe com duas branches ou mais ao mesmo tempo com Git Worktree</title>
      <dc:creator>@dyhalmeida</dc:creator>
      <pubDate>Fri, 19 Apr 2024 02:08:42 +0000</pubDate>
      <link>https://dev.to/dyhalmeida/trabalhe-com-duas-branches-ou-mais-ao-mesmo-tempo-com-git-worktree-3okg</link>
      <guid>https://dev.to/dyhalmeida/trabalhe-com-duas-branches-ou-mais-ao-mesmo-tempo-com-git-worktree-3okg</guid>
      <description>&lt;p&gt;Há pouco tempo na empresa em que trabalho, estava atuando em uma tarefa em uma branch e surgiu a necessidade de ter que verificar um código de outra branch de um colega de squad. Porém, eu ainda não tinha finalizado meu trabalho e nem tinha feito os commits necessários. Normalmente, nessas situações, eu sempre utilizei o &lt;a href="https://www.atlassian.com/br/git/tutorials/saving-changes/git-stash" rel="noopener noreferrer"&gt;git stash&lt;/a&gt; ou até mesmo optei por fazer um commit do tipo &lt;code&gt;git commit -m "chore: wip"&lt;/code&gt; para não perder minhas alterações.&lt;/p&gt;

&lt;p&gt;O problema é que ao retornar para minha branch, tenho que pegar de volta tudo que coloquei no stash ou reverter o commit wip para a área de staging e continuar meu trabalho. Porém, navegando pela internet em busca de outras soluções para esses cenários, acabei encontrando o &lt;code&gt;git worktree&lt;/code&gt; e passei a utilizá-lo nos cenários em que preciso atuar em branches diferentes.&lt;/p&gt;

&lt;p&gt;Caso queira se aprofundar mais sobre o git worktree, recomendo olhar a &lt;a href="https://git-scm.com/docs/git-worktree" rel="noopener noreferrer"&gt;documentação&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Porque eu passei a utilizar o git worktree e recomendo que você faça o mesmo?
&lt;/h2&gt;

&lt;p&gt;Justamente pelo motivo do cenário que mencionei acima ocorrer com frequência, ficar dando stash ou commit wip pra lá e pra cá, pelo menos para mim, é uma experiência ruim. Utilizando o comando git worktree, basicamente podemos criar um novo diretório/espaço de trabalho com o estado do git desejado sem afetar o espaço de trabalho atual, poupando uso de git stash e commits desnecessários.&lt;/p&gt;

&lt;p&gt;Pra falar a verdade, o espaço de trabalho atual já está no worktree do git. Se você digitar o comando &lt;code&gt;git worktree list&lt;/code&gt;, verá que seu espaço de trabalho atual já está listado, assim como meu exemplo abaixo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree list
/home/djalmeida/www/golang/go-study  03a1d59 &lt;span class="o"&gt;[&lt;/span&gt;feat/add-verify-token]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No meu exemplo, possuo apenas um espaço de trabalho e estou na branch feat/add-verify-token. Digamos que surgiu um bug em produção e preciso urgentemente corrigir, mas ainda não terminei meu código na branch &lt;code&gt;feat/add-verify-token&lt;/code&gt;. Uma solução rápida é criar um novo espaço de trabalho.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree add &lt;span class="nt"&gt;-b&lt;/span&gt; fix/quick-fix ../go-study-2 origin/main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dessa forma, um novo espaço de trabalho será criado chamado &lt;code&gt;go-study-2&lt;/code&gt; no mesmo nível de diretório do projeto com a nova branch chamada &lt;code&gt;fix/quick-fix&lt;/code&gt; criada a partir de &lt;code&gt;origin/master&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Verificando novamente o espaço de trabalho, agora podemos ver que tenho dois espaços de trabalho.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; git worktree list                                          
/home/djalmeida/www/golang/go-study    03a1d59 &lt;span class="o"&gt;[&lt;/span&gt;feat/add-verify-token]
/home/djalmeida/www/golang/go-study-2  07ed0e8 &lt;span class="o"&gt;[&lt;/span&gt;fix/quick-fix]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora basta navegar para o novo espaço de trabalho que acabei de criar, fazer as alterações, enviar para o remoto, mesclar e etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ../go-study-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois de concluir o trabalho, é só remover o espaço de trabalho criado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree remove go-study-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verificando novamente a lista de espaços de trabalho, note que agora voltei a ter apenas meu espaço de trabalho original.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git worktree list
/home/djalmeida/www/golang/go-study  03a1d59 [feat/add-verify-token]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora posso voltar para o espaço original e continuar atuando na branch &lt;code&gt;feat/add-verify-token&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ../go-study
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Observação sobre o git worktree
&lt;/h2&gt;

&lt;p&gt;Um fato a ter em conta é que você não pode fazer checkout na mesma branch em mais de um espaço de trabalho.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Por exemplo se você tiver dois espaço de trabalho, no espaço 1 você está na main e tentar fazer checkout na main do espaço 2, receberá um erro parecido com o exemplo abaixo.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree add ../go-study-2 main                        
Preparing worktree &lt;span class="o"&gt;(&lt;/span&gt;checking out &lt;span class="s1"&gt;'main'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
fatal: &lt;span class="s1"&gt;'main'&lt;/span&gt; is already checked out at &lt;span class="s1"&gt;'/home/djalmeida/www/golang/go-study'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Da mesma forma, se você tentar mudar para uma branch que já está em checkout em outro espaço de trabalho.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ../go-study-2
git checkout main
fatal: &lt;span class="s1"&gt;'main'&lt;/span&gt; is already checked out at &lt;span class="s1"&gt;'/home/djalmeida/www/golang/go-study'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resumo
&lt;/h2&gt;

&lt;p&gt;Neste post, explorei o cenário em que é necessário alternar entre branches. Enfrentar esse desafio durante uma grande refatoração ou um trabalho complexo pode ser desanimador. O git worktree oferece uma abordagem alternativa, possibilitando realizar checkouts adicionais de branches diferentes em diretórios separados e "conectar" esses espaços de trabalho ao repositório. Considero esse utilitário valioso especialmente ao lidar com múltiplas branches simultaneamente.&lt;/p&gt;

&lt;p&gt;E você, já tinha ouvido falar do git worktree antes? Gostaria de saber a sua opinião sobre esse utilitário do git. Compartilhe suas experiências nos comentários abaixo.&lt;/p&gt;

</description>
      <category>git</category>
    </item>
    <item>
      <title>Instalando e configurando o Totvs Smartclient no linux (Elementary OS Hera 5.1.5)</title>
      <dc:creator>@dyhalmeida</dc:creator>
      <pubDate>Sat, 13 Jun 2020 02:37:55 +0000</pubDate>
      <link>https://dev.to/dyhalmeida/instalando-e-configurando-o-totvs-smartclient-no-linux-elementary-os-hera-5-1-5-2jm5</link>
      <guid>https://dev.to/dyhalmeida/instalando-e-configurando-o-totvs-smartclient-no-linux-elementary-os-hera-5-1-5-2jm5</guid>
      <description>&lt;p&gt;Uma vez ou outra me pego trocando de sistema operacional e como na empresa que trabalho atualmente utiliza-se o ERP Protheus da Totvs, é necessário que eu tenha acesso para realizar algumas tarefas do dia a dia. Então resolvi registrar como configurar o &lt;strong&gt;SmartClient&lt;/strong&gt; no Linux, lembrando que é necessário verificar a versão da build do sistema e da arquitetura. No meu caso no momento que escrevi esse artigo, estou utilizando a arquitetura &lt;strong&gt;x64&lt;/strong&gt; e a build do Protheus na versão &lt;strong&gt;12.1.25&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Primeiro passo é entrar no site da Totvs e baixar o &lt;strong&gt;smartclient para linux&lt;/strong&gt;. Essa etapa é necessário possuir uma conta na Totvs.&lt;br&gt;
A versão que baixei foi a &lt;code&gt;20-04-13-P12-SMARTCLIENT_BUILD-17.3.0.16_LINUX_X64.TAR&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Após a conclusão do download é só descompactar os arquivos em uma pasta, aconselho o seguinte caminho. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;/home/seu_usuario/TOTVS/smartclient&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Neste mesmo caminho é necessário criar um arquivo de configuração chamado &lt;strong&gt;smartclient.ini&lt;/strong&gt;, no qual irá conter todas as configuração de conexão com o servidor. No meu caso eu apenas copiei do servidor da empresa um &lt;strong&gt;smartclient.ini&lt;/strong&gt; já configurado e coloquei na mesma pasta do meu smartclient executável.&lt;/p&gt;

&lt;p&gt;Com apenas um duplo clique no executável o mesmo deverá abrir.&lt;br&gt;
Em alguns casos é necessário criar um atalho no menu de aplicação do Linux e para isso utilizei o programa &lt;strong&gt;AppEditor&lt;/strong&gt;. O procedimento foi criar a pasta &lt;code&gt;/home/seu_usuario/Applications&lt;/code&gt; e criar um link/atalho do smartclient para dentro dessa pasta.&lt;/p&gt;

&lt;p&gt;Após esse procedimento, abri o AppEditor, cliquei em &lt;strong&gt;New Entry&lt;/strong&gt; e fiz as seguintes configurações. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Display Name&lt;/strong&gt;: SmartClient&lt;br&gt;
&lt;strong&gt;Comment&lt;/strong&gt;: Totvs Application&lt;br&gt;
&lt;strong&gt;Command Line&lt;/strong&gt;: /home/seu_usuario/Applications/smartclient&lt;br&gt;
Para o ícone da aplicação baixei uma &lt;a href="//encurtador.com.br/ayFR1"&gt;imagem &lt;strong&gt;.png&lt;/strong&gt; do smartclient&lt;/a&gt; que pesquisei no google e por fim cliquei em &lt;strong&gt;salvar&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fw3gqil26r1l4wikdxhtz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fw3gqil26r1l4wikdxhtz.png" alt="Alt Text" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora o smartclient irá aparecer no menu de aplicação do sistema. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzhuw68e5z0ne9wjblw7w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzhuw68e5z0ne9wjblw7w.png" alt="Alt Text" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👍😀❤️&lt;/p&gt;

</description>
      <category>totvs</category>
      <category>protheus</category>
      <category>linux</category>
      <category>smartclient</category>
    </item>
    <item>
      <title>Para que serve o .gitignore e o .gitkeep</title>
      <dc:creator>@dyhalmeida</dc:creator>
      <pubDate>Fri, 12 Jun 2020 02:01:16 +0000</pubDate>
      <link>https://dev.to/dyhalmeida/para-que-serve-o-gitignore-e-o-gitkeep-39ln</link>
      <guid>https://dev.to/dyhalmeida/para-que-serve-o-gitignore-e-o-gitkeep-39ln</guid>
      <description>&lt;p&gt;Quando iniciei meus estudos em programação e descobri que existia o &lt;strong&gt;git&lt;/strong&gt; para versionar meus códigos e o &lt;strong&gt;github&lt;/strong&gt; para armazena-los em repositório, logo me perguntei. Como eu faço para não versionar determinados arquivos e pastas além de poder subir pastas vazias para o github? Foi então que descobri a função de dois arquivos. O &lt;strong&gt;.gitignore&lt;/strong&gt; e o &lt;strong&gt;.gitkeep&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;.gitignore&lt;/strong&gt; é um arquivo que criamos na raiz do nosso projeto para poder ignorar arquivos e pastas do versionamento.&lt;br&gt;
Dentro do &lt;strong&gt;.gitignore&lt;/strong&gt; colocamos todos os arquivos e pastas para serem ignorados pelo git.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Ignora todos os arquivos com extensão .txt
*.txt

# Ignora uma pasta
build

# Remove do .gitignore o arquivo .gitkeep dentro da pasta
!uploads/.gitkeep

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Já o &lt;strong&gt;.gitkeep&lt;/strong&gt; é um arquivo oculto pelo sistema que serve apenas para versionar pastas vázias, basta cria-lo dentro da pasta a ser versionada.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
    </item>
  </channel>
</rss>
