/
usr
/
share
/
doc
/
git
/
howto
/
/usr/share/doc/git/howto
mkdir
upload
Name
Size
Mode
Actions
coordinate-embargoed-releases.html
29838
0644
edit
dl
rm
coordinate-embargoed-releases.txt
10823
0644
edit
dl
rm
keep-canonical-history-correct.html
26249
0644
edit
dl
rm
keep-canonical-history-correct.txt
6795
0644
edit
dl
rm
maintain-git.html
41732
0644
edit
dl
rm
maintain-git.txt
18220
0644
edit
dl
rm
new-command.html
22001
0644
edit
dl
rm
new-command.txt
4460
0644
edit
dl
rm
rebase-from-internal-branch.html
24456
0644
edit
dl
rm
rebase-from-internal-branch.txt
6310
0644
edit
dl
rm
rebuild-from-update-hook.html
20387
0644
edit
dl
rm
rebuild-from-update-hook.txt
3137
0644
edit
dl
rm
recover-corrupted-blob-object.html
23884
0644
edit
dl
rm
recover-corrupted-blob-object.txt
5510
0644
edit
dl
rm
recover-corrupted-object-harder.html
36038
0644
edit
dl
rm
recover-corrupted-object-harder.txt
14607
0644
edit
dl
rm
revert-a-faulty-merge.html
30865
0644
edit
dl
rm
revert-a-faulty-merge.txt
10856
0644
edit
dl
rm
revert-branch-rebase.html
24740
0644
edit
dl
rm
revert-branch-rebase.txt
7823
0644
edit
dl
rm
separating-topic-branches.html
20526
0644
edit
dl
rm
separating-topic-branches.txt
3356
0644
edit
dl
rm
setup-git-server-over-http.html
30562
0644
edit
dl
rm
setup-git-server-over-http.txt
8613
0644
edit
dl
rm
update-hook-example.html
23272
0644
edit
dl
rm
update-hook-example.txt
6289
0644
edit
dl
rm
use-git-daemon.html
19649
0644
edit
dl
rm
use-git-daemon.txt
2135
0644
edit
dl
rm
using-merge-subtree.html
20235
0644
edit
dl
rm
using-merge-subtree.txt
3025
0644
edit
dl
rm
using-signed-tag-in-pull-request.html
26765
0644
edit
dl
rm
using-signed-tag-in-pull-request.txt
8282
0644
edit
dl
rm
Edit:
/usr/share/doc/git/howto/new-command.txt
(4460B)
From: Eric S. Raymond <esr@thyrsus.com> Abstract: This is how-to documentation for people who want to add extension commands to Git. It should be read alongside builtin.h. Content-type: text/asciidoc How to integrate new subcommands ================================ This is how-to documentation for people who want to add extension commands to Git. It should be read alongside builtin.h. Runtime environment ------------------- Git subcommands are standalone executables that live in the Git exec path, normally /usr/lib/git-core. The git executable itself is a thin wrapper that knows where the subcommands live, and runs them by passing command-line arguments to them. (If "git foo" is not found in the Git exec path, the wrapper will look in the rest of your $PATH for it. Thus, it's possible to write local Git extensions that don't live in system space.) Implementation languages ------------------------ Most subcommands are written in C or shell. A few are written in Perl. While we strongly encourage coding in portable C for portability, these specific scripting languages are also acceptable. We won't accept more without a very strong technical case, as we don't want to broaden the Git suite's required dependencies. Import utilities, surgical tools, remote helpers and other code at the edges of the Git suite are more lenient and we allow Python (and even Tcl/tk), but they should not be used for core functions. This may change in the future. Especially Python is not allowed in core because we need better Python integration in the Git Windows installer before we can be confident people in that environment won't experience an unacceptably large loss of capability. C commands are normally written as single modules, named after the command, that link a collection of functions called libgit. Thus, your command 'git-foo' would normally be implemented as a single "git-foo.c" (or "builtin/foo.c" if it is to be linked to the main binary); this organization makes it easy for people reading the code to find things. See the CodingGuidelines document for other guidance on what we consider good practice in C and shell, and api-builtin.txt for the support functions available to built-in commands written in C. What every extension command needs ---------------------------------- You must have a man page, written in asciidoc (this is what Git help followed by your subcommand name will display). Be aware that there is a local asciidoc configuration and macros which you should use. It's often helpful to start by cloning an existing page and replacing the text content. You must have a test, written to report in TAP (Test Anything Protocol). Tests are executables (usually shell scripts) that live in the 't' subdirectory of the tree. Each test name begins with 't' and a sequence number that controls where in the test sequence it will be executed; conventionally the rest of the name stem is that of the command being tested. Read the file t/README to learn more about the conventions to be used in writing tests, and the test support library. Integrating a command --------------------- Here are the things you need to do when you want to merge a new subcommand into the Git tree. 1. Don't forget to sign off your patch! 2. Append your command name to one of the variables BUILTIN_OBJS, EXTRA_PROGRAMS, SCRIPT_SH, SCRIPT_PERL or SCRIPT_PYTHON. 3. Drop its test in the t directory. 4. If your command is implemented in an interpreted language with a p-code intermediate form, make sure .gitignore in the main directory includes a pattern entry that ignores such files. Python .pyc and .pyo files will already be covered. 5. If your command has any dependency on a particular version of your language, document it in the INSTALL file. 6. There is a file command-list.txt in the distribution main directory that categorizes commands by type, so they can be listed in appropriate subsections in the documentation's summary command list. Add an entry for yours. To understand the categories, look at command-list.txt in the main directory. If the new command is part of the typical Git workflow and you believe it common enough to be mentioned in 'git help', map this command to a common group in the column [common]. 7. Give the maintainer one paragraph to include in the RelNotes file to describe the new feature; a good place to do so is in the cover letter [PATCH 0/n]. That's all there is to it.
Save
cmd:
run