branch: remove unwise workflows
[workshop-organization.git] / branch
1 Creating a new workshop
2 =======================
3
4 There is a central repository for all boot camp material [1].
5
6   https://github.com/swcarpentry/workshop
7
8 The “master” branch has the current state-of-the-art source for the
9 instructors' projected content, handouts, workshop homepage, ….  If we
10 can't agree on a canonical representation, there may be a handful of
11 feature branches with alternative content.
12
13 Topics will live in per-subject subdirectories, ideally organized in
14 half-day-sized chunks.
15
16   .
17   ├── README.md
18   ├── debugging
19   │   ├── README.md
20   │   …
21   ├── make
22   │   ├── README.md
23   │   ├── example-project
24   │   …
25   ├── python
26   │   ├── README.md
27   │   ├── animals.txt
28   │   …
29   ├── shell
30   │   …
31   ├── version-control
32   │   ├── git
33   │   │   ├── basic
34   │   │   │   …
35   │   │   └── advanced
36   …   …       …
37
38   Figure 1: Example directory tree for the current 2012-12-my-workshop
39   tip.  Sections should be in half-day-ish chunks.  Complicated topics
40   that need more detailed coverage (e.g. version control) can have
41   nested sub-sections.
42
43 An instructor preparing for a new workshop should create a
44 per-workshop branch from the master:
45
46   $ git checkout -b 2012-12-my-workshop master
47
48 and optionally merge feature branches they like:
49
50   $ git merge git-wtk
51
52 This gives a starting point for developing your workshop.
53
54   -o--o--o--o--o    origin/master    (same as local master)
55     \-o--o      \   origin/git-wtk
56           \------o  2012-12-my-workshop
57
58   Figure 2: Graph of commits for the beginning of the
59   2012-12-my-workshop branch.  Time increases to the right.  Commits
60   are marked with “o”.  ASCII art connects child commits with their
61   parents.  The merge of a well-maintained feature branch should be
62   painless.
63
64 If you don't like remote branches cluttering your local repo, you can
65 clone a single branch of the master repository using
66
67   $ git clone --single-branch …
68
69 Developing workshop content
70 ===========================
71
72 If you don't have strong ideas about the content, there's probably not
73 much to do here besides tweaking a few workshop-specific bits
74 (location, dates, master-index, …).  These changes should go into the
75 workshop branch:
76
77   -o--o--o--o--o          origin/master
78     \-o--o      \         origin/git-wtk
79           \------o--a--b  2012-12-my-workshop
80
81   Figure 2: Workshop-specific changes go into the workshop-specific
82   branch.  Example log:
83
84     commit  message
85     ------  -----------------------------------------------------
86     a       README.md: link to shell, git/basic, and git/advanced
87     b       README.md: localize for 2012-12 workshop at my house
88
89 If you want to change some of the general content, you have some
90 choices.
91
92 1. Make your change on the master branch (or the feature branch like
93    “git-wtk”).  Then pull your changes into your workshop branch and
94    make a pull request for inclusion in the master repository.
95
96                   /-a----\---\   typo-fix
97     -o--o--o--o--o--------\---c  origin/master
98       \-o--o      \        \     origin/git-wtk
99             \------o--o--o--b    2012-12-my-workshop
100
101     Figure 3: You can't push to master, so you made a new “typo-fix”
102     branch.  Later on, a SWC dev will merge it into master.  Example log:
103
104     commit  message
105     ------  --------------------------------------------------
106     a       git/basic: fix origin\master -> origin/master typo
107     b       merge recent master branch updates
108     c       git/basic: merge origin\master typo fix
109
110 2. If you really want to roll your own content, feel free to skip the
111    master branch entirely.
112
113     -o--o--o--o--o        origin/master
114       \-o--o              origin/git-wtk
115               I--o--o--a  2012-12-my-workshop
116
117     Figure 4: A disjoint branch (2012-12-my-workshop).  The commit “I”
118     has no parents.  Different branches stored in the same repository
119     don't need to share any common commits.  They're still addressing
120     the same goal, and having them in the same repo means its easier
121     to clone/fetch/diff/….
122
123 Publishing workshop websites
124 ============================
125
126 This is not really part of the workshop-branch vs. workshop-repo
127 discussion, but one benefit to the workshop-repo approach is that each
128 workshop may have a gh-pages website at
129
130   http://<user>.github.com/<repo>
131   http://swcarpentry.github.com/2012-12-my-workshop
132
133 In the workshop-branch approach, that website should probably live at
134
135   http://swcarpentry.github.com/workshop/2012-12-my-workshop
136
137 Keeping the master gh-pages branch up-to-date amongst several
138 simultaneous workshops may involve some submodule shenanigans [1].
139 However many instructors will not be SWC devs, so they'll just be
140 building their own workshop site from their workshop branch and
141 publishing it wherever they like (e.g. their department server,
142 personal GitHub account, …).
143
144 Post-workshop archival
145 ======================
146
147 The per-workshop branch is a clean record of how your source
148 developed.  A SWC dev that has been working on the master repository
149 directly should just tag your tip and delete the branch.  Git branches
150 are basically tags that move.  Once the workshop is done, there's no
151 need for its tip commit to change, so you might as well mark it with a
152 tag.
153
154 If your workshop branch has been living in your own personal
155 repository.  Submit a pull request to the master repo, and a SWC dev
156 will import your branch, tag the tip, and delete the branch for you.
157
158
159 [1]: There's a mock-up at https://github.com/wking/swc-workshop
160 [2]: https://github.com/wking/swc-workshop/blob/gh-pages/README