IGSTK/Git/Develop: Difference between revisions
Line 49: | Line 49: | ||
:<code>$ cd [IGSTK_path/]Testing/Data | :<code>$ cd [IGSTK_path/]Testing/Data | ||
:<code>$ git checkout master | :<code>$ git checkout master | ||
:<code>$git config user.name "[name]" | :<code>$ git config user.name "[name]" | ||
:<code>$git config user.mail [name@domain.com] | :<code>$ git config user.mail [name@domain.com] | ||
:<code>$git add [testData.rom] | :<code>$ git add [testData.rom] | ||
:<code>$git commit -m "New data" | :<code>$ git commit -m "New data" | ||
:<code>$git push | :<code>$ git push | ||
Step 2: Commiting a new Testing/Data reference on topic in IGSTK that needs the data to refer to the new commit in IGSTKData. | Step 2: Commiting a new Testing/Data reference on topic in IGSTK that needs the data to refer to the new commit in IGSTKData. | ||
:<code>$git checkout -b Adding-New-Testing-Data | :<code>$ git checkout -b Adding-New-Testing-Data | ||
:<code>$git submodule update | :<code>$ git submodule update | ||
:<code>$cd Testing/Data | :<code>$ cd Testing/Data | ||
:<code>$git checkout master | :<code>$ git checkout master | ||
:<code>$git pull | :<code>$ git pull | ||
:<code>$cd ../.. | :<code>$ cd ../.. | ||
:<code>$git add Testing/Data | :<code>$ git add Testing/Data | ||
:<code>$git commit | :<code>$ git commit | ||
:<code>$git prepush | :<code>$ git prepush | ||
:<code>$git stage-push | :<code>$ git stage-push | ||
==Workflow== | ==Workflow== |
Revision as of 19:18, 30 May 2012
This page documents how to develop IGSTK through Git.
See our table of contents for more information.
Git is an extremely powerful version control tool that supports many different "workflows" for indivudal development and collaboration. Here we document procedures used by the IGSTK development community. In the interest of simplicity and brevity we do not provide an explanation of why we use this approach. Furthermore, this is not a Git tutorial. Please see our Git resource links for third-party documentation, such as the ProGit Book.
Setup
Before you begin, perform initial setup:
1. Register Git push access. | |
2. Follow the download instructions to create a local IGSTK clone: | |
|
|
3. Run the developer setup script to prepare your IGSTK work tree and create Git command aliases used below: | |
|
Add Testing Data
Step 1: Adding data to IGSTKData repository (git@igstk.org:IGSTKData.git).
$ cd [IGSTK_path/]Testing/Data
$ git checkout master
$ git config user.name "[name]"
$ git config user.mail [name@domain.com]
$ git add [testData.rom]
$ git commit -m "New data"
$ git push
Step 2: Commiting a new Testing/Data reference on topic in IGSTK that needs the data to refer to the new commit in IGSTKData.
$ git checkout -b Adding-New-Testing-Data
$ git submodule update
$ cd Testing/Data
$ git checkout master
$ git pull
$ cd ../..
$ git add Testing/Data
$ git commit
$ git prepush
$ git stage-push
Workflow
IGSTK development uses a branchy workflow based on topic branches.
Our collaboration workflow consists of three main steps:
1.
Local Development
2.
Code Review
- Share a Topic (requires Git push access)
3.
Integrate Changes
- Merge a Topic (requires Git push access)
Update
Update your local master branch:
$ git checkout master
$ git pullall
git help checkout
alias.pullall
(pull
and
submodule
update
)
Create a Topic
All new work must be committed on topic branches.
Name topics like you might name functions: concise but precise.
A reader should have a general idea of the feature or fix to be developed given just the branch name.
To start a new topic branch:
$ git fetch origin
$ git checkout -b my-topic origin/master
$ git submodule update
git help fetch
git help checkout
git help submodule
Pro Git: Basic Branching
Edit files and create commits (repeat as needed):
$ edit file1 file2 file3
$ git add file1 file2 file3
$ git commit
When a topic is ready for review and possible inclusion, share it by pushing to the topic stage.
Only authorized developers with Git push access to igstk.org
may perform this step.
Checkout the topic if it is not your current branch:
$ git checkout my-topic
Check what commits will be pushed to the topic stage:
$ git prepush
alias.prepush
(log
origin/master..
)
Push commits in your topic branch to the topic stage:
$ git stage-push
The topic is now published on the IGSTK Topic Stage and may be (optionally) reviewed by others.
To fetch staged topics for review, run
$ git fetch stage --prune
Revise a Topic
If a topic is approved after review, skip to the next step.
Otherwise, revise the topic and push it back to the topic stage for another review.
Checkout the topic if it is not your current branch:
$ git checkout my-topic
To revise the 3
rd commit back on the topic:
$ git rebase -i HEAD~3
(Substitute the correct number of commits back, as low as 1
.)
Follow Git's interactive instructions.
Return to the previous step to share the revised topic.
Merge a Topic
After a topic has been reviewed and approved, merge it into the upstream repository.
Only authorized developers with Git push access to igstk.org
may perform this step.
Checkout the topic if it is not your current branch:
$ git checkout my-topic
Merge the topic:
$ git stage-merge
- (If the merge conflicts follow the printed instructions to resolve them.)
alias.stage-merge
(push
to topic stage and
stage IGSTK merge my-topic
)
Branch-to-Topic Conflict Resolution
Delete a Topic
After a topic has been merged upstream, delete your local branch for the topic.
Checkout and update the master branch:
$ git checkout master
$ git pullall
git help checkout
alias.pullall
(pull
and
submodule
update
)
Delete the local topic branch:
$ git branch -d my-topic
The branch -d
command works only when the topic branch has been correctly merged.
Use -D
instead of -d
to force the deletion of an unmerged topic branch
(warning - you could lose commits).