From 76aed6ef732de38d82245b3d674f70bab30221e5 Mon Sep 17 00:00:00 2001 From: Owen Jacobson Date: Fri, 3 Jul 2015 22:31:49 -0400 Subject: Fuck it, serve the files directly. --- .html/git/pull-request-workflow.html | 163 +++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 .html/git/pull-request-workflow.html (limited to '.html/git/pull-request-workflow.html') diff --git a/.html/git/pull-request-workflow.html b/.html/git/pull-request-workflow.html new file mode 100644 index 0000000..1a15642 --- /dev/null +++ b/.html/git/pull-request-workflow.html @@ -0,0 +1,163 @@ + + + + + The Codex » + Life With Pull Requests + + + + + + + + +
+ + + + + +
+

Life With Pull Requests

+

I've been party to a number of discussions with folks contributing to +pull-request-based projects on Github (and other hosts, but mostly Github). +Because of Git's innate flexibility, there are lots of ways to work with pull +requests. Here's mine.

+

I use a couple of naming conventions here that are not stock git:

+
+
origin
+
The repository to which you publish proposed changes
+
upstream
+
The repository from which you receive ongoing development, and which will +receive your changes.
+
+

One-time setup

+

Do these things once, when starting out on a project. Keep the results around +for later.

+

I'll be referring to the original project repository as upstream and +pretending its push URL is UPSTREAM-URL below. In real life, the URL will +often be something like git@github.com:someguy/project.git.

+

Fork the project

+

Use the repo manager's forking tool to create a copy of the project in your +own namespace. This generally creates your copy with a bunch of useless tat; +feel free to ignore all of this, as the only purpose of this copy is to +provide somewhere for you to publish your changes.

+

We'll be calling this repository origin later. Assume it has a URL, which +I'll abbreviate ORIGIN-URL, for git push to use.

+

(You can leave this step for later, but if you know you're going to do it, why +not get it out of the way?)

+

Clone the project and configure it

+

You'll need a clone locally to do work in. Create one from origin:

+
git clone ORIGIN-URL some-local-name
+
+

While you're here, cd into it and add the original project as a remote:

+
cd some-local-name
+git remote add upstream UPSTREAM-URL
+
+

Feature process

+

Do these things for each feature you work on. To switch features, just use +git checkout my-feature.

+

Create a new feature branch locally

+

We use upstream's master branch here, so that your feature includes all of +upstream's state initially. We also need to make sure our local cache of +upstream's state is correct:

+
git fetch upstream
+git checkout upstream/master -b my-feature
+
+

Do work

+

If you need my help here, stop now.

+

Integrate upstream changes

+

If you find yourself needing something that's been added upstream, use +rebase to integrate it to avoid littering your feature branch with +“meaningless” merge commits.

+
git checkout my-feature
+git fetch upstream
+git rebase upstream/master
+
+

Publish your branch

+

When you're “done,” publish your branch to your personal repository:

+
git push origin my-feature
+
+

Then visit your copy in your repo manager's web UI and create a pull request +for my-feature.

+

Integrating feedback

+

Very likely, your proposed changes will need work. If you use history-editing +to integrate feedback, you will need to use --force when updating the +branch:

+
git push --force origin my-feature
+
+

This is safe provided two things are true:

+
    +
  1. The branch has not yet been merged to the upstream repo.
  2. +
  3. You are only force-pushing to your fork, not to the upstream repo.
  4. +
+

Generally, no other users will have work based on your pull request, so +force-pushing history won't cause problems.

+
+ + + +
+
+ + +comments powered by Disqus +
+ + + + + +
+ + \ No newline at end of file -- cgit v1.2.3