Autogenerated manpages for v2.35.1-225-ge2ac9
[git-manpages.git] / man7 / giteveryday.7
blob4f830c6c62e4c1d6732278d469d2799336f6dae2
1 '\" t
2 .\"     Title: giteveryday
3 .\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
4 .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
5 .\"      Date: 02/17/2022
6 .\"    Manual: Git Manual
7 .\"    Source: Git 2.35.1.225.ge2ac9141e6
8 .\"  Language: English
9 .\"
10 .TH "GITEVERYDAY" "7" "02/17/2022" "Git 2\&.35\&.1\&.225\&.ge2ac91" "Git Manual"
11 .\" -----------------------------------------------------------------
12 .\" * Define some portability stuff
13 .\" -----------------------------------------------------------------
14 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15 .\" http://bugs.debian.org/507673
16 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
17 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18 .ie \n(.g .ds Aq \(aq
19 .el       .ds Aq '
20 .\" -----------------------------------------------------------------
21 .\" * set default formatting
22 .\" -----------------------------------------------------------------
23 .\" disable hyphenation
24 .nh
25 .\" disable justification (adjust text to left margin only)
26 .ad l
27 .\" -----------------------------------------------------------------
28 .\" * MAIN CONTENT STARTS HERE *
29 .\" -----------------------------------------------------------------
30 .SH "NAME"
31 giteveryday \- A useful minimum set of commands for Everyday Git
32 .SH "SYNOPSIS"
33 .sp
34 Everyday Git With 20 Commands Or So
35 .SH "DESCRIPTION"
36 .sp
37 Git users can broadly be grouped into four categories for the purposes of describing here a small set of useful command for everyday Git\&.
38 .sp
39 .RS 4
40 .ie n \{\
41 \h'-04'\(bu\h'+03'\c
42 .\}
43 .el \{\
44 .sp -1
45 .IP \(bu 2.3
46 .\}
47 Individual Developer (Standalone)
48 commands are essential for anybody who makes a commit, even for somebody who works alone\&.
49 .RE
50 .sp
51 .RS 4
52 .ie n \{\
53 \h'-04'\(bu\h'+03'\c
54 .\}
55 .el \{\
56 .sp -1
57 .IP \(bu 2.3
58 .\}
59 If you work with other people, you will need commands listed in the
60 Individual Developer (Participant)
61 section as well\&.
62 .RE
63 .sp
64 .RS 4
65 .ie n \{\
66 \h'-04'\(bu\h'+03'\c
67 .\}
68 .el \{\
69 .sp -1
70 .IP \(bu 2.3
71 .\}
72 People who play the
73 Integrator
74 role need to learn some more commands in addition to the above\&.
75 .RE
76 .sp
77 .RS 4
78 .ie n \{\
79 \h'-04'\(bu\h'+03'\c
80 .\}
81 .el \{\
82 .sp -1
83 .IP \(bu 2.3
84 .\}
85 Repository Administration
86 commands are for system administrators who are responsible for the care and feeding of Git repositories\&.
87 .RE
88 .SH "INDIVIDUAL DEVELOPER (STANDALONE)"
89 .sp
90 A standalone individual developer does not exchange patches with other people, and works alone in a single repository, using the following commands\&.
91 .sp
92 .RS 4
93 .ie n \{\
94 \h'-04'\(bu\h'+03'\c
95 .\}
96 .el \{\
97 .sp -1
98 .IP \(bu 2.3
99 .\}
100 \fBgit-init\fR(1)
101 to create a new repository\&.
104 .RS 4
105 .ie n \{\
106 \h'-04'\(bu\h'+03'\c
108 .el \{\
109 .sp -1
110 .IP \(bu 2.3
112 \fBgit-log\fR(1)
113 to see what happened\&.
116 .RS 4
117 .ie n \{\
118 \h'-04'\(bu\h'+03'\c
120 .el \{\
121 .sp -1
122 .IP \(bu 2.3
124 \fBgit-switch\fR(1)
126 \fBgit-branch\fR(1)
127 to switch branches\&.
130 .RS 4
131 .ie n \{\
132 \h'-04'\(bu\h'+03'\c
134 .el \{\
135 .sp -1
136 .IP \(bu 2.3
138 \fBgit-add\fR(1)
139 to manage the index file\&.
142 .RS 4
143 .ie n \{\
144 \h'-04'\(bu\h'+03'\c
146 .el \{\
147 .sp -1
148 .IP \(bu 2.3
150 \fBgit-diff\fR(1)
152 \fBgit-status\fR(1)
153 to see what you are in the middle of doing\&.
156 .RS 4
157 .ie n \{\
158 \h'-04'\(bu\h'+03'\c
160 .el \{\
161 .sp -1
162 .IP \(bu 2.3
164 \fBgit-commit\fR(1)
165 to advance the current branch\&.
168 .RS 4
169 .ie n \{\
170 \h'-04'\(bu\h'+03'\c
172 .el \{\
173 .sp -1
174 .IP \(bu 2.3
176 \fBgit-restore\fR(1)
177 to undo changes\&.
180 .RS 4
181 .ie n \{\
182 \h'-04'\(bu\h'+03'\c
184 .el \{\
185 .sp -1
186 .IP \(bu 2.3
188 \fBgit-merge\fR(1)
189 to merge between local branches\&.
192 .RS 4
193 .ie n \{\
194 \h'-04'\(bu\h'+03'\c
196 .el \{\
197 .sp -1
198 .IP \(bu 2.3
200 \fBgit-rebase\fR(1)
201 to maintain topic branches\&.
204 .RS 4
205 .ie n \{\
206 \h'-04'\(bu\h'+03'\c
208 .el \{\
209 .sp -1
210 .IP \(bu 2.3
212 \fBgit-tag\fR(1)
213 to mark a known point\&.
215 .SS "Examples"
217 Use a tarball as a starting point for a new repository\&.
218 .RS 4
220 .if n \{\
221 .RS 4
224 $ tar zxf frotz\&.tar\&.gz
225 $ cd frotz
226 $ git init
227 $ git add \&. \fB(1)\fR
228 $ git commit \-m "import of frotz source tree\&."
229 $ git tag v2\&.43 \fB(2)\fR
231 .if n \{\
235 \fB1. \fRadd everything under the current directory\&.
237 \fB2. \fRmake a lightweight, unannotated tag\&.
241 Create a topic branch and develop\&.
242 .RS 4
244 .if n \{\
245 .RS 4
248 $ git switch \-c alsa\-audio \fB(1)\fR
249 $ edit/compile/test
250 $ git restore curses/ux_audio_oss\&.c \fB(2)\fR
251 $ git add curses/ux_audio_alsa\&.c \fB(3)\fR
252 $ edit/compile/test
253 $ git diff HEAD \fB(4)\fR
254 $ git commit \-a \-s \fB(5)\fR
255 $ edit/compile/test
256 $ git diff HEAD^ \fB(6)\fR
257 $ git commit \-a \-\-amend \fB(7)\fR
258 $ git switch master \fB(8)\fR
259 $ git merge alsa\-audio \fB(9)\fR
260 $ git log \-\-since=\(aq3 days ago\(aq \fB(10)\fR
261 $ git log v2\&.43\&.\&. curses/ \fB(11)\fR
263 .if n \{\
267 \fB1. \fRcreate a new topic branch\&.
269 \fB2. \fRrevert your botched changes in
270 \fBcurses/ux_audio_oss\&.c\fR\&.
272 \fB3. \fRyou need to tell Git if you added a new file; removal and modification will be caught if you do
273 \fBgit commit \-a\fR
274 later\&.
276 \fB4. \fRto see what changes you are committing\&.
278 \fB5. \fRcommit everything, as you have tested, with your sign\-off\&.
280 \fB6. \fRlook at all your changes including the previous commit\&.
282 \fB7. \fRamend the previous commit, adding all your new changes, using your original message\&.
284 \fB8. \fRswitch to the master branch\&.
286 \fB9. \fRmerge a topic branch into your master branch\&.
288 \fB10. \fRreview commit logs; other forms to limit output can be combined and include
289 \fB\-10\fR
290 (to show up to 10 commits),
291 \fB\-\-until=2005\-12\-10\fR, etc\&.
293 \fB11. \fRview only the changes that touch what\(cqs in
294 \fBcurses/\fR
295 directory, since
296 \fBv2\&.43\fR
297 tag\&.
300 .SH "INDIVIDUAL DEVELOPER (PARTICIPANT)"
302 A developer working as a participant in a group project needs to learn how to communicate with others, and uses these commands in addition to the ones needed by a standalone developer\&.
304 .RS 4
305 .ie n \{\
306 \h'-04'\(bu\h'+03'\c
308 .el \{\
309 .sp -1
310 .IP \(bu 2.3
312 \fBgit-clone\fR(1)
313 from the upstream to prime your local repository\&.
316 .RS 4
317 .ie n \{\
318 \h'-04'\(bu\h'+03'\c
320 .el \{\
321 .sp -1
322 .IP \(bu 2.3
324 \fBgit-pull\fR(1)
326 \fBgit-fetch\fR(1)
327 from "origin" to keep up\-to\-date with the upstream\&.
330 .RS 4
331 .ie n \{\
332 \h'-04'\(bu\h'+03'\c
334 .el \{\
335 .sp -1
336 .IP \(bu 2.3
338 \fBgit-push\fR(1)
339 to shared repository, if you adopt CVS style shared repository workflow\&.
342 .RS 4
343 .ie n \{\
344 \h'-04'\(bu\h'+03'\c
346 .el \{\
347 .sp -1
348 .IP \(bu 2.3
350 \fBgit-format-patch\fR(1)
351 to prepare e\-mail submission, if you adopt Linux kernel\-style public forum workflow\&.
354 .RS 4
355 .ie n \{\
356 \h'-04'\(bu\h'+03'\c
358 .el \{\
359 .sp -1
360 .IP \(bu 2.3
362 \fBgit-send-email\fR(1)
363 to send your e\-mail submission without corruption by your MUA\&.
366 .RS 4
367 .ie n \{\
368 \h'-04'\(bu\h'+03'\c
370 .el \{\
371 .sp -1
372 .IP \(bu 2.3
374 \fBgit-request-pull\fR(1)
375 to create a summary of changes for your upstream to pull\&.
377 .SS "Examples"
379 Clone the upstream and work on it\&. Feed changes to upstream\&.
380 .RS 4
382 .if n \{\
383 .RS 4
386 $ git clone git://git\&.kernel\&.org/pub/scm/\&.\&.\&./torvalds/linux\-2\&.6 my2\&.6
387 $ cd my2\&.6
388 $ git switch \-c mine master \fB(1)\fR
389 $ edit/compile/test; git commit \-a \-s \fB(2)\fR
390 $ git format\-patch master \fB(3)\fR
391 $ git send\-email \-\-to="person <email@example\&.com>" 00*\&.patch \fB(4)\fR
392 $ git switch master \fB(5)\fR
393 $ git pull \fB(6)\fR
394 $ git log \-p ORIG_HEAD\&.\&. arch/i386 include/asm\-i386 \fB(7)\fR
395 $ git ls\-remote \-\-heads http://git\&.kernel\&.org/\&.\&.\&./jgarzik/libata\-dev\&.git \fB(8)\fR
396 $ git pull git://git\&.kernel\&.org/pub/\&.\&.\&./jgarzik/libata\-dev\&.git ALL \fB(9)\fR
397 $ git reset \-\-hard ORIG_HEAD \fB(10)\fR
398 $ git gc \fB(11)\fR
400 .if n \{\
404 \fB1. \fRcheckout a new branch
405 \fBmine\fR
406 from master\&.
408 \fB2. \fRrepeat as needed\&.
410 \fB3. \fRextract patches from your branch, relative to master,
412 \fB4. \fRand email them\&.
414 \fB5. \fRreturn to
415 \fBmaster\fR, ready to see what\(cqs new
417 \fB6. \fR\fBgit pull\fR
418 fetches from
419 \fBorigin\fR
420 by default and merges into the current branch\&.
422 \fB7. \fRimmediately after pulling, look at the changes done upstream since last time we checked, only in the area we are interested in\&.
424 \fB8. \fRcheck the branch names in an external repository (if not known)\&.
426 \fB9. \fRfetch from a specific branch
427 \fBALL\fR
428 from a specific repository and merge it\&.
430 \fB10. \fRrevert the pull\&.
432 \fB11. \fRgarbage collect leftover objects from reverted pull\&.
436 Push into another repository\&.
437 .RS 4
439 .if n \{\
440 .RS 4
443 satellite$ git clone mothership:frotz frotz \fB(1)\fR
444 satellite$ cd frotz
445 satellite$ git config \-\-get\-regexp \(aq^(remote|branch)\e\&.\(aq \fB(2)\fR
446 remote\&.origin\&.url mothership:frotz
447 remote\&.origin\&.fetch refs/heads/*:refs/remotes/origin/*
448 branch\&.master\&.remote origin
449 branch\&.master\&.merge refs/heads/master
450 satellite$ git config remote\&.origin\&.push \e
451            +refs/heads/*:refs/remotes/satellite/* \fB(3)\fR
452 satellite$ edit/compile/test/commit
453 satellite$ git push origin \fB(4)\fR
455 mothership$ cd frotz
456 mothership$ git switch master
457 mothership$ git merge satellite/master \fB(5)\fR
459 .if n \{\
463 \fB1. \fRmothership machine has a frotz repository under your home directory; clone from it to start a repository on the satellite machine\&.
465 \fB2. \fRclone sets these configuration variables by default\&. It arranges
466 \fBgit pull\fR
467 to fetch and store the branches of mothership machine to local
468 \fBremotes/origin/*\fR
469 remote\-tracking branches\&.
471 \fB3. \fRarrange
472 \fBgit push\fR
473 to push all local branches to their corresponding branch of the mothership machine\&.
475 \fB4. \fRpush will stash all our work away on
476 \fBremotes/satellite/*\fR
477 remote\-tracking branches on the mothership machine\&. You could use this as a back\-up method\&. Likewise, you can pretend that mothership "fetched" from you (useful when access is one sided)\&.
479 \fB5. \fRon mothership machine, merge the work done on the satellite machine into the master branch\&.
483 Branch off of a specific tag\&.
484 .RS 4
486 .if n \{\
487 .RS 4
490 $ git switch \-c private2\&.6\&.14 v2\&.6\&.14 \fB(1)\fR
491 $ edit/compile/test; git commit \-a
492 $ git checkout master
493 $ git cherry\-pick v2\&.6\&.14\&.\&.private2\&.6\&.14 \fB(2)\fR
495 .if n \{\
499 \fB1. \fRcreate a private branch based on a well known (but somewhat behind) tag\&.
501 \fB2. \fRforward port all changes in
502 \fBprivate2\&.6\&.14\fR
503 branch to
504 \fBmaster\fR
505 branch without a formal "merging"\&. Or longhand
507 \fBgit format\-patch \-k \-m \-\-stdout v2\&.6\&.14\&.\&.private2\&.6\&.14 | git am \-3 \-k\fR
511 An alternate participant submission mechanism is using the \fBgit request\-pull\fR or pull\-request mechanisms (e\&.g as used on GitHub (www\&.github\&.com) to notify your upstream of your contribution\&.
512 .SH "INTEGRATOR"
514 A fairly central person acting as the integrator in a group project receives changes made by others, reviews and integrates them and publishes the result for others to use, using these commands in addition to the ones needed by participants\&.
516 This section can also be used by those who respond to \fBgit request\-pull\fR or pull\-request on GitHub (www\&.github\&.com) to integrate the work of others into their history\&. A sub\-area lieutenant for a repository will act both as a participant and as an integrator\&.
518 .RS 4
519 .ie n \{\
520 \h'-04'\(bu\h'+03'\c
522 .el \{\
523 .sp -1
524 .IP \(bu 2.3
526 \fBgit-am\fR(1)
527 to apply patches e\-mailed in from your contributors\&.
530 .RS 4
531 .ie n \{\
532 \h'-04'\(bu\h'+03'\c
534 .el \{\
535 .sp -1
536 .IP \(bu 2.3
538 \fBgit-pull\fR(1)
539 to merge from your trusted lieutenants\&.
542 .RS 4
543 .ie n \{\
544 \h'-04'\(bu\h'+03'\c
546 .el \{\
547 .sp -1
548 .IP \(bu 2.3
550 \fBgit-format-patch\fR(1)
551 to prepare and send suggested alternative to contributors\&.
554 .RS 4
555 .ie n \{\
556 \h'-04'\(bu\h'+03'\c
558 .el \{\
559 .sp -1
560 .IP \(bu 2.3
562 \fBgit-revert\fR(1)
563 to undo botched commits\&.
566 .RS 4
567 .ie n \{\
568 \h'-04'\(bu\h'+03'\c
570 .el \{\
571 .sp -1
572 .IP \(bu 2.3
574 \fBgit-push\fR(1)
575 to publish the bleeding edge\&.
577 .SS "Examples"
579 A typical integrator\(cqs Git day\&.
580 .RS 4
582 .if n \{\
583 .RS 4
586 $ git status \fB(1)\fR
587 $ git branch \-\-no\-merged master \fB(2)\fR
588 $ mailx \fB(3)\fR
589 & s 2 3 4 5 \&./+to\-apply
590 & s 7 8 \&./+hold\-linus
591 & q
592 $ git switch \-c topic/one master
593 $ git am \-3 \-i \-s \&./+to\-apply \fB(4)\fR
594 $ compile/test
595 $ git switch \-c hold/linus && git am \-3 \-i \-s \&./+hold\-linus \fB(5)\fR
596 $ git switch topic/one && git rebase master \fB(6)\fR
597 $ git switch \-C seen next \fB(7)\fR
598 $ git merge topic/one topic/two && git merge hold/linus \fB(8)\fR
599 $ git switch maint
600 $ git cherry\-pick master~4 \fB(9)\fR
601 $ compile/test
602 $ git tag \-s \-m "GIT 0\&.99\&.9x" v0\&.99\&.9x \fB(10)\fR
603 $ git fetch ko && for branch in master maint next seen \fB(11)\fR
604     do
605         git show\-branch ko/$branch $branch \fB(12)\fR
606     done
607 $ git push \-\-follow\-tags ko \fB(13)\fR
609 .if n \{\
613 \fB1. \fRsee what you were in the middle of doing, if anything\&.
615 \fB2. \fRsee which branches haven\(cqt been merged into
616 \fBmaster\fR
617 yet\&. Likewise for any other integration branches e\&.g\&.
618 \fBmaint\fR,
619 \fBnext\fR
621 \fBseen\fR\&.
623 \fB3. \fRread mails, save ones that are applicable, and save others that are not quite ready (other mail readers are available)\&.
625 \fB4. \fRapply them, interactively, with your sign\-offs\&.
627 \fB5. \fRcreate topic branch as needed and apply, again with sign\-offs\&.
629 \fB6. \fRrebase internal topic branch that has not been merged to the master or exposed as a part of a stable branch\&.
631 \fB7. \fRrestart
632 \fBseen\fR
633 every time from the next\&.
635 \fB8. \fRand bundle topic branches still cooking\&.
637 \fB9. \fRbackport a critical fix\&.
639 \fB10. \fRcreate a signed tag\&.
641 \fB11. \fRmake sure master was not accidentally rewound beyond that already pushed out\&.
643 \fB12. \fRIn the output from
644 \fBgit show\-branch\fR,
645 \fBmaster\fR
646 should have everything
647 \fBko/master\fR
648 has, and
649 \fBnext\fR
650 should have everything
651 \fBko/next\fR
652 has, etc\&.
654 \fB13. \fRpush out the bleeding edge, together with new tags that point into the pushed history\&.
658 In this example, the \fBko\fR shorthand points at the Git maintainer\(cqs repository at kernel\&.org, and looks like this:
660 .if n \{\
661 .RS 4
664 (in \&.git/config)
665 [remote "ko"]
666         url = kernel\&.org:/pub/scm/git/git\&.git
667         fetch = refs/heads/*:refs/remotes/ko/*
668         push = refs/heads/master
669         push = refs/heads/next
670         push = +refs/heads/seen
671         push = refs/heads/maint
673 .if n \{\
677 .SH "REPOSITORY ADMINISTRATION"
679 A repository administrator uses the following tools to set up and maintain access to the repository by developers\&.
681 .RS 4
682 .ie n \{\
683 \h'-04'\(bu\h'+03'\c
685 .el \{\
686 .sp -1
687 .IP \(bu 2.3
689 \fBgit-daemon\fR(1)
690 to allow anonymous download from repository\&.
693 .RS 4
694 .ie n \{\
695 \h'-04'\(bu\h'+03'\c
697 .el \{\
698 .sp -1
699 .IP \(bu 2.3
701 \fBgit-shell\fR(1)
702 can be used as a
703 \fIrestricted login shell\fR
704 for shared central repository users\&.
707 .RS 4
708 .ie n \{\
709 \h'-04'\(bu\h'+03'\c
711 .el \{\
712 .sp -1
713 .IP \(bu 2.3
715 \fBgit-http-backend\fR(1)
716 provides a server side implementation of Git\-over\-HTTP ("Smart http") allowing both fetch and push services\&.
719 .RS 4
720 .ie n \{\
721 \h'-04'\(bu\h'+03'\c
723 .el \{\
724 .sp -1
725 .IP \(bu 2.3
727 \fBgitweb\fR(1)
728 provides a web front\-end to Git repositories, which can be set\-up using the
729 \fBgit-instaweb\fR(1)
730 script\&.
733 \m[blue]\fBupdate hook howto\fR\m[]\&\s-2\u[1]\d\s+2 has a good example of managing a shared central repository\&.
735 In addition there are a number of other widely deployed hosting, browsing and reviewing solutions such as:
737 .RS 4
738 .ie n \{\
739 \h'-04'\(bu\h'+03'\c
741 .el \{\
742 .sp -1
743 .IP \(bu 2.3
745 gitolite, gerrit code review, cgit and others\&.
747 .SS "Examples"
749 We assume the following in /etc/services
750 .RS 4
752 .if n \{\
753 .RS 4
756 $ grep 9418 /etc/services
757 git             9418/tcp                # Git Version Control System
759 .if n \{\
765 Run git\-daemon to serve /pub/scm from inetd\&.
766 .RS 4
768 .if n \{\
769 .RS 4
772 $ grep git /etc/inetd\&.conf
773 git     stream  tcp     nowait  nobody \e
774   /usr/bin/git\-daemon git\-daemon \-\-inetd \-\-export\-all /pub/scm
776 .if n \{\
780 The actual configuration line should be on one line\&.
783 Run git\-daemon to serve /pub/scm from xinetd\&.
784 .RS 4
786 .if n \{\
787 .RS 4
790 $ cat /etc/xinetd\&.d/git\-daemon
791 # default: off
792 # description: The Git server offers access to Git repositories
793 service git
795         disable = no
796         type            = UNLISTED
797         port            = 9418
798         socket_type     = stream
799         wait            = no
800         user            = nobody
801         server          = /usr/bin/git\-daemon
802         server_args     = \-\-inetd \-\-export\-all \-\-base\-path=/pub/scm
803         log_on_failure  += USERID
806 .if n \{\
810 Check your xinetd(8) documentation and setup, this is from a Fedora system\&. Others might be different\&.
813 Give push/pull only access to developers using git\-over\-ssh\&.
814 .RS 4
815 e\&.g\&. those using:
816 \fB$ git push/pull ssh://host\&.xz/pub/scm/project\fR
818 .if n \{\
819 .RS 4
822 $ grep git /etc/passwd \fB(1)\fR
823 alice:x:1000:1000::/home/alice:/usr/bin/git\-shell
824 bob:x:1001:1001::/home/bob:/usr/bin/git\-shell
825 cindy:x:1002:1002::/home/cindy:/usr/bin/git\-shell
826 david:x:1003:1003::/home/david:/usr/bin/git\-shell
827 $ grep git /etc/shells \fB(2)\fR
828 /usr/bin/git\-shell
830 .if n \{\
834 \fB1. \fRlog\-in shell is set to /usr/bin/git\-shell, which does not allow anything but
835 \fBgit push\fR
837 \fBgit pull\fR\&. The users require ssh access to the machine\&.
839 \fB2. \fRin many distributions /etc/shells needs to list what is used as the login shell\&.
843 CVS\-style shared repository\&.
844 .RS 4
846 .if n \{\
847 .RS 4
850 $ grep git /etc/group \fB(1)\fR
851 git:x:9418:alice,bob,cindy,david
852 $ cd /home/devo\&.git
853 $ ls \-l \fB(2)\fR
854   lrwxrwxrwx   1 david git    17 Dec  4 22:40 HEAD \-> refs/heads/master
855   drwxrwsr\-x   2 david git  4096 Dec  4 22:40 branches
856   \-rw\-rw\-r\-\-   1 david git    84 Dec  4 22:40 config
857   \-rw\-rw\-r\-\-   1 david git    58 Dec  4 22:40 description
858   drwxrwsr\-x   2 david git  4096 Dec  4 22:40 hooks
859   \-rw\-rw\-r\-\-   1 david git 37504 Dec  4 22:40 index
860   drwxrwsr\-x   2 david git  4096 Dec  4 22:40 info
861   drwxrwsr\-x   4 david git  4096 Dec  4 22:40 objects
862   drwxrwsr\-x   4 david git  4096 Nov  7 14:58 refs
863   drwxrwsr\-x   2 david git  4096 Dec  4 22:40 remotes
864 $ ls \-l hooks/update \fB(3)\fR
865   \-r\-xr\-xr\-x   1 david git  3536 Dec  4 22:40 update
866 $ cat info/allowed\-users \fB(4)\fR
867 refs/heads/master       alice\e|cindy
868 refs/heads/doc\-update   bob
869 refs/tags/v[0\-9]*       david
871 .if n \{\
875 \fB1. \fRplace the developers into the same git group\&.
877 \fB2. \fRand make the shared repository writable by the group\&.
879 \fB3. \fRuse update\-hook example by Carl from Documentation/howto/ for branch policy control\&.
881 \fB4. \fRalice and cindy can push into master, only bob can push into doc\-update\&. david is the release manager and is the only person who can create and push version tags\&.
884 .SH "GIT"
886 Part of the \fBgit\fR(1) suite
887 .SH "NOTES"
888 .IP " 1." 4
889 update hook howto
890 .RS 4
891 \%git-htmldocs/howto/update-hook-example.html