GitPhraseBook
Git Phrase Book
NOTE: For increased pleasure use git 1.5 or later.
Pointers
There are plenty of good git tutorials on the net. A small collection of links can be seen below:
Setup
Getting the data
git clone git://git.openembedded.net/FIXME openembedded.git
Upgrading your data (lurking)
git pull --rebase
This command will fetch new objects from the server, and try to put your local changes on top of the newly fetched revisions for your current branch. If you have no local revisions you will still be updated.
Generating a ssh key
To be able to push to the OpenEmbedded git server you will need to have the right permissions. This starts with having your public ssh key on the server. Generate a key and send it to the right developers.
ssh-keygen -t rsa -- send the resulting link to koen, mickeyl and zecke
Checking out a branch
# See which branches are available git branch -a
# In theory create a branch and switch git checkout -b local origin/remote
# you will now be in the dreambox branch and track this. git checkout -b org.openembedded.dreambox origin/org.openembedded.dreambox
Configuring your tree for commits
git config user.name "Your Name" git config user.mail "you@name"
Doing things with git
Commit Message
<package name> <version>| <package category> | <configfile/class name>: <summary> { - <detail 1> - <detail 2>}*
Making your changes (old way)
# if you have new files git add your/new/file
# Commit everything git commit -a
Making your changes (better way)
git add your/changed/files git commit
Making your changes (a cool way)
git add -i git commit
Amending to your changes
You forgot something, no big deal, change the commit
git add your/others/changes git commit --amend
Commiting someones else work
git commit --author "Other One <other@one>"
Pushing your changes
git push origin org.openembedded.dev -- just pushes the org.openembedded.dev git push origin org.openembedded.dev:yourname/testbranch -- just pushes your things to a test branch. Use the right branch! dangerous! git push origin :yourname/testbranch -- delete a branch
Dealing with conflicts
Git will tell you what needs resolving. You can use kdiff3, meld, or many other tools to resolve the conflict. Don't be afraid you can easily redo and undo everything.
git pull --rebase -- Conflicts from here or something else git status git mergetool --tool=TOOL filename -- Starts interactive resolver, TOOL can be kdiff3, meld or anything else git rebase --continue or similar once everything got resolved
Working with git
Feature branches
Create your own short lived feature branch
git checkout -b yourname/yourfeature origin/org.openembedded.dev
Push your feature branch
git push origin yourname/yourfeature
Delete your branch after it was merged
git push origin :yourname/yourfeature
Upgrade/Rebase your branch to the latest version
git fetch origin git rebase origin/org.openembedded.dev
Change your history
git rebase -i origin/org.openembedded.dev -- select edit, squash, pick to say what to do with the commits git rebase --abort to abort it git reflog to help you to go back
Seeing changes
Log
git log branch -- See what happened in a branch git show --color (COMMIT) -- See the change, HEAD or branch name will work twoo git show --color HEAD -- foo/file -- Only show you change on foo/file gitk -- Graphical browser
What did you change
git rev-list origin/org.openembedded.dev.. -- Lists you the revs that are only in your branch compared to org.openembedded.dev
Other Interesting commands
git fetch -- fetch new revisions from all remote repositories git branch -- show you local branches and which branch you are in git branch -a -- show you all branches git checkout -b MYNAME origin/THEIRNAME -- create a branch and switch to it git push origin org.openembedded.dev -- upgrade a branch git reflog git reset REF -- Change your index to be at the state of REF
Examples
Example 1:
vi packages/gaim/gaim.inc git commit packages/gaim/gaim.inc git pull --rebase
should have a log message like this:
gaim: make sure do_install does its job in gaim.inc * install lib to ${libdir} instead of /usr/lib * remove executable bits from docs
Example 2:
diff /tmp/foo.c /oe/work/gtk+-2.8.4-r0/gtk+-2.8.4/src/foo.c > gtk-2.8.4/fix-foo.patch vi gtk+_2.8.4.bb git add gtk-2.8.4/fix-foo.patch git commit gtk-2.8.4/fix-foo.patch gtk+_2.8.4.bb git pull --rebase
should have a log message like this:
gtk+ 2.8.4: add patch for buffer overflow