Difference between revisions of "GitPhraseBook"

From Openembedded.org
Jump to: navigation, search
(Git Phrase Book)
Line 1: Line 1:
= Git Phrase Book =
+
So how do we prepare the public to this fight; enlightenment. ,
 
 
 
 
'''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:
 
 
 
* [http://git.or.cz/gitwiki/GitDocumentation Official Documentation]
 
* [http://git.or.cz/gitwiki/GitCheatSheet Cheat Sheet]
 
* [http://book.git-scm.com/ The Git Community Book]
 
* [http://eagain.net/articles/git-for-computer-scientists/ Git For Computer Scientists]
 
* [http://progit.org/book/ Pro Git]
 
* [http://www.google.com/search?q=git+documentation&ie=utf-8&oe=utf-8&aq=t Google Search]
 
 
 
== Setup ==
 
 
 
 
 
=== Getting the data (read-only) ===
 
  git clone git://git.openembedded.org/openembedded
 
 
 
=== Getting the data (write-access) ===
 
 
 
For this command to succeed you need to have provided a SSH key (see [[#Generating a ssh key]]).
 
 
 
  git clone git@git.openembedded.org:openembedded
 
 
 
=== 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 the public key to the one of the core developers.
 
 
 
  # send the resulting pub key to koen, mickeyl, RP, or zecke [http://lists.linuxtogo.org/pipermail/openembedded-devel/2008-October/006291.html [email address]]
 
  ssh-keygen -t rsa or -t dsa
 
 
 
=== 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.
 
 
 
Depending on your git version this command may fail and does not report any error message: Version 1.5.6.5 (Debian Lenny) does, 1.5.5.1 (Fedora 9) does not. The message is
 
"refusing to pull with rebase: your working tree is not up-to-date".
 
 
 
In case that 'git pull --rebase' does not work for you, try the following:
 
 
 
  git stash
 
  git pull --rebase
 
  git stash pop
 
 
 
This information was taken from the [http://wiki.videolan.org/Git#Setting_up_.22git_up.22_.28Tip.29 VideoLAN Wiki].
 
 
 
=== 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 ===
 
 
 
If you forget this, your name and email in the commit mails, may be messed up.
 
 
 
  git config user.name "Your Name"
 
  git config user.email "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 ==
 
  # just pushes the org.openembedded.dev
 
  git push origin org.openembedded.dev
 
 
 
  # the same, just simpler
 
  git push
 
 
 
  # just pushes your things to a test branch. Use the right branch! dangerous!
 
  git push origin yourname/testbranch
 
 
 
  # delete a branch
 
  git push origin :yourname/testbranch
 
 
 
== 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.
 
 
 
  # Conflicts from here or something else
 
  git pull --rebase
 
  git status
 
 
 
  # Starts interactive resolver, TOOL can be kdiff3, meld or anything else
 
  git mergetool --tool=TOOL filename
 
 
 
  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 ====
 
  # select edit, squash, pick to say what to do with the commit
 
 
 
  git rebase -i origin/org.openembedded.dev
 
 
 
  # to abort the operation on a tricky merge
 
  git rebase --abort
 
 
 
  # to find out a previous state to use with git reset
 
  git reflog
 
 
 
== Seeing changes ==
 
 
 
=== Log ===
 
  # See what happened in a branch
 
  git log branch
 
 
 
  # See the change, HEAD or branch name will work too
 
  git show --color (COMMIT)
 
 
 
  #  Only show you change on foo/file
 
  git show --color HEAD -- foo/file
 
 
 
  # Graphical browser
 
  gitk
 
 
 
=== What did you change ===
 
  # Lists you the revs that are only in your branch compared to org.openembedded.dev
 
  git rev-list origin/org.openembedded.dev..
 
 
 
== Other Interesting commands ==
 
  # fetch new revisions from all remote repositories
 
  git fetch
 
 
 
  # show your local branches and which branch you are in
 
  git branch
 
 
 
  # show your all branches
 
  git branch -a
 
 
 
  # create a branch and switch to it
 
  git checkout -b MYNAME origin/THEIRNAME
 
 
 
  # upgrade a branch
 
  git push origin org.openembedded.dev
 
  git reflog
 
 
 
  # Change your index to be at the state of REF
 
  git reset REF
 
 
 
  # Kill the last commit
 
  git reset HEAD^1
 
 
 
  # Prepare a set of patch
 
  git format-patch origin
 
 
 
== Working with additional git repositories ==
 
One of the neat things with git is you can easily work with external repositories. 
 
  # add an external repository:
 
  git remote add openmoko.org git://git.openmoko.org/git/openmoko.git
 
  git fetch openmoko.org
 
 
 
  # view all remote branches available
 
  git branch -r
 
 
 
  # view changes on a remote branch
 
  gitk openmoko.org/org.openmoko.asu.stable
 
  git log openmoko.org/org.openmoko.asu.stable
 
 
 
  # view all diffs
 
  git diff origin/org.openembedded.dev openmoko.org/org.openmoko.asu.stable
 
 
 
  # view diffs in just one subdirectory
 
  git diff origin/org.openembedded.dev openmoko.org/org.openmoko.asu.stable classes
 
 
 
 
 
== 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
 
 
 
=== Example 3: Working with a private branch ===
 
 
 
Download and create a remote private branch "origin/ulf/linux-2.6.30.2".
 
The local copy of the branch will be called "ulf/linux-2.6.30.2"-
 
When you do:
 
 
 
git branch -a
 
 
 
local branches will be at the top, and remote branches
 
will be sorted in alpabetical order.
 
 
 
Create the local branch and prepare:
 
 
 
git clone git@git.openembedded.org:openembedded
 
cd openembedded
 
git config user.name "Ulf Samuelsson"
 
git config user.email "ulf.samuelsson@atmel.com"
 
git checkout -b ulf/linux-2.6.30.2 origin/org.openembedded.dev
 
 
 
Add something:
 
 
 
touch test
 
git add test
 
git commit -m "test" test
 
 
 
Create a remote private branch from the local branch.
 
It will be called "origin/ulf/linux-2.6.30.2"
 
 
 
git push origin ulf/linux-2.6.30.2
 
 
 
Create a local branch, based on your remote private branch:
 
 
 
git checkout -b ulf/linux-2.6.30.2 origin/ulf/linux-2.6.30.2
 
 
 
Add something to your local branch:
 
 
 
touch test2
 
git add test2
 
git commit -m "test2" test2
 
 
 
Update your remote private branch:
 
 
 
git push origin ulf/linux-2.6.30.2
 
 
 
Once the remote branch has been updated from a local
 
branch you need to update any other local branches by:
 
 
 
git fetch origin
 
 
 
Prepare patches for the mailing list:
 
 
 
git format-patch origin
 
 
 
Remove your local branch:
 
 
 
git checkout org.openembedded.dev
 
git branch -d ulf/linux-2.6.30.2
 
 
 
or possibly:
 
 
 
git branch -D ulf/linux-2.6.30.2
 
 
 
Note that the openembedded git server will not
 
allow you to delete a private branch.
 
Send an email to the mailing list and this will be fixed.
 
 
 
[[Category:Dev]]
 
[[Category:User]]
 

Revision as of 02:06, 23 October 2009

So how do we prepare the public to this fight; enlightenment. ,