Edgard Leal

My personal blog hosted on Github using Jekyll

Home View on GitHub
30 January 2013

{:br}

Git logo. Como restaurar apenas um arquivo no git, restor just one only file

O Problema

    Uma dos maiores problemas que tenho no meu dia a dia, e com solicitações de usuários que mudam de ideia, e eu preciso voltar a versão de um arquivo apenas e não todo o projeto. A grande maioria dos programadores que conheci utilizam uma técnica horrível e que torna o código fonte cada dia mas difícil de ler que consiste em comentar o trecho de código anterior, e quando o clientes muda de ideia e pede para deixar o sistema como era anteriormente, eles removem as marcações de comentário do código anterior e "comentam" o código que tinha escrito. Isto faz com que você tenha quase o dobro de conteúdo em seu arquivo de código fonte.

Utilizando o GIT

Quando estamos utilizando um sistema de controle de versão não precisamos nos preocupar em voltar o código ao estado anterior. No nosso caso estamos utilizando o GIT, você pode utilizar o Id do commit, ou o nome de uma TAG pré definida.

Para o nosso teste, vamos realizar os seguintes passos:

  1. Criar uma pasta "tmp"
  2. Dentro desta pasta, inicializar o repositório com o comando "git init"
  3. Alterar o conteúdo do arquivo
  4. Salvar esta alterações e criar uma TAG para identificação desta versão ( não é obrigatório )
  5. Alterar novamente o arquivo
  6. Salvar uma nova versão
  7. Voltar o arquivo para a versão anterior
mkdir tmp
cd tmp
git init
cat > test.txt
linha1
linha2
<Ctrl+d Ctrl+d>  # Precione a tecla control + d duas vezes
git add .  # Adiciona todos arquivo ao repositório
git commit -am "commit1"
git tag -am "commit1" commit1

Neste ponto já temos nosso arquivo versionado e utilizamos uma TAG nomeada para facilitar a identificação de nossa versão.

Agora vamos adicionar mas uma linha em nosso arquivo e criar uma nova versão:

echo "linha3" >> test.txt
git commit -am "commit2"
git tab -am "commit2" commit2

Agora temos duas versões diferentes, e vamos utilizar alguns comandos interessantes para analisarmos o nosso repositório:

git log --all --decorate --graph # Exibe o log para todas branches ( não utilizado no exemplo )
git diff commit1 # Exibe a diferença entre o estado atual do repositório HEAD, e a TAG commit1

Agora vamos voltar o arquivo "test.txt" para a tag commit1:

git checkout commit1 test.txt # commit1 é o nome da TAG que criamos 

Referencias:

Documentação oficial sobre checkout: git-scm.com/docs/git-checkout
Documentação oficial sobre TAGs: git-scm.com/book/en/v2/Git-Basics-Tagging

{:}{:en}

Git logo. Como restaurar apenas um arquivo no git, restor just one only file

The problem

One of the biggest problems I have in my day to day, and requests from users to change their minds, and I need to return the version of a file only and not the entire project. The vast majority of programmers who met using a horrible technique that makes the source code each day but difficult to read which is to review the previous code snippet, and when the customer changes his mind and asks to leave the system as it was before, they remove the comment tags from the previous code and "comments" the code he had written. This means that you have almost double the content in your source file.

Using GIT

When we are using a version control system we need not worry about returning the code to the previous state.   In our case we are using Git, you can use the commit of the Id, or the name of a predefined TAG.

For our test, we perform the following steps:

  1. Create a folder "tmp"
  2. Inside this folder, initialize the repository with the command "git init"
  3. Change the file contents
  4. Save this change and create a tag for identification of this version (not required)
  5. Change the file again
  6. Save a new version
  7. Return the file to the previous version
mkdir tmp
cd tmp
git init
cat > test.txt
linha1
linha2
<Ctrl+d Ctrl+d>  # Precione a tecla control + d duas vezes
git add .  # Adiciona todos arquivo ao repositório
git commit -am "commit1"
git tag -am "commit1" commit1
 At this point we have our versioned file and use a tag named for easy identification of our version.
Now let's add a line but in our file and create a new version:

echo "linha3" >> test.txt
git commit -am "commit2"
git tab -am "commit2" commit2

  Now we have two different versions, and will use some interesting commands to analyze our repository:

git log --all --decorate --graph # Show all branches ( we don't use branches here )
git diff commit1 # Show difference between the current state HEAD, and the TAG commit1

Now let's turn the file "test.txt" to commit1 tag:

git checkout commit1 test.txt # commit1 is the name of TAG created

References:

Official documentation about the command checkout: git-scm.com/docs/git-checkout
Official documentation about TAGs: git-scm.com/book/en/v2/Git-Basics-Tagging

{:}



blog comments powered by Disqus