committer(7): Add some lines about MFCing.
[dragonfly.git] / share / man / man7 / committer.7
... / ...
CommitLineData
1.\" Copyright (c) 2003,2004 The DragonFly Project. All rights reserved.
2.\"
3.\" This code is derived from software contributed to The DragonFly Project
4.\" by Matthew Dillon <dillon@backplane.com>
5.\"
6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that the following conditions
8.\" are met:
9.\"
10.\" 1. Redistributions of source code must retain the above copyright
11.\" notice, this list of conditions and the following disclaimer.
12.\" 2. Redistributions in binary form must reproduce the above copyright
13.\" notice, this list of conditions and the following disclaimer in
14.\" the documentation and/or other materials provided with the
15.\" distribution.
16.\" 3. Neither the name of The DragonFly Project nor the names of its
17.\" contributors may be used to endorse or promote products derived
18.\" from this software without specific, prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
26.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
30.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31.\" SUCH DAMAGE.
32.\"
33.\" $DragonFly: src/share/man/man7/committer.7,v 1.11 2008/05/02 02:05:06 swildner Exp $
34.\"
35.Dd February 22, 2009
36.Dt COMMITTER 7
37.Os
38.Sh NAME
39.Nm committer
40.Nd rules for DragonFly committers
41.Sh GIT REPOSITORY ON YOUR LOCAL MACHINE
42See
43.Xr development 7
44how to obtain a fresh copy of the
45.Dx
46git repository on your machine.
47Note that all developers have to pull/push through
48.Xr ssh 1 .
49Your
50.Pa ~/.gitconfig
51should contain at least:
52.Bd -literal -offset indent
53[user]
54 name = Your Name
55 email = <login>@dragonflybsd.org
56.Ed
57.Pp
58Alternatively, see the
59.Va user.name
60and
61.Va user.email
62variables in
63.Xr git-config 1 .
64.Sh SSH DSA KEYS
65The git repository machine is
66.Pa crater.dragonflybsd.org ,
67and the
68.Dx
69developer machine is
70.Pa leaf.dragonflybsd.org .
71We create
72an account for you on both machines and install your public SSH
73key to give you access.
74.Pp
75Your
76.Pa crater
77account is set up for git repository only.
78It can only operate as a git slave and cannot be logged into.
79That is,
80.Pa crater.dragonflybsd.org
81is only used as part of
82.Nm git Cm push
83operations.
84.Pp
85Your
86.Pa leaf
87account is a general developer account.
88Any
89.Dx
90developer can have a
91.Pa leaf
92account, whether a committer or not.
93It can be useful as a developer rendezvous,
94however.
95For example, people upload kernel cores to
96.Pa leaf
97so other
98developers can look at them.
99You log into your
100.Pa leaf
101account with:
102.Bd -literal -offset indent
103ssh you@leaf.dragonflybsd.org
104.Ed
105.Pp
106The rules for account use are in
107.Pa leaf Ap s
108MOTD.
109It is very important that you never install a password or create a SSH
110key pair on
111.Pa leaf
112to use to access other machines.
113Because non-committers can have
114.Pa leaf
115accounts,
116.Pa leaf
117is not considered a secure machine.
118.Sh TESTING COMMIT ACCESS
119There is a directory called
120.Pa /usr/src/test/test .
121To test your commit
122access, try making a modification and committing a file in this
123directory.
124Try to push the commit to
125.Pa crater
126afterwards.
127.Bd -literal -offset indent
128cd /usr/src/test/test
129(edit something)
130git commit file_you_edited
131git push crater
132.Ed
133.Sh COMMITTING REAL WORK
134Make modifications as needed.
135For example, edit files.
136If adding new files make git aware of them like this.
137Files and directories can just be added locally.
138These operations do not actually affect the master repository.
139Instead they are stored in your local copy of the repository and then
140synchronized to the repository when you
141.Nm git Cm push .
142.Bd -literal -offset indent
143git add filename
144git commit filename
145.Ed
146.Pp
147To actually push your changes to the the repository on
148.Pa crater ,
149use:
150.Bd -literal -offset indent
151git push crater
152.Ed
153.Pp
154To merge bug fixes to other branches (MFC), use
155.Nm git Cm cherry-pick :
156.Bd -literal -offset indent
157git checkout -b rel2_2 crater/DragonFly_RELEASE_2_2
158git cherry-pick <commit>...
159git push crater rel2_2:DragonFly_RELEASE_2_2
160.Ed
161.Pp
162Do not set the default remote tag to
163.Pa origin .
164It is set to
165.Pa crater
166by default.
167This reduces instances where accidental commits or repository
168operations are made on the master repository.
169.Sh STRUCTURE OF COMMIT MESSAGES
170As many
171.Xr git 1
172tools display the first line of a commit message as a summary,
173structure your commit messages like this, if possible:
174.Bd -literal -offset indent
175One line summary of your change.
176
177Maybe more text here describing your changes in detail (including
178issue tracker id's etc).
179.Ed
180.Sh DISCUSSING COMMITTABLE WORK BEFOREHAND
181Discussion prior to committing usually occurs on the
182.Pa kernel@ ,
183.Pa submit@ ,
184or
185.Pa bugs@
186mailing lists and depends on the work involved.
187Simple and obvious work such as documentation edits or additions,
188doesn't really need a heads up.
189.Pp
190Simple and obvious bug fixes don't need a heads up either, other than to
191say that you will (or just have) committed the fix, so you don't
192race other committers trying to do the same thing.
193Usually the developer most active in a discussion about a bug commits the
194fix, but it isn't considered a big deal.
195.Pp
196More complex issues are usually discussed on the lists first.
197Non-trivial but straight forward bug fixes usually go through
198a testing period, where you say something like:
199.Do
200Here is a patch
201to driver BLAH that fixes A, B, and C, please test it.
202If there are no objections I will commit it next Tuesday.
203.Dc
204(usually a week,
205or more depending on the complexity of the patch).
206.Pp
207New drivers or utilities are usually discussed.
208Committers will often commit new work
209.Em without
210hooking it into the buildworld or
211buildkernel infrastructure in order to be able to continue
212development on it in piecemeal without having to worry about it
213breaking buildworld or buildkernel, and then they hook it in as a
214last step after they've stabilized it.
215Examples of this include
216new versions of GCC, updates to vendor packages such as bind,
217sendmail, etc.
218.Sh SOURCE OWNERSHIP
219Areas within the repository do not
220.Dq belong
221to any committer.
222Often situations will arise where one developer commits work and
223another developer finds an issue with it that needs to be corrected.
224.Pp
225All committed work becomes community property.
226No developer has a
227.Dq lock
228on any part of the source tree.
229However, if a developer is
230actively working on a portion of the source tree and you find a bug
231or other issue, courtesy dictates that you post to
232.Pa kernel@
233and/or email the developer.
234.Pp
235This means that, generally, if you do not see a commit to an area
236of the source tree in the last few weeks, it isn't considered active and
237you don't really need to confer with the developer that made the
238commit, though you should still post to the
239.Pa kernel@
240mailing list and, of course, confer with developers when their expertise
241is needed.
242.Pp
243One exception to this rule is documentation.
244If any developer commits
245new work, the documentation guys have free reign to go in and correct
246.Xr mdoc 7
247errors.
248This is really a convenience as most developers are not
249.Xr mdoc 7
250gurus and it's a waste of time for the doc guys to post to
251.Pa kernel@
252for all the little corrections they make.
253.Sh CONFLICTS
254On the occasion that a major code conflict occurs, for example if two
255people are doing major work in the same area of the source tree and forgot
256to collaborate with each other, the project leader will be responsible for
257resolving the conflict.
258Again, the repository is considered community
259property and it must be acceptable for any developer to be able to work on
260any area of the tree that he or she has an interest in.
261.Sh MAJOR ARCHITECTURAL CHANGES
262This is generally
263.An Matt Dillon Ap s
264area of expertise.
265All major architectural changes must be discussed on the
266.Pa kernel@
267mailing list and he retains veto power.
268.Pp
269This isn't usually an issue with any work.
270At best if something
271doesn't look right architecturally he'll chip in with adjustments to
272make it fit in.
273Nothing ever really gets vetoed.
274.Sh SEE ALSO
275.Xr git 1 Pq Pa pkgsrc/devel/scmgit ,
276.Xr development 7