Kitware Local Git Setup Scripts


Introduction
------------

This is a collection of local Git development setup scripts meant for
inclusion in project source trees to aid their development workflow.
Project-specific information needed by the scripts may be configured
in a "config" file added next to them in the project.


Import
------

A project may import these scripts into their source tree by
initializing a subtree merge.  Bring up a Git prompt and set the
current working directory inside a clone of the target project.
Fetch the "setup" branch from the GitSetup repository:

 $ git fetch ../GitSetup setup:setup

Prepare to merge the branch but place the content in a subdirectory.
Any prefix (with trailing '/') may be chosen so long as it is used
consistently within a project through the rest of these instructions:

 $ git merge -s ours --no-commit setup
 $ git read-tree -u --prefix=Utilities/GitSetup/ setup

Commit the merge with an informative message:

 $ git commit
 ------------------------------------------------------------------------
 Merge branch 'setup'

 Add Utilities/GitSetup/ directory using subtree merge from
 the general GitSetup repository "setup" branch.
 ------------------------------------------------------------------------


Configuration
-------------

Read the "Project configuration instructions" comment in each script.
Add a "config" file next to the scripts with desired configuration
(optionally copy and modify "config.sample").  For example, to
configure the "setup-hooks" script:

 $ git config -f Utilities/GitSetup/config hooks.url "$url"

where "$url" is the project repository publishing the "hooks" branch.
When finished, add and commit the configuration file:

 $ git add Utilities/GitSetup/config
 $ git commit


Update
------

A project may update these scripts from the GitSetup repository.
Bring up a Git prompt and set the current working directory inside a
clone of the target project.  Fetch the "setup" branch from the
GitSetup repository:

 $ git fetch ../GitSetup setup:setup

Merge the "setup" branch into the subtree:

 $ git merge -X subtree=Utilities/GitSetup setup

where "Utilities/GitSetup" is the same prefix used during the import
setup, but without a trailing '/'.


License
-------

Distributed under the Apache License 2.0.
See LICENSE and NOTICE for details.
