brainbaking/content/wiki/code/tools/git.md

4.6 KiB

+++ title = "git" draft = false tags = [ "code", "tools", "git" ] date = "2013-03-12" +++

Git

Handige commando's

Van een remote branch changes binnen halen

Stel: ik heb een fork gemaakt maar wil van de "upstream" de veranderingen binnen halen:

git remote add upstream git://github.com/user/bla.git
git fetch upstream
git merge upstream/master

En dan eventueel merge conflicten oplossen.

Stap-voor-stap

setup git voor windows: volg instructies op http://help.github.com/win-set-up-git/

Stap-voor-stap SSH

  1. Installeer cygwin met de volgende packages: 1. ssh en varianten 2. git 3. corkscrew voor proxy indien nodig
  2. genereer voor uw pc public ssh keys met ssh-keygen -t rsa -C "[email]"
  3. Kopieer de public key in ~/.ssh/id_rsa.pub en voeg dit aan uw profiel op github.com toe hier: https://github.com/account/ssh
  4. Zet de ssh proxy indien nodig - zie onder
  5. Test connectie met ssh -T git@github.com

Stap-voor-stap Git

  1. Set username & email: 1. git config --global user.name "[name]" 2. git config --global user.email "[email]"
  2. Set github user & github token - terug te inden op github account settings: 1. git config --global github.user [user] zonder quotes 2. git config --global github.token [token] zonder quotes

Kleurtjes toevoegen aan de git shell (rood/groen voor unstaged/staged files): git config --global color.ui true

In-depth guide

Basisconfiguratie .gitignore

Zie https://github.com/github/gitignore

Conflict resolutie

Outgoing changes resetten en een pull doen

git reset --hard

En daarna

git pull

een harde reset uitvoeren op het verkeerde moment kan u van de main branch afhalen: zie http://blog.plover.com/prog/git-reset.html

A tale of three trees

Git gebruikt intern als version control systeem 3 trees: head, index & work.

Als conflicten auto-merged kunnen worden met een pull komt dit rechtstreeks in uw lokale repository. Anders moet je mergen met git mergetool -y.

Na de merge moet je lokaal committen - dit zijn dan de wijzigingen die van de remote repository gepulled werden.

Meer informatie & uitleg op:

Configuratie SSH

SSH proxy definiëren: create config file in ~/.ssh:

ProxyCommand /usr/bin/corkscrew proxy.x.be 8080 %h %p

Opgelet corkscrew ook nog downloaden (cygwin opgelet)

Configuratie GIT

Alle configuratie flags kunnen aangepast worden met git config --global [key] [value].

  • Een proxy definieren: key http.proxy

Het verschil zien tussen de lokale gecommite gegevens en de remote

Indien reeds van unstaged -> staged -> committed gegaan, voor de git push te doen, wat is het verschil??

Enkel zichtbaar via git log, dan het detail daarvan proberen te raadplegen met git show [begin hashtag logentry]].

Merge tool configureren

  • download kdiff3 (http://kdiff3.sourceforge.net/)
  • configure git mergetool:
    1. git config --global merge.tool kdiff3
    2. git config --global mergetool.kdiff3.path "C:
      Program Files (x86)
      KDiff3
      kdiff3.exe"
    3. git config --global mergetool.trustexitcode false
  • use mergetool: git mergetool -y

Cheat sheet

Een repository initieel aanmaken

Gegeven: een project directory waar men een repository van wil maken.

^ Actie ^ Commando ^ | initieel aanmaken nodige git bestanden | git init | | remote repository toevoegen | git add origin [url] |

Bij een git add commando zou de url in geval van github zoiets kunnen zijn:

git@github.com:jefklak/jasmine-sync-flow.git

Een remote repository lokaal plaatsen

In een bepaalde root directory (maakt subdir automatisch aan):

git clone git@github.com:jefklak/jasmine-junit-runner.git

Om dan zaken upstream te pushen kan je git remote add upstream [url]] en git push upstream gebruiken.

State veranderen aan een repository

Altijd eerst lokaal committen, dán die snapshot pushen naar de remote server!

^ Actie ^ Commando ^ | files toevoegen om te committen | git add [dir]/* | | te committen status bekijken | git status | | change committen | git commit -a -m [msg] | | gecommitte snapshot pushen (naar master) | git push | | gecommitte snapshot pushen (naar x) | git push -u origin x |