20. Movendo arquivos
Metas
- Aprender como mover um arquivo dentro do repositório.
Estou satisfeito com nossas alterações no CSS, mas há apenas um aspecto que gostaria de abordar antes de mesclarmos nossas alterações no main
. Vamos renomear o arquivo hello.html
para index.html
. Além disso, vamos mover nosso arquivo de estilos para um diretório css
designado.
01 Ver o histórico de alterações em um determinado arquivo
O Git permite que você veja o histórico de alterações de um determinado arquivo. Vamos ver o registro de alterações do arquivo hello.html
antes de renomeá-lo.
Execute
git log hello.html
git log style.css
Resultado
$ git log hello.html
903eb1d 2023-11-28 | Included stylesheet into hello.html (HEAD -> style) [Alexander Shvets]
9288a33 2023-11-28 | Added copyright statement with email (main) [Alexander Shvets]
b7614c1 2023-11-28 | Added HTML header (tag: v1) [Alexander Shvets]
46afaff 2023-11-28 | Added standard HTML page tags (tag: v1-beta) [Alexander Shvets]
78433de 2023-11-28 | Added h1 tag [Alexander Shvets]
5836970 2023-11-28 | Initial commit [Alexander Shvets]
$ git log style.css
555372e 2023-11-28 | Added css stylesheet [Alexander Shvets]
02 Ver um diff de um determinado arquivo
A capacidade de ver o registro de alterações de um determinado arquivo é útil. Ele permite que você veja o que foi alterado, quem fez as alterações e quando. Também é possível ver as alterações associadas a um commit específico. Eu o utilizo o tempo todo para descobrir como funciona a versão atual do código.
O comando show
é usado para ver as alterações em um commit específico. Vejamos as alterações no arquivo hello.html
no commit marcado com v1
(você pode usar qualquer referência de commit, como HEAD
, hash do commit, nome da tag ou do branch, etc.).
Execute
git show v1
Resultado
$ git show v1
b7614c1 2023-11-28 | Added HTML header (tag: v1) [Alexander Shvets]
diff --git a/hello.html b/hello.html
index 6da0629..0d576c4 100644
--- a/hello.html
+++ b/hello.html
@@ -1,4 +1,6 @@
<html>
+ <head>
+ </head>
<body>
<h1>Hello, World!</h1>
</body>
03 Renomear hello.html
Como você vê, é muito conveniente poder ver o registro de alterações de um determinado arquivo. Mas quando você renomeia ou move algo, há o risco de perder o histórico desse arquivo se não o fizer corretamente.
Vamos renomear nosso arquivo hello.html
para index.html
com o comando padrão mv
e ver o que acontece.
Execute
mv hello.html index.html
git status
Resultado
$ mv hello.html index.html
$ git status
On branch style
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: hello.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
no changes added to commit (use "git add" and/or "git commit -a")
O Git entende nossa alteração como se o arquivo tivesse sido excluído e um novo arquivo tivesse sido criado. Esse é um sinal de alerta. Precisamos informar ao Git que renomeamos o arquivo em vez de excluí-lo e criar um novo. Em um caso simples, o Git descobrirá que o arquivo foi renomeado assim que adicionarmos o arquivo ao índice:
Execute
git add .
git status
Resultado
$ git add .
$ git status
On branch style
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: hello.html -> index.html
Veja, o arquivo é listado como renomeado. Mas isso é o Git tentando ser inteligente. Nem sempre isso funciona. Por exemplo, se você renomeou e modificou vários arquivos, o Git pode não ser capaz de descobrir o que exatamente foi renomeado. Nesse caso, você pode perder a capacidade de ver o histórico do arquivo antes de renomeá-lo, pois o arquivo será tratado como um arquivo recém-adicionado.
04 Mover style.css
com segurança
Na maioria dos sistemas operacionais, renomear e mover arquivos é a mesma coisa. Portanto, vamos mover nosso arquivo style.css
para o diretório css
, mas, desta vez, faremos isso de forma segura com o comando git mv
. Esse comando garante que uma movimentação seja registrada no histórico do Git como uma movimentação.
Execute
mkdir css
git mv style.css css/style.css
git status
Resultado
$ mkdir css
$ git mv style.css css/style.css
$ git status
On branch style
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: style.css -> css/style.css
renamed: hello.html -> index.html
Vamos confirmar nossas alterações e verificar o histórico de alterações no arquivo css/styles.css
. Precisaremos adicionar a opção --follow
para ver o histórico do arquivo antes de ele ser movido. Vamos executar as duas variantes do comando para saber a diferença.
Execute
git commit -m "Renamed hello.html; moved style.css"
git log css/style.css
git log --follow css/style.css
Resultado
$ git commit -m "Renamed hello.html; moved style.css"
[style 0ee0113] Renamed hello.html; moved style.css
2 files changed, 0 insertions(+), 0 deletions(-)
rename style.css => css/style.css (100%)
rename hello.html => index.html (100%)
$ git log css/style.css
0ee0113 2023-11-28 | Renamed hello.html; moved style.css (HEAD -> style) [Alexander Shvets]
$ git log --follow css/style.css
0ee0113 2023-11-28 | Renamed hello.html; moved style.css (HEAD -> style) [Alexander Shvets]
555372e 2023-11-28 | Added css stylesheet [Alexander Shvets]