Home Explore Blog CI



git

19th chunk of `Documentation/gitcore-tutorial.adoc`
c1ef4b66968f41815b9a0218a96157caaa68fc6235c49dc70000000100000fa3
 workflow for a "project lead" goes like this:

1. Prepare your primary repository on your local machine. Your
   work is done there.

2. Prepare a public repository accessible to others.
+
If other people are pulling from your repository over dumb
transport protocols (HTTP), you need to keep this repository
'dumb transport friendly'.  After `git init`,
`$GIT_DIR/hooks/post-update.sample` copied from the standard templates
would contain a call to 'git update-server-info'
but you need to manually enable the hook with
`mv post-update.sample post-update`.  This makes sure
'git update-server-info' keeps the necessary files up to date.

3. Push into the public repository from your primary
   repository.

4. 'git repack' the public repository. This establishes a big
   pack that contains the initial set of objects as the
   baseline, and possibly 'git prune' if the transport
   used for pulling from your repository supports packed
   repositories.

5. Keep working in your primary repository. Your changes
   include modifications of your own, patches you receive via
   e-mails, and merges resulting from pulling the "public"
   repositories of your "subsystem maintainers".
+
You can repack this private repository whenever you feel like.

6. Push your changes to the public repository, and announce it
   to the public.

7. Every once in a while, 'git repack' the public repository.
   Go back to step 5. and continue working.


A recommended work cycle for a "subsystem maintainer" who works
on that project and has an own "public repository" goes like this:

1. Prepare your work repository, by running 'git clone' on the public
   repository of the "project lead". The URL used for the
   initial cloning is stored in the remote.origin.url
   configuration variable.

2. Prepare a public repository accessible to others, just like
   the "project lead" person does.

3. Copy over the packed files from "project lead" public
   repository to your public repository, unless the "project
   lead" repository lives on the same machine as yours.  In the
   latter case, you can use `objects/info/alternates` file to
   point at the repository you are borrowing from.

4. Push into the public repository from your primary
   repository. Run 'git repack', and possibly 'git prune' if the
   transport used for pulling from your repository supports
   packed repositories.

5. Keep working in your primary repository. Your changes
   include modifications of your own, patches you receive via
   e-mails, and merges resulting from pulling the "public"
   repositories of your "project lead" and possibly your
   "sub-subsystem maintainers".
+
You can repack this private repository whenever you feel
like.

6. Push your changes to your public repository, and ask your
   "project lead" and possibly your "sub-subsystem
   maintainers" to pull from it.

7. Every once in a while, 'git repack' the public repository.
   Go back to step 5. and continue working.


A recommended work cycle for an "individual developer" who does
not have a "public" repository is somewhat different. It goes
like this:

1. Prepare your work repository, by 'git clone' the public
   repository of the "project lead" (or a "subsystem
   maintainer", if you work on a subsystem). The URL used for
   the initial cloning is stored in the remote.origin.url
   configuration variable.

2. Do your work in your repository on 'master' branch.

3. Run `git fetch origin` from the public repository of your
   upstream every once in a while. This does only the first
   half of `git pull` but does not merge. The head of the
   public repository is stored in `.git/refs/remotes/origin/master`.

4. Use `git cherry origin` to see which ones of your patches
   were accepted, and/or use `git rebase origin` to port your
   unmerged changes forward to the updated upstream.

5. Use `git format-patch origin` to prepare patches for e-mail
   submission to your upstream and send it out. Go back to
   step 2. and continue.


Working

Title: Git Workflow for Project Leads, Subsystem Maintainers, and Individual Developers
Summary
This section outlines the recommended workflows for different roles in a Git project, including project leads, subsystem maintainers, and individual developers, covering tasks such as preparing repositories, pushing and pulling changes, repacking and pruning, and submitting patches via email.