<feed xmlns='http://www.w3.org/2005/Atom'>
<title>git/Documentation/git-push.txt, branch v2.3.6</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/git/git.git/
</subtitle>
<id>https://git.shady.money/git/atom?h=v2.3.6</id>
<link rel='self' href='https://git.shady.money/git/atom?h=v2.3.6'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/'/>
<updated>2015-03-31T21:52:24Z</updated>
<entry>
<title>Merge branch 'ph/push-doc-cas' into maint</title>
<updated>2015-03-31T21:52:24Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2015-03-31T21:52:23Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=a78fc4af8246e06de4fc10f685a84778cf33aa12'/>
<id>urn:sha1:a78fc4af8246e06de4fc10f685a84778cf33aa12</id>
<content type='text'>
* ph/push-doc-cas:
  git-push.txt: clean up force-with-lease wording
</content>
</entry>
<entry>
<title>git-push.txt: clean up force-with-lease wording</title>
<updated>2015-03-26T18:41:24Z</updated>
<author>
<name>Phil Hord</name>
<email>hordp@cisco.com</email>
</author>
<published>2015-03-26T15:15:09Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=fddfaf8a229710c50aeaacf6e40429965348493e'/>
<id>urn:sha1:fddfaf8a229710c50aeaacf6e40429965348493e</id>
<content type='text'>
The help text for the --force-with-lease option to git-push
does not parse cleanly.  Clean up the wording and syntax to
be more sensible.  Also remove redundant information in the
"--force-with-lease alone" description.

Signed-off-by: Phil Hord &lt;hordp@cisco.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'mg/push-repo-option-doc' into maint</title>
<updated>2015-02-25T06:10:19Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2015-02-25T06:10:19Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=2fc85f05452087298023519cf95e04c9343ec69d'/>
<id>urn:sha1:2fc85f05452087298023519cf95e04c9343ec69d</id>
<content type='text'>
The "git push" documentation made the "--repo=&lt;there&gt;" option
easily misunderstood.

* mg/push-repo-option-doc:
  git-push.txt: document the behavior of --repo
</content>
</entry>
<entry>
<title>git-push.txt: document the behavior of --repo</title>
<updated>2015-01-28T20:56:06Z</updated>
<author>
<name>Michael J Gruber</name>
<email>git@drmicha.warpmail.net</email>
</author>
<published>2015-01-27T12:35:53Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=57b92a77a0aeff49e82cc0bfd14eac9313683766'/>
<id>urn:sha1:57b92a77a0aeff49e82cc0bfd14eac9313683766</id>
<content type='text'>
As per the code, the --repo &lt;repo&gt; option is equivalent to the
&lt;repo&gt; argument to 'git push', but somehow it was documented as
something that is more than that.  [It exists for historical
reasons, back from the time when options had to come before
arguments.]

Say so. [But not that.]

Signed-off-by: Michael J Gruber &lt;git@drmicha.warpmail.net&gt;
Helped-by: Eric Sunshine &lt;sunshine@sunshineco.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'po/everyday-doc'</title>
<updated>2014-12-12T22:31:34Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2014-12-12T22:31:34Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=b690b87ce3e52d54da4c5dd522a9a7dd08515ae5'/>
<id>urn:sha1:b690b87ce3e52d54da4c5dd522a9a7dd08515ae5</id>
<content type='text'>
* po/everyday-doc:
  Documentation: change "gitlink" typo in git-push
</content>
</entry>
<entry>
<title>Documentation: change "gitlink" typo in git-push</title>
<updated>2014-11-17T17:27:47Z</updated>
<author>
<name>brian m. carlson</name>
<email>sandals@crustytoothpaste.net</email>
</author>
<published>2014-11-17T00:49:00Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=366c8d4ca383466184edd4de75214233368f1efa'/>
<id>urn:sha1:366c8d4ca383466184edd4de75214233368f1efa</id>
<content type='text'>
The git-push manual page used "gitlink" in one place instead of
"linkgit".  Fix this so the link renders correctly.

Noticed-by: Dan Allen &lt;dan.j.allen@gmail.com&gt;
Signed-off-by: brian m. carlson &lt;sandals@crustytoothpaste.net&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'po/everyday-doc'</title>
<updated>2014-10-16T21:16:42Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2014-10-16T21:16:42Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=1cb3324e6152f3b35a7175b84a82b714290090fa'/>
<id>urn:sha1:1cb3324e6152f3b35a7175b84a82b714290090fa</id>
<content type='text'>
"git help everyday" to show the Everyday Git document.

* po/everyday-doc:
  doc: add 'everyday' to 'git help'
  doc: Makefile regularise OBSOLETE_HTML list building
  doc: modernise everyday.txt wording and format in man page style
</content>
</entry>
<entry>
<title>doc: add 'everyday' to 'git help'</title>
<updated>2014-10-10T23:02:26Z</updated>
<author>
<name>Philip Oakley</name>
<email>philipoakley@iee.org</email>
</author>
<published>2014-10-10T21:25:37Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=673151a9bb56ec97fab66746e3aecef78fddb9b8'/>
<id>urn:sha1:673151a9bb56ec97fab66746e3aecef78fddb9b8</id>
<content type='text'>
The "Everyday GIT With 20 Commands Or So" is not accessible via the
Git help system.  Move everyday.txt to giteveryday.txt so that "git
help everyday" works, and create a new placeholder file everyday.html
to refer people who follow existing URLs to the updated location.

giteveryday.txt now formats well with AsciiDoc as a man page and
refreshed content to a more command modern style.

Add 'everyday' to the help --guides list and update git(1) and 5
other links to giteveryday.

Signed-off-by: Philip Oakley &lt;philipoakley@iee.org&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'jc/push-cert'</title>
<updated>2014-10-08T20:05:25Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2014-10-08T20:05:15Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=fb06b5280ea05d75515fa780cf08d4ec9d6fe101'/>
<id>urn:sha1:fb06b5280ea05d75515fa780cf08d4ec9d6fe101</id>
<content type='text'>
Allow "git push" request to be signed, so that it can be verified and
audited, using the GPG signature of the person who pushed, that the
tips of branches at a public repository really point the commits
the pusher wanted to, without having to "trust" the server.

* jc/push-cert: (24 commits)
  receive-pack::hmac_sha1(): copy the entire SHA-1 hash out
  signed push: allow stale nonce in stateless mode
  signed push: teach smart-HTTP to pass "git push --signed" around
  signed push: fortify against replay attacks
  signed push: add "pushee" header to push certificate
  signed push: remove duplicated protocol info
  send-pack: send feature request on push-cert packet
  receive-pack: GPG-validate push certificates
  push: the beginning of "git push --signed"
  pack-protocol doc: typofix for PKT-LINE
  gpg-interface: move parse_signature() to where it should be
  gpg-interface: move parse_gpg_output() to where it should be
  send-pack: clarify that cmds_sent is a boolean
  send-pack: refactor inspecting and resetting status and sending commands
  send-pack: rename "new_refs" to "need_pack_data"
  receive-pack: factor out capability string generation
  send-pack: factor out capability string generation
  send-pack: always send capabilities
  send-pack: refactor decision to send update per ref
  send-pack: move REF_STATUS_REJECT_NODELETE logic a bit higher
  ...
</content>
</entry>
<entry>
<title>push: the beginning of "git push --signed"</title>
<updated>2014-09-15T20:23:20Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2014-09-12T18:17:07Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=a85b377d0419a9dfaca8af2320cc33b051cbed04'/>
<id>urn:sha1:a85b377d0419a9dfaca8af2320cc33b051cbed04</id>
<content type='text'>
While signed tags and commits assert that the objects thusly signed
came from you, who signed these objects, there is not a good way to
assert that you wanted to have a particular object at the tip of a
particular branch.  My signing v2.0.1 tag only means I want to call
the version v2.0.1, and it does not mean I want to push it out to my
'master' branch---it is likely that I only want it in 'maint', so
the signature on the object alone is insufficient.

The only assurance to you that 'maint' points at what I wanted to
place there comes from your trust on the hosting site and my
authentication with it, which cannot easily audited later.

Introduce a mechanism that allows you to sign a "push certificate"
(for the lack of better name) every time you push, asserting that
what object you are pushing to update which ref that used to point
at what other object.  Think of it as a cryptographic protection for
ref updates, similar to signed tags/commits but working on an
orthogonal axis.

The basic flow based on this mechanism goes like this:

 1. You push out your work with "git push --signed".

 2. The sending side learns where the remote refs are as usual,
    together with what protocol extension the receiving end
    supports.  If the receiving end does not advertise the protocol
    extension "push-cert", an attempt to "git push --signed" fails.

    Otherwise, a text file, that looks like the following, is
    prepared in core:

	certificate version 0.1
	pusher Junio C Hamano &lt;gitster@pobox.com&gt; 1315427886 -0700

	7339ca65... 21580ecb... refs/heads/master
	3793ac56... 12850bec... refs/heads/next

    The file begins with a few header lines, which may grow as we
    gain more experience.  The 'pusher' header records the name of
    the signer (the value of user.signingkey configuration variable,
    falling back to GIT_COMMITTER_{NAME|EMAIL}) and the time of the
    certificate generation.  After the header, a blank line follows,
    followed by a copy of the protocol message lines.

    Each line shows the old and the new object name at the tip of
    the ref this push tries to update, in the way identical to how
    the underlying "git push" protocol exchange tells the ref
    updates to the receiving end (by recording the "old" object
    name, the push certificate also protects against replaying).  It
    is expected that new command packet types other than the
    old-new-refname kind will be included in push certificate in the
    same way as would appear in the plain vanilla command packets in
    unsigned pushes.

    The user then is asked to sign this push certificate using GPG,
    formatted in a way similar to how signed tag objects are signed,
    and the result is sent to the other side (i.e. receive-pack).

    In the protocol exchange, this step comes immediately before the
    sender tells what the result of the push should be, which in
    turn comes before it sends the pack data.

 3. When the receiving end sees a push certificate, the certificate
    is written out as a blob.  The pre-receive hook can learn about
    the certificate by checking GIT_PUSH_CERT environment variable,
    which, if present, tells the object name of this blob, and make
    the decision to allow or reject this push.  Additionally, the
    post-receive hook can also look at the certificate, which may be
    a good place to log all the received certificates for later
    audits.

Because a push certificate carry the same information as the usual
command packets in the protocol exchange, we can omit the latter
when a push certificate is in use and reduce the protocol overhead.
This however is not included in this patch to make it easier to
review (in other words, the series at this step should never be
released without the remainder of the series, as it implements an
interim protocol that will be incompatible with the final one).
As such, the documentation update for the protocol is left out of
this step.

Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
</feed>
