mirror of
https://github.com/git/git.git
synced 2026-08-09 17:40:16 +00:00
Pack requests stage downloads in a predictable partial-pack file so an interrupted transfer can be resumed. Both packfile URI and ordinary dumb HTTP requests use this staging path. Opening it in append mode forces each write to the current end of the file, so concurrent responses can append duplicate data and corrupt the pack. Open the partial pack read-write without O_APPEND and seek once to its current end. Each downloader then retains the offset matching the Range it requested. Because the staging key must uniquely identify immutable pack contents, overlapping responses write the same bytes at the same offsets instead of extending the file with duplicate data. Duplicate the staging descriptor for index-pack instead of reopening the path after closing the stream. Another downloader may unlink the staging path before indexing begins, but index-pack can still read the retained descriptor. Exercise resumed transfers and overlapping 200 and 206 responses, and clarify the staging-key documentation. Signed-off-by: Ted Nyman <tnyman@openai.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
68 lines
1.9 KiB
Plaintext
68 lines
1.9 KiB
Plaintext
git-http-fetch(1)
|
|
=================
|
|
|
|
NAME
|
|
----
|
|
git-http-fetch - Download from a remote Git repository via HTTP
|
|
|
|
|
|
SYNOPSIS
|
|
--------
|
|
[verse]
|
|
'git http-fetch' [-c] [-t] [-a] [-d] [-v] [-w <filename>] [--recover] [--stdin | --packfile=<hash> | <commit>] <URL>
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
Downloads a remote Git repository via HTTP.
|
|
|
|
This command always gets all objects. Historically, there were three options
|
|
`-a`, `-c` and `-t` for choosing which objects to download. They are now
|
|
silently ignored.
|
|
|
|
OPTIONS
|
|
-------
|
|
commit-id::
|
|
Either the hash or the filename under [URL]/refs/ to
|
|
pull.
|
|
|
|
-a::
|
|
-c::
|
|
-t::
|
|
These options are ignored for historical reasons.
|
|
|
|
-v::
|
|
Report what is downloaded.
|
|
|
|
-w <filename>::
|
|
Writes the commit-id into the specified filename under $GIT_DIR/refs/<filename> on
|
|
the local end after the transfer is complete.
|
|
|
|
--stdin::
|
|
Instead of a commit id on the command line (which is not expected in this
|
|
case), 'git http-fetch' expects lines on stdin in the format
|
|
|
|
<commit-id>['\t'<filename-as-in--w>]
|
|
|
|
--packfile=<hash>::
|
|
For internal use only. Instead of a commit id on the command
|
|
line (which is not expected in
|
|
this case), 'git http-fetch' fetches the packfile directly at the given
|
|
URL and uses index-pack to generate corresponding .idx and .keep files.
|
|
The hash is used to determine the name of the temporary file. It need
|
|
not be the pack hash, but it must uniquely identify the pack contents
|
|
for resumption. The output of index-pack is printed to stdout. Requires
|
|
one or more --index-pack-arg options.
|
|
|
|
--index-pack-arg=<arg>::
|
|
For internal use only. The first instance specifies the command run on
|
|
the contents of the downloaded pack. Subsequent instances specify its
|
|
arguments.
|
|
|
|
--recover::
|
|
Verify that everything reachable from target is fetched. Used after
|
|
an earlier fetch is interrupted.
|
|
|
|
GIT
|
|
---
|
|
Part of the linkgit:git[1] suite
|