To contribute to a project hosted on GitHub
This procedure assumes that you cannot make commits to the origin repo. I.e, that you must issue a Pull Request from the Admin of the Origin repo.
- Visit the project repository on GitHub.
- “Fork” it. This creates your own copy of it on GitHub – under your GitHub account. This copy is “downstream” from the original project repository, which is in turn, “upstream” in relation to this copy.
- “Clone” a copy of your GitHub-hosted version of this repository. This creates a local working copy of the repository on your hard drive. In relation to this working copy of the repository, your GitHub-hosted copy is a remote (which you can refer to as “origin” (refs/remote/origin/)). The original repo that you forked from is now Upstream from Origin. To get your revisions into the upstream repo, you must issue a pull request.
Note: You end up with two enlistments: one under your account on GitHub, and another on your local hard drive.
To clone a repository
In Source Depot, this would be called “branching”. In Git, Cloning is much simpler, and yet, more powerful. Cloning produces a “working copy” of a project repository on your local hard drive. This is where you add/edit/delete source files.
To merge a branch
This updates the current branch with the difference in content (Git repository directory structure, directory contents, files, and file contents) between itself and another branch in the same repository.
To perform a merge:
- Switch to the branch (Checkout) that you want to receive the new content.
- Update your local copy of that branch (fetch).
- Run the merge.
In the simplest case, there are no conflicts (e.g., you’re just adding content).
For example, consider the case where the other branch contains the exact same files, except one of them contains an extra class definition. After merging them, the current branch would also contain the new class definition (as well as any new content that is not in the second branch).
To update your repository
Fetch
Get the remote data, and add it to my repo as another branch (i.e., as a remote branch).
Note: Remote branches don’t appear locally, automatically. To actually get a local copy, you need to perform:
git checkout remote/<branchname>
Pull
Fetches the remote data, and merges it in with the contents of the current branch (performs two steps in one).