|
|
(17 intermediate revisions by 6 users not shown) |
Line 1: |
Line 1: |
| DANGER WILL ROBINSON!!! THIS IS AN INCOMPLETE DRAFT!!!
| | {{Out of date|This page that shows up high in search results in 2025 was last updated in 2016 and marked "THIS IS AN INCOMPLETE DRAFT!!!". Instead read '''[[Infrastructure/GitLab]]'''.}} |
|
| |
|
| = Simple Workflow =
| | :''View history if you want to see what it said, but don't bother discussing it.'' |
| | |
| This workflow is designed to be as close as possible to the KDE SVN Workflow. It is only recommended to be used for the first week or two of using Git with KDE while you become familiar with the basic Git commands. Once comfortable with the basic commands you should then move on to the [[Infrastructure/Git/Feature_Branch_Workflow|Feature Branch Workflow]].
| |
| | |
| In particular this workflow will not use git branches or any remote features, all feature work will be in the local master (the Git name for trunk).
| |
| | |
| The worked examples given will be for an imaginary app called KFoo in a git.kde.org code repository called 'kfoo'.
| |
| | |
| More detailed information can be found on the main [[Infrastructure/Git|KDE Git page]].
| |
| | |
| == Set-up ==
| |
| | |
| This section documents how to set up Git and your code repository for development.
| |
| | |
| === Configure Git ===
| |
| | |
| Follow all the instructions on the [[Infrastructure/Git/Configuration|KDE Git Configuration]] page, the instructions given below assume you are using the standard configuration.
| |
| | |
| === Clone your repository ===
| |
| | |
| You need to copy your central code repository from git.kde.org into your local KDE source directory. In Git this process is called cloning.
| |
| | |
| To clone your project repository:
| |
| | |
| cd your/source/dir
| |
| git clone kde:<project>
| |
| cd <project>
| |
| | |
| In our KFoo example:
| |
| | |
| git clone kde:kfoo
| |
| cd kfoo
| |
| | |
| See the [[Getting_Started/Build/Environment#Source_Path|KDE Build Environment]] page for advice on structuring your source directory.
| |
| | |
| If you have a slow or intermittent internet connection then you may prefer to [[Getting_Started/Sources/Snapshots|download a snapshot tarball]] to bootstrap your clone. You can copy the required command from the [https://projects.kde.org/projects projects.kde.org] Repository page for your project, but it will be of the form:
| |
| | |
| wget -c http://anongit.kde.org/<project>/<project>-latest.tar.gz
| |
| | |
| == Basic Actions ==
| |
| | |
| This section documents basic actions that are performed within your workflow.
| |
| | |
| See also the [[Infrastructure/Git/Recipes|KDE Git Recipes]] page.
| |
| | |
| === Making changes ===
| |
| | |
| Changing code is no different from when using subversion.
| |
| | |
| === Committing Your Changes ===
| |
| | |
| The git commit command differs from the svn commit command in only creating a commit in your local clone of the repository, it does not merge the changes into the central repository. This allows you to queue up a series of small changes before merging them into the central repository.
| |
| | |
| Files in a git repository can be in various states:
| |
| * Untracked: Files in your local repository directory that Git is not tracking changes to and are not in the central repository.
| |
| * Tracked: Files that git tracks changes to.
| |
| * Unstaged: Tracked files that have had modifications to them but have not yet been staged or committed.
| |
| * Staged: Tracked files that have had modifications made to them and have been marked to be included in the next commit
| |
| * Committed: Files that git is tracking and that have been included in a local commit that may or may not be included in the central repository.
| |
| | |
| Note that different versions of a file can be in the Untracked and Tracked states at the same time.
| |
| | |
| This difference between staged and unstaged changes allows you to choose what changes you want in each commit.
| |
| | |
| To see what the current status of your local repository is:
| |
| | |
| git status
| |
| | |
| This will show you the status as follows;
| |
| | |
| # On branch master
| |
| # Your branch is ahead of 'origin/master' by 1 commit.
| |
| #
| |
| # Changes to be committed:
| |
| # (use "git reset HEAD <file>..." to unstage)
| |
| #
| |
| # modified: kstagedfile.h
| |
| #
| |
| # Changed but not updated:
| |
| # (use "git add <file>..." to update what will be committed)
| |
| # (use "git checkout -- <file>..." to discard changes in working directory)
| |
| #
| |
| # modified: kchangedfile.h
| |
| #
| |
| # Untracked files:
| |
| # (use "git add <file>..." to include in what will be committed)
| |
| #
| |
| # kuntrackedfile.txt
| |
| | |
| To add a changed file to the staging area, or to add a new file to be tracked by the repository:
| |
| | |
| git add <filename>
| |
| | |
| To delete a file from the repository and add the deletion to the staging area:
| |
| | |
| git rm <filename>
| |
| | |
| To reset an unstaged or staged file to the currently committed version and irretrievably throw away you current changes:
| |
| | |
| git checkout <filename>
| |
| | |
| To reset all unstaged or staged file to the currently committed version and irretrievably throw away you current changes:
| |
| | |
| git
| |
| | |
| The git commit command adds all files in the staging state into a new commit:
| |
| | |
| git commit
| |
| | |
| If you have only changed tracked files then you can automatically add all tracked files that have been changed into staging and commit all the staged files in one command:
| |
| | |
| git commit -a
| |
| | |
| === Seeing What You Changed ===
| |
| | |
| To see a list of what files have been changed but not yet committed:
| |
| | |
| git status
| |
| | |
| To see what code changes have been made but not yet staged:
| |
| | |
| git diff
| |
| git diff <filename>
| |
| | |
| To see what code changes have been staged but not committed:
| |
| | |
| git diff --staged
| |
| git diff --staged <filename>
| |
| | |
| To see all the commits made:
| |
| | |
| git log
| |
| | |
| To see what changes were made in a commit:
| |
| | |
| git show <sha5>
| |
| | |
| The Git diff, log and show commands have many options for changing what is shown. In particular diff can show the difference between any two commits.
| |
| | |
| === Merging Your Changes ===
| |
| | |
| == Local Feature Development ==
| |
| | |
| == Local Bug Fixing ==
| |
| | |
| If your bug fix is only for unstable master then no special actions are required, just follow the same steps as the feature development workflow above.
| |
| | |
| If your bug fix is for a stable branch then this cannot be done without using git branches. The steps required will be given below but not explained in any detail. If possible it is recommended you wait until you are familiar with using the [[Infrastructure/Git/Feature_Branch_Workflow|Feature Branch Workflow]].
| |
| | |
| The steps detailed below are very inefficient as they use the same build tree and environment for unstable and stable which may cause a lot of rebuilding. A more efficient method is detailed in the [[Infrastructure/Git/Feature_Branch_Workflow|Feature Branch Workflow]].
| |
| | |
| First, find out the name of the stable branch you want to bug fix:
| |
| | |
| git branch -r
| |
| | |
| This will list all the branches on the central repository, for example kdelibs includes the following branches:
| |
| | |
| origin/HEAD -> origin/master
| |
| origin/KDE/4.5
| |
| origin/KDE/4.6
| |
| origin/kdecore/klocale-win
| |
| origin/kdeui/kdatetimeedit
| |
| origin/master
| |
| | |
| Here origin/KDE/4.6 is the 4.6 release of kdelibs which we will use for this example.
| |
| | |
| Next, create a local branch pointing to the stable release branch you want to bug fix:
| |
| | |
| git branch --track KDE/4.6 origin/KDE/4.6
| |
| git checkout KDE/4.6
| |
| | |
| If you have previously created the stable branch and want to do a new bug fix, then simply check it out again and update it:
| |
| | |
| git checkout KDE/4.6
| |
| git pull --rebase
| |
| | |
| Now make your required changes to the code, build and test. Once done commit the code changes to your local repository, remembering to include the BUG: and FIXED-IN: keywords in the commit message:
| |
| | |
| git commit -a
| |
| | |
| Make a note of the sha5 of the commit as you will need it later to copy the commit to the unstable master branch.
| |
| | |
| Now you can merge your changes into the central code repository:
| |
| | |
| git pull --rebase
| |
| git push origin KDE/4.6:KDE/4.6 //TODO or use git merge???
| |
| | |
| The next step is to apply the bug fix to the unstable master branch. First check the master branch back out and update it:
| |
| | |
| git checkout master
| |
| git pull --rebase
| |
| | |
| Next, Git makes it easy to apply the existing bug fix from the stable branch by using the cherry-pick command:
| |
| | |
| git cherry-pick -x -e <sha5 of stable commit>
| |
| | |
| This will allow you to edit the commit message as required before the change is committed. If the patch does not apply cleanly a message will appear and the changes will not be committed. You will then have to edit the changes and finish the commit manually.
| |
| | |
| Once cleanly applied and committed you can build and test the change, then merge them into the central code repository:
| |
| | |
| git pull --rebase
| |
| git push origin master:master //TODO or use git merge???
| |