Spaces:
Running
Running
text-generation-webui
/
installer_files
/conda
/pkgs
/git-2.40.1-pl5340h36fbf9e_1
/man
/man7
/giteveryday.7
'\" t | |
.\" Title: giteveryday | |
.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] | |
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> | |
.\" Date: 04/24/2023 | |
.\" Manual: Git Manual | |
.\" Source: Git 2.40.1 | |
.\" Language: English | |
.\" | |
.TH "GITEVERYDAY" "7" "04/24/2023" "Git 2\&.40\&.1" "Git Manual" | |
.\" ----------------------------------------------------------------- | |
.\" * Define some portability stuff | |
.\" ----------------------------------------------------------------- | |
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
.\" http://bugs.debian.org/507673 | |
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html | |
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
.ie \n(.g .ds Aq \(aq | |
.el .ds Aq ' | |
.\" ----------------------------------------------------------------- | |
.\" * set default formatting | |
.\" ----------------------------------------------------------------- | |
.\" disable hyphenation | |
.nh | |
.\" disable justification (adjust text to left margin only) | |
.ad l | |
.\" ----------------------------------------------------------------- | |
.\" * MAIN CONTENT STARTS HERE * | |
.\" ----------------------------------------------------------------- | |
.SH "NAME" | |
giteveryday \- A useful minimum set of commands for Everyday Git | |
.SH "SYNOPSIS" | |
.sp | |
Everyday Git With 20 Commands Or So | |
.SH "DESCRIPTION" | |
.sp | |
Git users can broadly be grouped into four categories for the purposes of describing here a small set of useful command for everyday Git\&. | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
Individual Developer (Standalone) | |
commands are essential for anybody who makes a commit, even for somebody who works alone\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
If you work with other people, you will need commands listed in the | |
Individual Developer (Participant) | |
section as well\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
People who play the | |
Integrator | |
role need to learn some more commands in addition to the above\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
Repository Administration | |
commands are for system administrators who are responsible for the care and feeding of Git repositories\&. | |
.RE | |
.SH "INDIVIDUAL DEVELOPER (STANDALONE)" | |
.sp | |
A standalone individual developer does not exchange patches with other people, and works alone in a single repository, using the following commands\&. | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-init\fR(1) | |
to create a new repository\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-log\fR(1) | |
to see what happened\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-switch\fR(1) | |
and | |
\fBgit-branch\fR(1) | |
to switch branches\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-add\fR(1) | |
to manage the index file\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-diff\fR(1) | |
and | |
\fBgit-status\fR(1) | |
to see what you are in the middle of doing\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-commit\fR(1) | |
to advance the current branch\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-restore\fR(1) | |
to undo changes\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-merge\fR(1) | |
to merge between local branches\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-rebase\fR(1) | |
to maintain topic branches\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-tag\fR(1) | |
to mark a known point\&. | |
.RE | |
.SS "Examples" | |
.PP | |
Use a tarball as a starting point for a new repository\&. | |
.RS 4 | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
$ tar zxf frotz\&.tar\&.gz | |
$ cd frotz | |
$ git init | |
$ git add \&. \fB(1)\fR | |
$ git commit \-m "import of frotz source tree\&." | |
$ git tag v2\&.43 \fB(2)\fR | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
\fB1. \fRadd everything under the current directory\&. | |
.br | |
\fB2. \fRmake a lightweight, unannotated tag\&. | |
.br | |
.RE | |
.PP | |
Create a topic branch and develop\&. | |
.RS 4 | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
$ git switch \-c alsa\-audio \fB(1)\fR | |
$ edit/compile/test | |
$ git restore curses/ux_audio_oss\&.c \fB(2)\fR | |
$ git add curses/ux_audio_alsa\&.c \fB(3)\fR | |
$ edit/compile/test | |
$ git diff HEAD \fB(4)\fR | |
$ git commit \-a \-s \fB(5)\fR | |
$ edit/compile/test | |
$ git diff HEAD^ \fB(6)\fR | |
$ git commit \-a \-\-amend \fB(7)\fR | |
$ git switch master \fB(8)\fR | |
$ git merge alsa\-audio \fB(9)\fR | |
$ git log \-\-since=\*(Aq3 days ago\*(Aq \fB(10)\fR | |
$ git log v2\&.43\&.\&. curses/ \fB(11)\fR | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
\fB1. \fRcreate a new topic branch\&. | |
.br | |
\fB2. \fRrevert your botched changes in | |
\fBcurses/ux_audio_oss\&.c\fR\&. | |
.br | |
\fB3. \fRyou need to tell Git if you added a new file; removal and modification will be caught if you do | |
\fBgit commit \-a\fR | |
later\&. | |
.br | |
\fB4. \fRto see what changes you are committing\&. | |
.br | |
\fB5. \fRcommit everything, as you have tested, with your sign\-off\&. | |
.br | |
\fB6. \fRlook at all your changes including the previous commit\&. | |
.br | |
\fB7. \fRamend the previous commit, adding all your new changes, using your original message\&. | |
.br | |
\fB8. \fRswitch to the master branch\&. | |
.br | |
\fB9. \fRmerge a topic branch into your master branch\&. | |
.br | |
\fB10. \fRreview commit logs; other forms to limit output can be combined and include | |
\fB\-10\fR | |
(to show up to 10 commits), | |
\fB\-\-until=2005\-12\-10\fR, etc\&. | |
.br | |
\fB11. \fRview only the changes that touch what\(cqs in | |
\fBcurses/\fR | |
directory, since | |
\fBv2\&.43\fR | |
tag\&. | |
.br | |
.RE | |
.SH "INDIVIDUAL DEVELOPER (PARTICIPANT)" | |
.sp | |
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\&. | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-clone\fR(1) | |
from the upstream to prime your local repository\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-pull\fR(1) | |
and | |
\fBgit-fetch\fR(1) | |
from "origin" to keep up\-to\-date with the upstream\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-push\fR(1) | |
to shared repository, if you adopt CVS style shared repository workflow\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-format-patch\fR(1) | |
to prepare e\-mail submission, if you adopt Linux kernel\-style public forum workflow\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-send-email\fR(1) | |
to send your e\-mail submission without corruption by your MUA\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-request-pull\fR(1) | |
to create a summary of changes for your upstream to pull\&. | |
.RE | |
.SS "Examples" | |
.PP | |
Clone the upstream and work on it\&. Feed changes to upstream\&. | |
.RS 4 | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
$ git clone git://git\&.kernel\&.org/pub/scm/\&.\&.\&./torvalds/linux\-2\&.6 my2\&.6 | |
$ cd my2\&.6 | |
$ git switch \-c mine master \fB(1)\fR | |
$ edit/compile/test; git commit \-a \-s \fB(2)\fR | |
$ git format\-patch master \fB(3)\fR | |
$ git send\-email \-\-to="person <email@example\&.com>" 00*\&.patch \fB(4)\fR | |
$ git switch master \fB(5)\fR | |
$ git pull \fB(6)\fR | |
$ git log \-p ORIG_HEAD\&.\&. arch/i386 include/asm\-i386 \fB(7)\fR | |
$ git ls\-remote \-\-heads http://git\&.kernel\&.org/\&.\&.\&./jgarzik/libata\-dev\&.git \fB(8)\fR | |
$ git pull git://git\&.kernel\&.org/pub/\&.\&.\&./jgarzik/libata\-dev\&.git ALL \fB(9)\fR | |
$ git reset \-\-hard ORIG_HEAD \fB(10)\fR | |
$ git gc \fB(11)\fR | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
\fB1. \fRcheckout a new branch | |
\fBmine\fR | |
from master\&. | |
.br | |
\fB2. \fRrepeat as needed\&. | |
.br | |
\fB3. \fRextract patches from your branch, relative to master, | |
.br | |
\fB4. \fRand email them\&. | |
.br | |
\fB5. \fRreturn to | |
\fBmaster\fR, ready to see what\(cqs new | |
.br | |
\fB6. \fR\fBgit pull\fR | |
fetches from | |
\fBorigin\fR | |
by default and merges into the current branch\&. | |
.br | |
\fB7. \fRimmediately after pulling, look at the changes done upstream since last time we checked, only in the area we are interested in\&. | |
.br | |
\fB8. \fRcheck the branch names in an external repository (if not known)\&. | |
.br | |
\fB9. \fRfetch from a specific branch | |
\fBALL\fR | |
from a specific repository and merge it\&. | |
.br | |
\fB10. \fRrevert the pull\&. | |
.br | |
\fB11. \fRgarbage collect leftover objects from reverted pull\&. | |
.br | |
.RE | |
.PP | |
Push into another repository\&. | |
.RS 4 | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
satellite$ git clone mothership:frotz frotz \fB(1)\fR | |
satellite$ cd frotz | |
satellite$ git config \-\-get\-regexp \*(Aq^(remote|branch)\e\&.\*(Aq \fB(2)\fR | |
remote\&.origin\&.url mothership:frotz | |
remote\&.origin\&.fetch refs/heads/*:refs/remotes/origin/* | |
branch\&.master\&.remote origin | |
branch\&.master\&.merge refs/heads/master | |
satellite$ git config remote\&.origin\&.push \e | |
+refs/heads/*:refs/remotes/satellite/* \fB(3)\fR | |
satellite$ edit/compile/test/commit | |
satellite$ git push origin \fB(4)\fR | |
mothership$ cd frotz | |
mothership$ git switch master | |
mothership$ git merge satellite/master \fB(5)\fR | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
\fB1. \fRmothership machine has a frotz repository under your home directory; clone from it to start a repository on the satellite machine\&. | |
.br | |
\fB2. \fRclone sets these configuration variables by default\&. It arranges | |
\fBgit pull\fR | |
to fetch and store the branches of mothership machine to local | |
\fBremotes/origin/*\fR | |
remote\-tracking branches\&. | |
.br | |
\fB3. \fRarrange | |
\fBgit push\fR | |
to push all local branches to their corresponding branch of the mothership machine\&. | |
.br | |
\fB4. \fRpush will stash all our work away on | |
\fBremotes/satellite/*\fR | |
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)\&. | |
.br | |
\fB5. \fRon mothership machine, merge the work done on the satellite machine into the master branch\&. | |
.br | |
.RE | |
.PP | |
Branch off of a specific tag\&. | |
.RS 4 | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
$ git switch \-c private2\&.6\&.14 v2\&.6\&.14 \fB(1)\fR | |
$ edit/compile/test; git commit \-a | |
$ git checkout master | |
$ git cherry\-pick v2\&.6\&.14\&.\&.private2\&.6\&.14 \fB(2)\fR | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
\fB1. \fRcreate a private branch based on a well known (but somewhat behind) tag\&. | |
.br | |
\fB2. \fRforward port all changes in | |
\fBprivate2\&.6\&.14\fR | |
branch to | |
\fBmaster\fR | |
branch without a formal "merging"\&. Or longhand | |
\fBgit format\-patch \-k \-m \-\-stdout v2\&.6\&.14\&.\&.private2\&.6\&.14 | git am \-3 \-k\fR | |
.br | |
.RE | |
.sp | |
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\&. | |
.SH "INTEGRATOR" | |
.sp | |
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\&. | |
.sp | |
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\&. | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-am\fR(1) | |
to apply patches e\-mailed in from your contributors\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-pull\fR(1) | |
to merge from your trusted lieutenants\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-format-patch\fR(1) | |
to prepare and send suggested alternative to contributors\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-revert\fR(1) | |
to undo botched commits\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-push\fR(1) | |
to publish the bleeding edge\&. | |
.RE | |
.SS "Examples" | |
.PP | |
A typical integrator\(cqs Git day\&. | |
.RS 4 | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
$ git status \fB(1)\fR | |
$ git branch \-\-no\-merged master \fB(2)\fR | |
$ mailx \fB(3)\fR | |
& s 2 3 4 5 \&./+to\-apply | |
& s 7 8 \&./+hold\-linus | |
& q | |
$ git switch \-c topic/one master | |
$ git am \-3 \-i \-s \&./+to\-apply \fB(4)\fR | |
$ compile/test | |
$ git switch \-c hold/linus && git am \-3 \-i \-s \&./+hold\-linus \fB(5)\fR | |
$ git switch topic/one && git rebase master \fB(6)\fR | |
$ git switch \-C seen next \fB(7)\fR | |
$ git merge topic/one topic/two && git merge hold/linus \fB(8)\fR | |
$ git switch maint | |
$ git cherry\-pick master~4 \fB(9)\fR | |
$ compile/test | |
$ git tag \-s \-m "GIT 0\&.99\&.9x" v0\&.99\&.9x \fB(10)\fR | |
$ git fetch ko && for branch in master maint next seen \fB(11)\fR | |
do | |
git show\-branch ko/$branch $branch \fB(12)\fR | |
done | |
$ git push \-\-follow\-tags ko \fB(13)\fR | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
\fB1. \fRsee what you were in the middle of doing, if anything\&. | |
.br | |
\fB2. \fRsee which branches haven\(cqt been merged into | |
\fBmaster\fR | |
yet\&. Likewise for any other integration branches e\&.g\&. | |
\fBmaint\fR, | |
\fBnext\fR | |
and | |
\fBseen\fR\&. | |
.br | |
\fB3. \fRread mails, save ones that are applicable, and save others that are not quite ready (other mail readers are available)\&. | |
.br | |
\fB4. \fRapply them, interactively, with your sign\-offs\&. | |
.br | |
\fB5. \fRcreate topic branch as needed and apply, again with sign\-offs\&. | |
.br | |
\fB6. \fRrebase internal topic branch that has not been merged to the master or exposed as a part of a stable branch\&. | |
.br | |
\fB7. \fRrestart | |
\fBseen\fR | |
every time from the next\&. | |
.br | |
\fB8. \fRand bundle topic branches still cooking\&. | |
.br | |
\fB9. \fRbackport a critical fix\&. | |
.br | |
\fB10. \fRcreate a signed tag\&. | |
.br | |
\fB11. \fRmake sure master was not accidentally rewound beyond that already pushed out\&. | |
.br | |
\fB12. \fRIn the output from | |
\fBgit show\-branch\fR, | |
\fBmaster\fR | |
should have everything | |
\fBko/master\fR | |
has, and | |
\fBnext\fR | |
should have everything | |
\fBko/next\fR | |
has, etc\&. | |
.br | |
\fB13. \fRpush out the bleeding edge, together with new tags that point into the pushed history\&. | |
.br | |
.RE | |
.sp | |
In this example, the \fBko\fR shorthand points at the Git maintainer\(cqs repository at kernel\&.org, and looks like this: | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
(in \&.git/config) | |
[remote "ko"] | |
url = kernel\&.org:/pub/scm/git/git\&.git | |
fetch = refs/heads/*:refs/remotes/ko/* | |
push = refs/heads/master | |
push = refs/heads/next | |
push = +refs/heads/seen | |
push = refs/heads/maint | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
.SH "REPOSITORY ADMINISTRATION" | |
.sp | |
A repository administrator uses the following tools to set up and maintain access to the repository by developers\&. | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-daemon\fR(1) | |
to allow anonymous download from repository\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-shell\fR(1) | |
can be used as a | |
\fIrestricted login shell\fR | |
for shared central repository users\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgit-http-backend\fR(1) | |
provides a server side implementation of Git\-over\-HTTP ("Smart http") allowing both fetch and push services\&. | |
.RE | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
\fBgitweb\fR(1) | |
provides a web front\-end to Git repositories, which can be set\-up using the | |
\fBgit-instaweb\fR(1) | |
script\&. | |
.RE | |
.sp | |
\m[blue]\fBupdate hook howto\fR\m[]\&\s-2\u[1]\d\s+2 has a good example of managing a shared central repository\&. | |
.sp | |
In addition there are a number of other widely deployed hosting, browsing and reviewing solutions such as: | |
.sp | |
.RS 4 | |
.ie n \{\ | |
\h'-04'\(bu\h'+03'\c | |
.\} | |
.el \{\ | |
.sp -1 | |
.IP \(bu 2.3 | |
.\} | |
gitolite, gerrit code review, cgit and others\&. | |
.RE | |
.SS "Examples" | |
.PP | |
We assume the following in /etc/services | |
.RS 4 | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
$ grep 9418 /etc/services | |
git 9418/tcp # Git Version Control System | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
.RE | |
.PP | |
Run git\-daemon to serve /pub/scm from inetd\&. | |
.RS 4 | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
$ grep git /etc/inetd\&.conf | |
git stream tcp nowait nobody \e | |
/usr/bin/git\-daemon git\-daemon \-\-inetd \-\-export\-all /pub/scm | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
The actual configuration line should be on one line\&. | |
.RE | |
.PP | |
Run git\-daemon to serve /pub/scm from xinetd\&. | |
.RS 4 | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
$ cat /etc/xinetd\&.d/git\-daemon | |
# default: off | |
# description: The Git server offers access to Git repositories | |
service git | |
{ | |
disable = no | |
type = UNLISTED | |
port = 9418 | |
socket_type = stream | |
wait = no | |
user = nobody | |
server = /usr/bin/git\-daemon | |
server_args = \-\-inetd \-\-export\-all \-\-base\-path=/pub/scm | |
log_on_failure += USERID | |
} | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
Check your xinetd(8) documentation and setup, this is from a Fedora system\&. Others might be different\&. | |
.RE | |
.PP | |
Give push/pull only access to developers using git\-over\-ssh\&. | |
.RS 4 | |
e\&.g\&. those using: | |
\fB$ git push/pull ssh://host\&.xz/pub/scm/project\fR | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
$ grep git /etc/passwd \fB(1)\fR | |
alice:x:1000:1000::/home/alice:/usr/bin/git\-shell | |
bob:x:1001:1001::/home/bob:/usr/bin/git\-shell | |
cindy:x:1002:1002::/home/cindy:/usr/bin/git\-shell | |
david:x:1003:1003::/home/david:/usr/bin/git\-shell | |
$ grep git /etc/shells \fB(2)\fR | |
/usr/bin/git\-shell | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
\fB1. \fRlog\-in shell is set to /usr/bin/git\-shell, which does not allow anything but | |
\fBgit push\fR | |
and | |
\fBgit pull\fR\&. The users require ssh access to the machine\&. | |
.br | |
\fB2. \fRin many distributions /etc/shells needs to list what is used as the login shell\&. | |
.br | |
.RE | |
.PP | |
CVS\-style shared repository\&. | |
.RS 4 | |
.sp | |
.if n \{\ | |
.RS 4 | |
.\} | |
.nf | |
$ grep git /etc/group \fB(1)\fR | |
git:x:9418:alice,bob,cindy,david | |
$ cd /home/devo\&.git | |
$ ls \-l \fB(2)\fR | |
lrwxrwxrwx 1 david git 17 Dec 4 22:40 HEAD \-> refs/heads/master | |
drwxrwsr\-x 2 david git 4096 Dec 4 22:40 branches | |
\-rw\-rw\-r\-\- 1 david git 84 Dec 4 22:40 config | |
\-rw\-rw\-r\-\- 1 david git 58 Dec 4 22:40 description | |
drwxrwsr\-x 2 david git 4096 Dec 4 22:40 hooks | |
\-rw\-rw\-r\-\- 1 david git 37504 Dec 4 22:40 index | |
drwxrwsr\-x 2 david git 4096 Dec 4 22:40 info | |
drwxrwsr\-x 4 david git 4096 Dec 4 22:40 objects | |
drwxrwsr\-x 4 david git 4096 Nov 7 14:58 refs | |
drwxrwsr\-x 2 david git 4096 Dec 4 22:40 remotes | |
$ ls \-l hooks/update \fB(3)\fR | |
\-r\-xr\-xr\-x 1 david git 3536 Dec 4 22:40 update | |
$ cat info/allowed\-users \fB(4)\fR | |
refs/heads/master alice\e|cindy | |
refs/heads/doc\-update bob | |
refs/tags/v[0\-9]* david | |
.fi | |
.if n \{\ | |
.RE | |
.\} | |
.sp | |
\fB1. \fRplace the developers into the same git group\&. | |
.br | |
\fB2. \fRand make the shared repository writable by the group\&. | |
.br | |
\fB3. \fRuse update\-hook example by Carl from Documentation/howto/ for branch policy control\&. | |
.br | |
\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\&. | |
.br | |
.RE | |
.SH "GIT" | |
.sp | |
Part of the \fBgit\fR(1) suite | |
.SH "NOTES" | |
.IP " 1." 4 | |
update hook howto | |
.RS 4 | |
\%git-htmldocs/howto/update-hook-example.html | |
.RE | |