{:br}
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:
- Criar uma pasta "tmp"
- Dentro desta pasta, inicializar o repositório com o comando "git init"
- Alterar o conteúdo do arquivo
- Salvar esta alterações e criar uma TAG para identificação desta versão ( não é obrigatório )
- Alterar novamente o arquivo
- Salvar uma nova versão
- 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:
{:}{:en}
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:
- Create a folder "tmp"
- Inside this folder, initialize the repository with the command "git init"
- Change the file contents
- Save this change and create a tag for identification of this version (not required)
- Change the file again
- Save a new version
- 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
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:
{:}