On Github diutsu / git-workshop
Created by Gonçalo Sousa Github.com/diutsu
Controlo de versões (ou de revisões) é a gestão das alterações a documentos, software ou outros tipos de informação.
A cada alteração é geralmente atribuido um número ou código, e está associado um timestamp e quem foi a pessoa que a fez.
The need for a logical way to organize and control revisions has existed for almost as long as writing has existed, but revision control became much more important, and complicated, when the era of computing began. The numbering of book editions and of specification revisions are examples that date back to the print-only era. Today, the most capable (as well as complex) revision control systems are those used in software development, where a team of people may change the same files. Version control systems (VCS) most commonly run as stand-alone applications, but revision control is also embedded in various types of software such as word processors and spreadsheets, e.g., Google Docs and Sheets[1] and in various content management systems, e.g., Wikipedia's Page history. Revision control allows for the ability to revert a document to a previous revision, which is critical for allowing editors to track each other's edits, correct mistakes, and defend against vandalism and spam.É extremamente útil usar versionamento para qualquer projecto mesmo que o estejas a fazer sozinho
A Dropbox NÃO é um sistema de controlo de versões
o histórico de um ficheiro é limitado, e não podes fazer diff's entre versões
java, matlab, 3D printing, LaTeX...
em todos os projectos que trabalhem com ficheiros de texto
... mas também podem colocar ficheiros binários
Git also supports binary files, and can version them, but the diffs will not workRCS
CVS, SVN
Git, Mercurial
Dropbox
Não é um sistema de controlo de versões
CVS
Central Version System. É centralizado
SVN
SVN is CVS done right. “There is no way to do CVS right”
Git also supports binary files, and can version them, but the diffs will not work
sudo apt-get install git gitk
install Linux
OS X podem tentar:
brew install gitClaro que sim!https://www.eclipse.org/eGit/ ...
Criar uma nova pasta "gitWS"
Abrir um terminal nessa pasta abrir git bash no windows
git init
Initialized empty Git repository in /home/diutsu/gitWS/.git
Sempre que quiserem saber o estado do vosso repositório
git status
# On branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track)
Criar um ficheiro readme.md com
#git repository ## This is my first file on this repository I should describe this project here.
git status
On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) readme.md nothing added to commit but untracked files present (use "git add" to track)
git add readme.md
On branch master Initial commit Changes to be committed: (use "Git rm --cached <file>..." to unstage) new file: readme.md
git commit
Adiciona a tua mensagem de commit
[master (root-commit) eaee897] My first commit 1 file changed, 3 insertions(+) create mode 100644 readme.
Lets write another line on readme.md
git commit -a -m "Your commit message"
You can always check your repository history
git log
try out these git log
git log --p
git log --oneline
git log --abbrev-commit
git log --date=relative --pretty=format:"%h - %an, %ar : %s"
git branch alpha git checkout alpha
ou com açúcar
git checkout -b alpha
Escrevam uma nova linha no readme.md
git commit -am "This is a test feature"
git checkout master
Vejam que o ficheiro está igual ao que estava antes de mudarem de branch
git merge alpha
Updating 452941e..8da4cb8 Fast-forward readme.md | 2 ++ 1 file changed, 2 insertions(+)
Profit!
git checkout master
vi readme.md
Alterem uma linha
git commit -am "There was a bug, temporary fix"
git checkout alpha
vi readme.md
Alterem a mesma linha, mas para uma coisa diferente
git commit -am "This feature is complete now"
git checkout master
git merge alpha
Auto-merging readme.md CONFLICT (content): Merge conflict in readme.md Automatic merge failed; fix conflicts and then commit the result.
We have to fix these conflits first before we can commit the merge
<<<<<<< HEAD But this description can be altered ======= This project is my first experience with git scm. This description can be changed. And so it begun >>>>>>> alpha
HEAD é o que está na cabeça do repositório, podem ver isto como o último commit da branch actual
A seguir ao separador ====== estão as alterações da branch a que estão a fazer merge
git commit -m "merged fix for previous problem"
git mergetool
opens your a diff editor
Um remote é qualquer repositório que não seja o repositório local em que estás a trabalhar
Pode estar no pc do teu colega, Github, ou outro servidor qualquer
Pode ainda ser o repositório do projecto upstream para qual estas a contribuir
git remote add git@github.com:diutsu/gitWS origin
O Git permite-te teres vários repositórios remotos ao mesmo tempo
Quem ainda não tiver, criar uma conta.
Criar um novo repositório, sem adicionar o README
Vamos adicionar este novo repositório como um remote do que estivemos a trabalhar
git remote add origin git@github.com:diutsu/gitWS.git
git push -u origin master
Para demonstar o uso dos pulls vamos usar dois repositórios locais.
FORA do repositório criem uma nova pasta p.e. sndLocal, dentro dessa pasta
git clone git@github.com:diutsu/gitWS.git
Agora vamos fazer alterações aos ficheiros e fazer commit
git commit -am "dude, you had some typos there"
git push origin master
Voltando ao repositório original
git pull
As alterações são passadas de um repositório para outro
Reparem que nas branches do github não está lá a branch alpha
Há que fazer push de todas as branches individualmente
git push origin alpha
Voltando ao repositório em sndLocal.
git pull
git branch -vv
Adiciona contribuidores ao teu projecto no github
Para projectos em servidores privados, basta que tenhas acesso ao servidor
Já agora, é de referir que o git diferencia quem faz o commit e quem faz o push
5 repositórios privados gratuítos no Github
Github suporta uma maneira bastante fácil de fazer fork a um qualquer reposit' support an easy way to fork any public repository
Basta carregares no botão de fork, e ficas com um repositório teu com o código do upstream
Terás de fazer o pull do upstream à mão, mas é bastante fácil enviar código de volta ...
Se tiveres feito fork a um repositório, podes a qualquer momento submeter as tuas alterações para serem integradas no upstream
Issues, wiki, github-pages, gists
Adicionem um novo ficheiro
git commit -a -m "Your commit message"
git push
A few minutes later...
"Oh Zé não está lá nada!"
git status
Ups e agora?
git add newFile.txt
git commit --ammend
This is a new commit, replacing the old one.
git push
DO NOT ammend, or rebase, public code
git push -f
É o método mais parecido com o SVN
O pull é feito sempre com rebase, para manter a história linear
git pull --rebase
Caso hajam conflitos, resolvem-se, faz-se add e continua-se
git rebase --continue
ou aborta-se
git rebase --abort
Desenvolves cada feature numa branch à parte.
Assim que estiver completa, e revista, faz-se merge para a master
Muito parecido ao feature branch
Acrescenta algumas branches com significado especial
master - apenas o código na release oficial,develop - código em desenvolvimentorelease - em preparação para uma releasehotfix - para correcção de bugs na master
É um dos métodos mais comuns no github
Cada utilizador tem um repositório remoto
O desenvolvimento é feito para esse repositório
Assim que tiverem o seu trabalho completo criam um pull request
Lets use another repo, that has already a few commits
git clone git@github.com:{your github username]/gitWSPart2.git
git log --graph --oneline --all
ou
gitk --all
No not really. This is normalWe just have to merge a few branches
NO. The code is already public.
unscripted git hacking
Reve os slides aqui: diutsu.net/git ou faz clone e fork do repositório
git clone https://github.com/diutsu/git-workshopmade with git, reveal.js and ViM