O que é git??
Git é uma ferramenta que permite realizar controle de versão das suas pastas. Geralmente é usada em projetos de programação, mas também pode ser usada para ter controle de versão de qualquer pasta.
Funciona como uma máquina do tempo: se você modificar alguns arquivos e não lembrar quais foram alterados, pode voltar aos arquivos originais para evitar problemas.
O que precisamos:
-
Windows Terminal
-
Git
Primeiramente, você precisa ter uma cópia limpa do GTA SA. Você pode conseguir uma em Miscellaneous-C (procure no Google) e instalá-la fora da pasta Arquivos de Programas. Pode instalar seu GTA na área de trabalho ou na pasta Documentos.
Uma vez que você tiver o jogo, abra a pasta dele. Se você já instalou o Windows Terminal, ao clicar com o botão direito em algum espaço vazio, verá no menu de contexto uma opção chamada "Abrir no Terminal". Clique nessa opção.
Uma janela como esta vai aparecer:
D:\GTA SA é o nome do diretório onde seu GTA está instalado, pode ser diferente para você.
Se você digitar o comando
dir e pressionar Enter, poderá ver os arquivos dentro da pasta.
E com o comando
cls ou
clear, você pode limpar a janela do terminal.
Agora, se você ainda não instalou o Git, pode usar o comando
winget install git.git para instalá-lo.
Uma vez instalado, vamos começar a trabalhar com o Git.
Comenzemos un repositorio
Primeiro de tudo, você precisa usar o comando
git init para iniciar um repositório. O que é um repositório? Basicamente é um banco de dados que armazena todas as alterações feitas na pasta.
Depois disso, você verá algo como o seguinte:
Ahora vamos a obtener el estado del repositorio con el comando
git statusAgora vamos obter o status do repositório com o comando
git status
Depois disso, você verá algo como o seguinte:
Por que há arquivos/pastas em vermelho? Bem, esses arquivos não estão sendo rastreados (ou seja, são untracked). Arquivos sem rastreamento significam que ainda não foram adicionados ao controle de versão do Git.
Vamos adicionar todos com o comando
git add *
Isso pode demorar um pouco na primeira vez, é só esperar até que o comando termine de ser processado.
Quando estiver pronto, se você usar o comando
git status novamente, verá algo como isto:
Esses são todos os arquivos que foram adicionados para serem comitados.
Commits
O que é um commit? Basicamente, é uma versão confirmada dos arquivos modificados.
É como uma captura do estado atual dos arquivos e é considerada uma versão "segura" do projeto.
Então, vamos fazer um commit. Você pode fazer um commit com o comando
git commit -m ""
Usamos o -m para adicionar um comentário ou mensagem sobre as mudanças que fizemos nos arquivos. Esse comentário vai entre aspas "".
Como é o primeiro comentário que estamos fazendo, vamos usar Original GTA Installation como mensagem.
Para isso, usaremos o comando
git commit -m "Original GTA Installation"
Observação: se você vir esta mensagem:
Necesitas usar esos comandos para permitir que git sepa que autor ha hecho los cambios, esto es debido a que git usualmente es usado en proyectos de programación con multiples usuarios, entonces pongamos un nombre y un email para continuar. Yo pondré un email rando debido a que no es necesario que sea un email real.
Agora vamos continuar de onde paramos
Depois de usar o comando git commit, você verá algo assim:
Vamos usar o comando git status novamente
Bom, não há alterações nos arquivos, agora vamos dar uma olhada no log de commit, para isso usamos o comando
git log
Você verá algo como o seguinte:
Temos o ID do commit e a informação de em qual branch estamos. As branches (ou ramificações) serão explicadas mais adiante.
Ok, agora temos uma instalação do GTA SA completamente original, mas todos sabemos que não dá pra jogar o jogo sem o
Essentials Pack, então vamos instalá-lo antes de continuar.
Se você usar
git status novamente, verá que alguns arquivos ainda não foram adicionados e outros foram modificados.
Então vamos adicioná-los com
git add e fazer outro commit.
É muito importante que os comentários estejam relacionados às mudanças que fizemos. Como instalamos o Essentials Pack, vamos comentar isso.
Agora usamos o comando
git commit -m "Essentials Pack installed"
Se verificarmos o git log, veremos algo parecido com o seguinte:
E se usarmos o comando
dir, poderemos ver os arquivos do Essentials Pack que foram instalados.
Lembra quando eu disse que o Git é como uma máquina do tempo? Pois bem, é hora de voltar no tempo.
Voltando no tempo com o Git
Existem várias formas de voltar a uma versão anterior. Vamos ver algumas delas.
Voltar no tempo de forma temporária
Primeiramente, você precisa anotar o ID dos commits para os quais deseja voltar.
Para vê-los, usamos o comando
git log
Vamos voltar ao primeiro commit. Para isso, você precisa usar o comando
git checkout [commit id]
Essa forma é usada para fazer alterações experimentais.
Se você usar o comando git log, verá algo parecido com isto:
E se você usar o comando
dir, isso aparecerá:
Bom, vamos fazer alguns testes. Por agora, vamos deletar todos os arquivos .dll.
Para isso, você pode usar o comando
del .dll para deletar todos os arquivos .dll.
Quando você usar
git status, isso aparecerá:
E não haverá nenhum arquivo .dll na sua pasta.
Para restaurar os arquivos, você pode usar o comando
git restore [nome do arquivo]
E como você pode ver, os arquivos foram restaurados.
Vamos fazer um commit com as alterações.
Se você olhar o git log, poderá ver as alterações que fizemos.
Lembre-se de que esse modo é para fins experimentais.
Bom, se você usar o comando
git switch -, podemos voltar para a branch master.
Se olharmos o git log, parece que nada mudou. E se você usar o comando
dir, todos os arquivos ainda estarão lá.
Voltar no tempo de forma permanente
Vamos começar fazendo algumas alterações no repositório para testar isso.
Ok, vamos supor que cometemos um erro: apagamos todos os arquivos .dll e fizemos um commit.
Como já realizamos um commit, não podemos usar o comando
git restore [nome do arquivo], como na captura de tela anterior, para restaurar os arquivos.
Mas podemos voltar para um commit anterior.
Primeiro, vamos usar o comando
git log para obter o ID do commit.
Para voltar no tempo de forma permanente, precisamos usar o comando
git reset [modo] com o ID do commit para o qual queremos voltar.
Mas o que acontece com o parâmetro [modo]?
Bom, o parâmetro [modo] tem duas formas de uso, que são:
- --soft: Voltamos para o commit que escolhemos, mas todas as alterações que fizemos ainda estarão disponíveis para serem commitadas posteriormente.
- --hard: Voltamos ao mesmo estado em que a pasta estava quando fizemos o commit ao qual queremos retornar, isso significa que todas as alterações que fizemos não serão salvas.
Vamos testar cada modo.
Git reset --soft
Neste caso, usaremos
git reset --soft [id]. Neste exemplo, usaremos o ID do commit do Essentials Pack.
Se usarmos o comando
git status, veremos que as alterações que foram adicionadas para serem commitadas ainda estão lá.
E podemos usar
git restore --staged [arquivo] para remover os arquivos das alterações que vamos commitar.
Agora você só precisa usar
git restore para restaurar os arquivos deletados.
Você pode usar o comando
git restore --staged * para remover todos os arquivos que foram adicionados para serem salvos quando você usar o git commit.
O mesmo vale para
git restore *, para restaurar todos os arquivos deletados.
Agora, como você pode ver, não há nenhuma alteração para ser commitada.
Git reset --hard
Vamos deletar mais uma vez todos os arquivos .dll e testar o modo hard.
Desta vez, não vou usar o
git status para mostrar o que acontece com os arquivos.
Ok, se usarmos
git log, lá está o nosso commit.
Vamos usar o comando
git reset --hard.
Bom, parece que não houve alterações. O que aconteceu com nossos arquivos .dll?
Desta vez usei o comando
dir *.dll para ver apenas os arquivos .dll.
Lá estão eles. Como fizemos um reset hard, voltamos ao mesmo estado em que a pasta se encontrava quando realizamos o commit, mas todas as alterações feitas entre essas versões que não foram commitadas foram perdidas.
Por isso, o modo hard só deve ser usado se você realmente precisar voltar para uma versão estável do seu jogo e não precisar manter nenhuma alteração anterior que tenha feito.
E essas são as formas mais comuns de voltar para uma versão anterior.
Agora vamos falar sobre os arquivos ignorados.
Arquivos ignorados? Sim, alguns arquivos precisam ser ignorados, caso contrário eles sempre aparecerão no comando
git status, especialmente os arquivos .log, que mudam toda vez que você abre o jogo.
Então, se você não quiser que eles apareçam no comando
git status, como na imagem a seguir
Continue lendo
Como ignorar arquivos
Ok, antes de tudo você precisa criar um arquivo chamado
.gitignore no diretório principal.
Você pode criar o arquivo usando o comando
echo. > .gitignore
Depois de criar o arquivo, abra-o com o Bloco de Notas e adicione as seguintes linhas:
E salve o arquivo.
Se você usar o comando
git status, verá que os arquivos .log não aparecem na lista de arquivos modificados.
Você também pode adicionar pastas para serem ignoradas no arquivo .gitignore, assim:
Para ignorar as alterações dessas pastas
Por que você iria querer ignorar pastas? Bem, alguns mods pesados fazem com que, ao usar o comando
git add *, leve muito tempo para ser processado. Um exemplo é o RoSA, se você tem certeza de que não fará nenhuma alteração na pasta do mod, pode adicioná-la no arquivo
.gitignore assim:
Para economizar um pouco de tempo, lembra do primeiro git add que fizemos? O dos arquivos originais do jogo? Lembra quanto tempo levou para adicionar todos os arquivos? Bem, você poderia ter criado o arquivo .gitignore e adicionado as pastas para serem ignoradas, para economizar tempo; mas, como alguns mods modificam arquivos dessas pastas, a melhor coisa a fazer é garantir que você tenha um commit com os arquivos originais.
Alguns mods possuem arquivos .ini que podem ser modificados cada vez que você abre o jogo, para evitar vê-los no comando git status, é uma boa ideia adicioná-los ao arquivo .gitignore.
Vamos adicionar os arquivos e fazer um commit com as mudanças.
E isso é tudo, agora você pode adicionar mais mods ao jogo e fazer commits, lembre-se de adicioná-los um por um para evitar possíveis problemas.
Além disso, é uma boa prática usar o
Stress Test de vez em quando para garantir que seu jogo está funcionando corretamente. Você pode adicionar comentários como
git commit -m "Stress test [data]", e substituir [data] pela data em que você fez o teste.
O que acontece com os branches?
Certo, os branches. Os branches são basicamente uma cópia do branch master/main, onde você pode fazer alterações sem afetar o branch principal. Por exemplo, se você quiser testar um mod que muda muitas coisas no seu jogo, pode criar um novo branch para testá-lo. Se você gostar do mod, pode fazer um commit das alterações no branch principal, ou simplesmente manter dois branches: um para usar o mod e outro com a instalação original do jogo.
Para ver os branches que você tem, use o comando
git branch
Para criar um novo branch, você pode usar o comando git branch [nome do branch]
Vamos criar o branch dev
Ok, ainda estamos no branch master. Para mudar para o branch dev, usaremos o comando
git checkout [nome do branch].
Neste caso, usaremos o comando
git checkout dev para mudar para o branch dev, e depois usaremos git status para saber em qual branch estamos.
Agora vamos instalar outro mod. Vamos usar o Project Urbanize como exemplo.
Vamos adicionar e comentar as alterações.
Agora podemos ver que na branch dev temos o Project Urbanize instalado. Vamos voltar para a branch master.
Se olharmos o git log, veremos que o Project Urbanize não está no jogo, e que não há alterações nessa branch.
Agora temos basicamente duas instalações do GTA, uma com o Project Urbanize instalado e outra sem ele. Vamos trazer as alterações da branch dev para a branch master.
Para isso, usaremos o comando
git merge [nome da branch]
Nota: certifique-se de estar na branch correta antes de usar o comando. Isso significa que, se você quiser trazer as alterações da branch dev para a branch master, primeiro deve usar git checkout master e depois usar o comando git merge dev
Você pode ver que todas as alterações da branch dev agora estão na branch master
E se vermos o git log, agora temos os commits da branch dev.
Agora vejamos o que acontece se voltarmos para a branch dev e fizermos um reset hard para um commit anterior.
Se usarmos git log, não há nada do Project Urbanize.
Agora, se voltarmos para a branch master e usarmos o comando git log, veremos o seguinte:
Como você pode ver, a branch dev está atualizada até o commit do .gitignore, mas a branch master ainda tem o commit do Project Urbanize. Se ambas as branches tivessem exatamente o mesmo estado, o texto em verde (indicando a branch atual) apareceria no mesmo commit — como vimos antes de fazer o hard reset.
Você pode criar quantas branches quiser, mas eu recomendo usar apenas duas:
Uma branch para testar mods.
E outra (geralmente a master) para manter uma instalação estável do GTA.
Se depois de instalar um mod e fazer um stress test o jogo continuar funcionando bem, você pode trazer os commits da branch de testes para a branch master.
Além disso, as branches são muito úteis para ter múltiplas instalações do GTA na mesma pasta — algo parecido com os perfis do modloader, mas com a vantagem de que funcionam também com arquivos fora da pasta modloader, como ENB Series ou RenderHook.
Sobre o git log
Quando você usa o git log, e tem muitos commits, você pode ver algo assim:
Se você pressionar a seta para baixo, o log continuará. Para voltar a escrever comandos, você deve pressionar a tecla q para sair do log.
Além disso, se você digitar gta_sa.exe e pressionar Enter, poderá abrir o jogo diretamente do terminal.