-
Notifications
You must be signed in to change notification settings - Fork 11
Git workflow
The following explains how to synchronize a local copy of nirstorm with git. It can be done using the command line or using gitkraken (free for non-commercial use) which is the recommended GUI for git. You can read the getting-started-guide, which gives a very concise presentation of how git works. To use gitkraken, download, install it and create an account as requested.
To create a fork of nirstorm in your Github space, go to the main project page and click on the "Fork" button on the top right. Refer to this help page to know more about the fork process.
Your fork repository of nirstorm will be where you upload the modifications you have made locally. Then you issue a pull request to the main nirstorm repository which has to be reviewed before being incorporated (see section "Normal workflow").
The main repository and your fork version are called "remotes".
The following will get the current version of nirstorm from the main github repository and store in a folder called nirstorm_trunk in the current directory:
git clone https://github.com/Nirstorm/nirstorm.git nirstorm_trunk
Under gitkraken, click on File > Clone repo. Specify the target location on your hard drive (field "Where to clone to") and fill the URL field with: https://github.com/Nirstorm/nirstorm.git
.
Configure remote repos:
git remote -v # show all remote repo
The origin repository (main nirstorm github repository) should already bet set to https://github.com/Nirstorm/nirstorm.git.
Add your fork repository as the upstream remote (replace user_name with your user name).
- Using ssh::
- git remote add upstream [email protected]:user_name/nirstorm.git #my fork of repo (forked on github), uses ssh
- Using https::
- git remote add upstream https://github.com/user_name/nirstorm.git [email protected]:user_name/nirstorm.git
Under gitkraken, use the plus sign (+) located in the left panel under the section "REMOTE".
in the file nirstorm/.git/config : to the section origin, add the line fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
Prepare new feature -> describe the feature on GitHub with a ticket or assign yourself to an existing one | open a new issue on GitHub and label it or work on existing ticket |
Start a new feature -> create a new descriptively-named branch | git checkout -b new-dev |
Write doc, tests, implement -> Declare files to be commited | git add new_dev.rst test_new_dev.py new_dev.py |
When a sub-stuff seems completed -> commit locally | git commit -m '[#<ticket_number>] my stuff started' |
Loop while working | git add ... ; git commit -m '[#<ticket_number>] ...' |
Before pushing upstream, check that you are up to date with master branch in main repository. | git fetch origin; git checkout master; git merge origin/master |
If previous command updated your master branch rebase your feature branch on master. Resolve conflicts if any. | git checkout new-dev; git rebase master |
When the feature is ready to publish -> push to your fork of nirstorm on your github | git push upstream new-dev |
To ask for feedback and for merge on master -> do a pull-request on Github -> indicate that the PR is closed | Login to your github account an open a Pull-request from it |
Someone else review your PR
|
git cmds:
|
If someone else wants to checkout updated PR |
git cmds:
|
See comments on the PR on github Wait for close or approval |
|
Once PR is treated, if merge occured
|
git cmds:
|
Close the dev of the new feature
|
git cmds:
|
Sketch of the workflow:
## official repo on Github ## ## fork on user account ## nirstorm:nirstorm/master /_____PR______ __ user:nirstorm/my-branch \ /\ \ / \ / \ / git pull origin git push upstream my-branch \ / _\| ## local repo ## / origin/master upstream/my-branch
-
Show a nice history log:
git log --oneline --decorate --color --graph git log --pretty=format:"%C(auto)%h %ar %d %s %C(bold blue)<%an>%Creset" --decorate --color --graph
-
You can also add an alias:
git config --global alias.hist 'log --pretty=format:"%C(auto)%h %ar %d %s %C(bold blue)<%an>%Creset" --decorate --color --graph' git hist
-
Tutorials:
-
Workshop and courses:
-
Manual:
-
Contribute: