Getting Started/Sources/Amarok Git Tutorial
Amarok is now developed in a Git repository instead of SVN. This was done to help get into place all the needed infrastructure to convert all of KDE, including documentation.
Crucial Step 0
For Windows you will need to follow some more steps. Found here.
git config --global user.name "Your Legal First and Last Name Here" git config --global user.email [email protected]
Run these commands before you even ponder ever in your life pushing to a Git repo.
Getting started with git
Depending on whether you simply want to test and follow Amarok development, write the occasional patch, or are an Amarok developer, the steps to use the repo are different.
Follow and test the latest development code
git clone git://git.kde.org/amarok/amarok.git
This creates an 'amarok' directory. cd into that and use it like normal. And when you want to update:
will download the new changes.
You can use the method above, make your changes, then do 'git diff' to create a patch like normal. Or you could use the following rules to create your own fork of Amarok with the additions you would like to request to merge. This makes it easier for Amarok Developers to track your changes and is better for more complicated patches.
NEEDS REVISION*Make sure you have created your SSH account on git.kde.org and are logged in. Go to the project you want to clone (e.g. Amarok - http://gi.kde.org/amarok) and select the branch which you want to clone (in this case Amarok - Mainline which is the master branch).
NEEDS UPDATE*After selecting the branch you can click "Clone this repository on Gitorious". Give your branch a name and you'll be taken to the page of your newly created clone. On this page you find two git urls: one to publicly clone the repository and the "Push url: [email protected]:~yourname/amarok/yourname-clone.git.
- Clone the push url to start working on your clone:
git clone [email protected]:~yourname/amarok/yourname-clone.git
- Create a branch for each new feature of bug fix you want to work on:
git branch my_feature_branch
- Switch to the new branch:
git checkout my_feature_branch
- Work, fix that bug or add the feature...
...work on this checkout - follow the normal development workflow...
- Commit it to your local checkout:
git commit -a
- Publish it on gitorious:
git push origin my_feature_branch
- To submit your patches: Create a merge request on gitorious by going to your clone page and selecting "Request merge" in the menu on the right.
- You can follow the main development branch easily by adding it as remote branch:
git remote add upstream [email protected]:amarok/amarok.git
- Update by pulling from the remote:
git pull --rebase upstream master
- Remember to use one branch per feature/bug fix!
If you don't already have a SSH account to the KDE SVN, please file a sysadmin bug on http://bugs.kde.org and provide your logon and your SSH pub key.
Setup Amarok Clone
The easiest thing to do is just use that:
git clone [email protected]:amarok/amarok.git
This will create a directory 'amarok'. cd into that and start developing!
If you already have an existing checkout form Gitorious times, simply edit the .git/config file and change "gitorious.org" to "git.kde.org" for the main repository (not any personal clones you may have in remotes).
90% of the time this is all that is needed:
git pull --rebase #hack, compile, build. It works! git status #to check if you want to commit all the modified files git commit -a git log git push
git pull --rebase downloads the latest changes. The --rebase option takes any unpushed local commits and applies them to the latest code, moving it to the top of the history. It is the equivalent of git pull; git rebase origin/master. See the "1. Rebase" section of Shipping Quality Code for a good explanation of what rebase does.
- If you have uncommited changes you can not rebase. Instead you can git stash, do the rebase, and then git stash apply.
git status will tell you what files are modified. If you created a new file, use git add on it to "track" it. If there are some junk files, you can add a regexp to .gitignore in the root.
git commit -a will commit all unmodified files. You can use git add and then simply git commit instead if you wish to commit only certain files.
Use git log to review the local unpushed commits. Possibly also useful is git diff origin/master, which will give you a diff between the current checkout and what is in the central repo.
git push pushes all the local commits to the central repo.
Follow remote feature branch
With git, feature branches are cheap and easy. Here's how to follow a feature branch someone else has already setup.
Remember that you can't push to git:// URL's when picking what URL to use.
git remote add jeff git://gitorious.org/~jefferai/amarok/jefferai-work.git git remote update git branch -a git branch jeff-pud pud-action/pudaction-removal git checkout jeff-pud #and later you want to switch back to the mainline git checkout master
git remote add adds a new remote named 'jeff' with the given URL. Think of remotes like bookmarks: you could always just explicitly pull from a URL instead.
git remote update downloads all the remotes you have without merging them, including the remote you just defined. This is a handy command if you're tracking multiple remotes.
git branch -a this lists all the branches you have, including the remote branches. Find the new branch you want to look at.
git branch this command creates a local branch called 'jeff-pud' that tracks the remote branch 'pud-action/pudaction-removal'. You figured out the name of the latter in the previous command.
git checkout is how you switch between branches.
- The Git Parable Background information that will help you understand git and distributed revision control systems in general
- Git to SVN crash course 5 minute introduction to git for experienced SVN users
- Shipping Quality Code with Git Guide to cleanup before a push
- Git for Computer Scientists Quick introduction to git internals for people who are not scared by words like Directed Acyclic Graph.
- Linus Torvalds on Git Why git? answered by the man that started it.
- Git Ready! Learn git one commit at a time
- Git Community Book An online book covering git from the basics to some advanced features
- Git Magic Covers some concepts and common usage patterns
- Zack Rusin's git cheat sheet
- Git cheat sheet Yet another git cheat sheet
- git by example git command reference and explanation
- Git Quick Reference Yet another reference of the most used git commands
Todo for this doc
- creating feature branches
- history manipulation. rebase -i, commit --append, and what to do when things go wrong. Probably its own page.
- merging with Development/Tutorials/Git