Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Based on this article I am using GITHUB http://www.github.com for hosting my repositories securely online. Code is hosted on GITHUB makes the code easy to browse, download, fork, etc.
Cloning a project is creating a local copy on your host of a remote repository.
$ git clone https://github.com/vision1983/nfw.git
On GITHUB you can create a fork which is a copy of repository hosted on GITHUB within your own GITHUB space.
Once you pushed your changes to own copy on GITHUB you can do a pull request on GITHUB which will inform the maintainers of the original project that you wish to merge your changes upstream.
Create a repository on GITHUB without initializing.
$ git init $ git add README.md $ git commit -m "first commit" $ git remote add origin https://github.com/vision1983/test.git $ git push -u origin master
git remote add origin https://github.com/vision1983/test.git git push -u origin master
To commit changes you need to stage the changes using the following commands:
Add file to repository
$ git add file
Remove file from repository
$ git del file
Before committing you can undo or checkout original file
$ git checkout file
Commit changes locally
$ git commit -a
Finally upload or push to GITHUB
$ git push
Sync a fork of a repository to keep it up-to-date with the upstream repository.
Before you can sync your fork with an upstream repository, you must configure a remote that points to the upstream repository in GITHUB.
List current configured remote repository for your fork
$ git remote -v origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch) origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
Specify a new remote upstream repository that will be synced with the fork
$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.
Verify the new upstream repository you've specified for your fork
$ git remote -v origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch) origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push) upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch) upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
Fetch the branches and their respective commits from the upstream repository. Commits to master will be stored in a local branch, upstream/master
$ git fetch upstream remote: Counting objects: 75, done. remote: Compressing objects: 100% (53/53), done. remote: Total 62 (delta 27), reused 44 (delta 9) Unpacking objects: 100% (62/62), done. From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY * [new branch] master -> upstream/master
Check out your fork's local master branch
$ git checkout master Switched to branch 'master'
Merge the changes from upstream/master into your local master branch. This brings your fork's master branch into sync with the upstream repository, without losing your local changes
$ git merge upstream/master
In your GITHUB project, you need to keep your master branch clean, by clean I mean without any changes, like that you can create at any time a branch from your master. Each time, that you want to commit a bug or a feature, you need to create a branch for it, which will be a copy of your master branch.
When you do a pull request on a branch, you can continue to work on another branch and make another pull request on this other branch.
Before creating a new branch, pull the changes from upstream. Your master needs to be up to date.
Create the branch on your local machine and switch in this branch
$ git checkout -b [name_of_your_new_branch]
Push the branch on github
$ git push origin [name_of_your_new_branch]
When you want to commit something in your branch, be sure to be in your branch.
You can see all branches created by using
$ git branch
See details on branches for origin/GITHUB
$ git remote show origin
Switch to a branch
$ git checkout [name_of_your_new_branch]
Pull updates from branch on GITHUB
$ git pull origin [name_of_your_new_branch]
Push updates to your branch on GITHUB
$ git push origin [name_of_your_new_branch]
Delete a branch on your local filesystem
$ git branch -d [name_of_your_new_branch]
Force the deletion of local branch on your filesystem
$ git branch -D [name_of_your_new_branch]
Delete the branch on github
$ git push origin :[name_of_your_new_branch]