O documento fornece uma introdução sobre o sistema de controle de versão Git. Explica o que é Git e seus principais comandos e fluxo de trabalho, incluindo configuração inicial, adicionar arquivos, verificar status, fazer commit. Também discute os modelos centralizado e distribuído, instalação, interfaces gráficas e vantagens do uso do Git.
41. Instalação Mac
DMG
http://code.google.com/p/git-osx-installer/downloads/list?can=3
Homebrew (mxcl.github.com/homebrew)
$ brew install git
sábado, 15 de dezembro de 2012
42. Instalação Linux
apt-get
$ sudo apt-get install git-core git-gui git-doc
sábado, 15 de dezembro de 2012
43. Instalação Windows
msysgit
http://code.google.com/p/msysgit/downloads/list
* Use Git Bash Only
** Checkout Windows-style, commit Unix-style line endings
sábado, 15 de dezembro de 2012
50. Primeiros passos
Configuração
$ git config --global user.name "Mauro George"
$ git config --global user.email "maurogot@gmail.com"
sábado, 15 de dezembro de 2012
51. Primeiros passos
Criando nosso projeto
$ mkdir project
$ cd project
$ touch hello_world.php
sábado, 15 de dezembro de 2012
52. Primeiros passos
Criando um repositório
$ git init
sábado, 15 de dezembro de 2012
53. Primeiros passos
Criando um repositório
$ git init
Output:
Initialized empty Git repository in /path/to/my/project/.git/
sábado, 15 de dezembro de 2012
54. Primeiros passos
Primeiro commit
$ git add .
$ git commit -m "first commit"
sábado, 15 de dezembro de 2012
55. Primeiros passos
Primeiro commit
$ git add .
$ git commit -m "first commit"
Output:
[master (root-commit) bf3bd62] first commit
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hello_world.php
sábado, 15 de dezembro de 2012
56. Primeiros passos
Primeiro commit
$ git status
sábado, 15 de dezembro de 2012
57. Primeiros passos
Primeiro commit
$ git status
Output:
# On branch master
nothing to commit (working directory clean)
sábado, 15 de dezembro de 2012
59. Fluxo básico
Estado dos arquivos
Untracked
Modified
Staged
Commited
sábado, 15 de dezembro de 2012
60. Fluxo básico
Estado dos arquivos Untracked
Arquivos que o git não conhece
sábado, 15 de dezembro de 2012
61. Fluxo básico
Estado dos arquivos Untracked
$ touch Readme
$ git status
sábado, 15 de dezembro de 2012
62. Fluxo básico
Estado dos arquivos Untracked
$ touch Readme
$ git status
Output:
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#
Readme
nothing added to commit but untracked files present (use "git add" to track)
sábado, 15 de dezembro de 2012
63. Fluxo básico
Estado dos arquivos Modified
Arquivos que o git já conhece e que foram alterados
sábado, 15 de dezembro de 2012
64. Fluxo básico
Estado dos arquivos Modified
$ vim hello_world.php
<?php
echo 'Hello world';
?>
sábado, 15 de dezembro de 2012
65. Fluxo básico
Estado dos arquivos Modified
$ git status
sábado, 15 de dezembro de 2012
66. Fluxo básico
Estado dos arquivos Modified
Output:
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
#
modified: hello_world.php
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#
Readme
no changes added to commit (use "git add" and/or "git commit -a")
sábado, 15 de dezembro de 2012
67. Fluxo básico
Estado dos arquivos Staged
Arquivos que serão enviados para o repositório
sábado, 15 de dezembro de 2012
68. Fluxo básico
Estado dos arquivos Staged
$ git add hello_world.php
$ git status
sábado, 15 de dezembro de 2012
69. Fluxo básico
Estado dos arquivos Staged
$ git add hello_world.php
$ git status
Output:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#
modified: hello_world.php
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#
Readme
sábado, 15 de dezembro de 2012
70. Fluxo básico
Estado dos arquivos Commited
Arquivos que já estão no repositório git
sábado, 15 de dezembro de 2012
71. Fluxo básico
Estado dos arquivos Commited
$ git commit -m "showing hello world"
sábado, 15 de dezembro de 2012
72. Fluxo básico
Estado dos arquivos Commited
$ git commit -m "showing hello world"
Output:
[master 83d672c] showing hello world
1 files changed, 3 insertions(+), 0 deletions(-)
sábado, 15 de dezembro de 2012
73. Fluxo básico
Estado dos arquivos Commited
$ git status
sábado, 15 de dezembro de 2012
74. Fluxo básico
Estado dos arquivos Commited
$ git status
Output:
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#
Readme
nothing added to commit but untracked files present (use "git add" to track)
sábado, 15 de dezembro de 2012
75. Dica
Colorindo o output
$ git config --global color.ui true
sábado, 15 de dezembro de 2012
76. Fluxo básico
Resumo
Editar os arquivos Vim / emacs / textmate / etc
Colocar os arquivos em staged git add nome do arquivo
Verificar as mudanças git status
git commit -m “mensagem do
Fazer o commit das mudanças
commit”
sábado, 15 de dezembro de 2012
77. Dica
Sempre leia as mensagens do Git
Output:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#
modified: hello_world.php
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#
Readme
sábado, 15 de dezembro de 2012
79. Comandos
git diff
Visualiza o que foi modificado
sábado, 15 de dezembro de 2012
80. Comandos
git diff
$ vim hello_world.php
<?php
echo ‘Hello world, na PHP Conference Brasil 2012’;
?>
sábado, 15 de dezembro de 2012
81. Comandos
git diff
$ git diff
sábado, 15 de dezembro de 2012
82. Comandos
git diff
$ git diff
Output:
diff --git a/hello_world.php b/hello_world.php
index fe71dc6..04beafa 100644
--- a/hello_world.php
+++ b/hello_world.php
@@ -1,3 +1,3 @@
<?php
- echo 'Hello world';
+ echo ‘Hello world, na PHP Conference Brasil 2012’;
?>
No newline at end of file
sábado, 15 de dezembro de 2012
83. Comandos
git diff --word-diff
Visualiza o que foi modificado, diferenciando por palavras
sábado, 15 de dezembro de 2012
84. Comandos
git diff --word-diff
$ git diff --word-diff
sábado, 15 de dezembro de 2012
85. Comandos
git diff --word-diff
$ git diff --word-diff
Output:
diff --git a/hello_world.php b/hello_world.php
index fe71dc6..04beafa 100644
--- a/hello_world.php
+++ b/hello_world.php
@@ -1,3 +1,3 @@
<?php
echo ‘Hello [-world’;-]{+world, na PHP Conference Brasil 2012”;+}
?>
No newline at end of file
sábado, 15 de dezembro de 2012
86. Comandos
git diff --cached
Visualiza o que foi modificado e está staged
sábado, 15 de dezembro de 2012
87. Comandos
git diff --cached
$ git add hello_world.php
$ git status
sábado, 15 de dezembro de 2012
88. Comandos
git diff --cached
$ git add hello_world.php
$ git status
Output:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: hello_world.php
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Readme
sábado, 15 de dezembro de 2012
89. Comandos
git diff --cached
$ git diff
sábado, 15 de dezembro de 2012
90. Comandos
git diff --cached
$ git diff
Output:
sábado, 15 de dezembro de 2012
91. Comandos
git diff --cached
$ git diff --cached
sábado, 15 de dezembro de 2012
92. Comandos
git diff --cached
$ git diff --cached
Output:
diff --git a/hello_world.php b/hello_world.php
index fe71dc6..04beafa 100644
--- a/hello_world.php
+++ b/hello_world.php
@@ -1,3 +1,3 @@
<?php
- echo 'Hello world';
+ echo Hello world, na PHP Conference Brasil 2012 ;
?>
No newline at end of file
sábado, 15 de dezembro de 2012
93. Comandos
Commitando nossas alterações para continuarmos...
$ git commit -m "change hello world message"
sábado, 15 de dezembro de 2012
94. Comandos
git commit -am
Envia de modified para commited diretamente
sábado, 15 de dezembro de 2012
95. Comandos
git commit -am
$ vim hello_world.php
<?php
echo ‘Hello world, na PHP Conference Brasil 2012 em
30/11/2012’;
?>
sábado, 15 de dezembro de 2012
96. Comandos
git commit -am
$ git status
sábado, 15 de dezembro de 2012
97. Comandos
git commit -am
$ git status
Output:
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: hello_world.php
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Readme
no changes added to commit (use "git add" and/or "git commit -a")
sábado, 15 de dezembro de 2012
98. Comandos
git commit -am
$ git commit -am "added date on hello world"
sábado, 15 de dezembro de 2012
99. Comandos
git commit -am
$ git commit -am "added date on hello world"
Output:
[master 518bad1] added date on hello world
1 files changed, 1 insertions(+), 1 deletions(-)
sábado, 15 de dezembro de 2012
100. Comandos
git commit -am
$ git status
sábado, 15 de dezembro de 2012
101. Comandos
git commit -am
$ git status
Output:
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Readme
nothing added to commit but untracked files present (use "git add" to track)
sábado, 15 de dezembro de 2012
102. Dica
Se o git não conhece ele não mexe
sábado, 15 de dezembro de 2012
103. Comandos
Editando e commitando o Readme para continuarmos...
$ vim Readme
$ git add Readme
$ git commit -m "added readme"
sábado, 15 de dezembro de 2012
104. Comandos
git log
Exibe o histórico com infomações dos commits
sábado, 15 de dezembro de 2012
105. Comandos
git log
$ git log
sábado, 15 de dezembro de 2012
106. Comandos
git log
$ git log
Output:
commit a6aa0cb4d832a3a7c3a26001d89d8698e73790bb
Author: Mauro George <maurogot@gmail.com>
Date: Fri Jan 20 15:59:33 2012 -0200
added readme
commit 518bad17f1bc064f4d542683925ae9f1003609bd
Author: Mauro George <maurogot@gmail.com>
Date: Fri Jan 20 15:27:07 2012 -0200
added date on hello world
sábado, 15 de dezembro de 2012
107. Comandos
git log --oneline
Exibe o log em apenas uma linha
sábado, 15 de dezembro de 2012
108. Comandos
git log --oneline
$ git log --oneline
sábado, 15 de dezembro de 2012
109. Comandos
git log --oneline
$ git log --oneline
Output:
53bc92d Revert "added date on hello world"
a6aa0cb added readme
518bad1 added date on hello world
0e1b665 change hello world message
83d672c showing hello world
bf3bd62 first commit
sábado, 15 de dezembro de 2012
111. Voltando no tempo
git checkout <hash>
Volta para o commit informado em <hash>
sábado, 15 de dezembro de 2012
112. Voltando no tempo
git checkout <hash>
$ git checkout bf3bd62
sábado, 15 de dezembro de 2012
113. Voltando no tempo
git checkout <hash> Hash do primeiro commit
$ git checkout bf3bd62
sábado, 15 de dezembro de 2012
114. Voltando no tempo
git checkout <hash> Hash do primeiro commit
$ git checkout bf3bd62
Output:
Note: checking out 'bf3bd62'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at bf3bd62... first commit
sábado, 15 de dezembro de 2012
115. Voltando no tempo
git checkout <hash>
$ ls
hello_world.php
$ cat hello_world.php
sábado, 15 de dezembro de 2012
116. Voltando no tempo
git checkout <hash> De volta para o futuro
$ git checkout master
sábado, 15 de dezembro de 2012
117. Voltando no tempo
git checkout <hash> De volta para o futuro
$ git checkout master
Output:
Previous HEAD position was bf3bd62... first commit
Switched to branch 'master'
sábado, 15 de dezembro de 2012
118. Voltando no tempo
git checkout <hash> De volta para o futuro
$ ls
Readme hello_world.php
$ cat hello_world.php
<?php
echo ‘Hello world, na PHP Conference Brasil 2012 em
30/11/2012’;
?>
sábado, 15 de dezembro de 2012
119. Voltando no tempo
git revert <hash>
Reverte um commit criando um novo
sábado, 15 de dezembro de 2012
120. Voltando no tempo
git revert <hash>
$ git revert 518bad1
sábado, 15 de dezembro de 2012
121. Voltando no tempo
Hash do
git revert <hash> quarto commit.
$ git revert 518bad1 Em que foi adicionada a data
sábado, 15 de dezembro de 2012
122. Voltando no tempo
Hash do
git revert <hash> quarto commit.
$ git revert 518bad1 Em que foi adicionada a data
Output:
[master 53bc92d] Revert "added date on hello world"
1 files changed, 1 insertions(+), 1 deletions(-)
sábado, 15 de dezembro de 2012
123. Voltando no tempo
Hash do
git revert <hash> quarto commit.
$ git revert 518bad1 Em que foi adicionada a data
* Será solicitado para
digitar uma mensagem
do commit, mantenha a
padrão por convenção
Output:
[master 53bc92d] Revert "added date on hello world"
1 files changed, 1 insertions(+), 1 deletions(-)
sábado, 15 de dezembro de 2012
124. Voltando no tempo
git revert <hash>
$ cat hello_world.php
<?php
echo ‘Hello world, na PHP Conference Brasil 2012’;
?>
sábado, 15 de dezembro de 2012
125. Dica
Commits pequenos e constantes
Boa mensagem de commit
Created model of User
Má mensagem de commit
Created model of User, Post and Comments and added template
files
sábado, 15 de dezembro de 2012
126. Voltando no tempo
git checkout <hash> <arquivo>
Recupera o arquivo do commit informado
sábado, 15 de dezembro de 2012
127. Voltando no tempo
git checkout <hash> <arquivo>
$ git checkout 83d672c hello_world.php
sábado, 15 de dezembro de 2012
128. Voltando no tempo
git checkout <hash> <arquivo>
$ git checkout 83d672c hello_world.php
Hash do segundo commit.
Em que foi criada a mensagem
sábado, 15 de dezembro de 2012
129. Voltando no tempo
git checkout <hash> <arquivo>
$ git status
sábado, 15 de dezembro de 2012
130. Voltando no tempo
git checkout <hash> <arquivo>
$ git status
Output:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: hello_world.php
#
sábado, 15 de dezembro de 2012
131. Voltando no tempo
git checkout <hash> <arquivo>
$ git diff --cached
sábado, 15 de dezembro de 2012
132. Voltando no tempo
git checkout <hash> <arquivo>
$ git diff --cached
Output:
diff --git a/hello_world.php b/hello_world.php
index 04beafa..fe71dc6 100644
--- a/hello_world.php
+++ b/hello_world.php
@@ -1,3 +1,3 @@
<?php
- echo ‘Hello world, na PHP Conference Brasil 2012’;
+ echo 'Hello world';
?>
No newline at end of file
sábado, 15 de dezembro de 2012
133. Voltando no tempo
git checkout .
Recupera todos os arquivos sobreescrevendo as mudanças locais
sábado, 15 de dezembro de 2012
134. Voltando no tempo
git checkout .
$ vim hello_world.php
$ vim Readme
sábado, 15 de dezembro de 2012
135. Voltando no tempo
git checkout .
$ vim hello_world.php
$ vim Readme
sábado, 15 de dezembro de 2012
136. Voltando no tempo
git checkout .
$ git status
sábado, 15 de dezembro de 2012
137. Voltando no tempo
git checkout .
$ git status
Output:
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Readme
# modified: hello_world.php
#
no changes added to commit (use "git add" and/or "git commit -a")
sábado, 15 de dezembro de 2012
138. Voltando no tempo
git checkout .
$ git checkout .
sábado, 15 de dezembro de 2012
139. Voltando no tempo
git checkout .
$ git status
sábado, 15 de dezembro de 2012
140. Voltando no tempo
git checkout .
$ git status
Output:
# On branch master
nothing to commit (working directory clean)
sábado, 15 de dezembro de 2012