рдЕрдВрдЧреНрд░реЗрдЬрд╝реАрдлреНрд░реЗрдВрдЪрд╕реНрдкреЗрдирд┐рд╢

Ad


рдСрдирд╡рд░реНрдХреНрд╕ рдлрд╝реЗрд╡рд┐рдХреЙрди

рдЧрд┐рдЯ-рд░рд┐рд╕реАрд╡-рдкреИрдХ - рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдСрдирд▓рд╛рдЗрди

рдЙрдмрдВрдЯреВ рдСрдирд▓рд╛рдЗрди, рдлреЗрдбреЛрд░рд╛ рдСрдирд▓рд╛рдЗрди, рд╡рд┐рдВрдбреЛрдЬ рдСрдирд▓рд╛рдЗрди рдПрдореБрд▓реЗрдЯрд░ рдпрд╛ рдореИрдХ рдУрдПрд╕ рдСрдирд▓рд╛рдЗрди рдПрдореБрд▓реЗрдЯрд░ рдкрд░ рдСрдирд╡рд░реНрдХреНрд╕ рдлреНрд░реА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдЧрд┐рдЯ-рд░рд┐рд╕реАрд╡-рдкреИрдХ рдЪрд▓рд╛рдПрдВ

рдпрд╣ рдХрдорд╛рдВрдб рдЧрд┐рдЯ-рд░рд┐рд╕реАрд╡-рдкреИрдХ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдорд╛рд░реЗ рдХрдИ рдореБрдлреНрдд рдСрдирд▓рд╛рдЗрди рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рдЬреИрд╕реЗ рдХрд┐ рдЙрдмрдВрдЯреВ рдСрдирд▓рд╛рдЗрди, рдлреЗрдбреЛрд░рд╛ рдСрдирд▓рд╛рдЗрди, рд╡рд┐рдВрдбреЛрдЬ рдСрдирд▓рд╛рдЗрди рдПрдореБрд▓реЗрдЯрд░ рдпрд╛ рдореИрдХ рдУрдПрд╕ рдСрдирд▓рд╛рдЗрди рдПрдореБрд▓реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдирд╡рд░реНрдХреНрд╕ рдлреНрд░реА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрд╛рд░реНрдпрдХреНрд░рдо:

рдирд╛рдо


git-receive-pack - рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬреЛ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

SYNOPSIS


рдЧрд┐рдЯ-рдкреНрд░рд╛рдкреНрдд-рдкреИрдХ

рд╡рд░реНрдгрди


рджреНрд╡рд╛рд░рд╛ рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ Git рднреЗрдЬ-рдкреИрдХ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд╡рд╣рд╛рдВ рд╕реЗ рдлреАрдб рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ
рджреВрд░рд╕реНрде рдЕрдВрдд.

рдпрд╣ рдЖрджреЗрд╢ рдЖрдорддреМрд░ рдкрд░ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП UI рд╣реИ
рдкрд░ Git рднреЗрдЬ-рдкреИрдХ рд╕рд╛рдЗрдб, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдбреЗрдЯ рдХреЛ рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рджреВрд░рд╕реНрде рднрдВрдбрд╛рд░. рдкреБрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ рдЧрд┐рдЯ-рдлрд╝реЗрдЪ-рдкреИрдХ(1).

рдХрдорд╛рдВрдб рдкрд░ sha1 рд░реЗрдлрд░реА (рд╣реЗрдб/рдЯреИрдЧ) рдмрдирд╛рдиреЗ рдФрд░ рддреЗрдЬреА рд╕реЗ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рд╕реБрджреВрд░ рдЕрдВрдд (рд╕рдЦреНрддреА рд╕реЗ рдХрд╣реЗрдВ рддреЛ, рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдЕрдВрдд рд╣реИ рдЧрд┐рдЯ-рдкреНрд░рд╛рдкреНрдд-рдкреИрдХ рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП
рдЬреЛ рд╕реЗрдВрдб-рдкреИрдХ рдЫреЛрд░ рдкрд░ рдмреИрдард╛ рд╣реИ, рд╡рд╣ рд░рд┐рдореЛрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрд╕реНрдкрд╖реНрдЯ?)

рдЕрдкрдбреЗрдЯ рдФрд░ рдкреЛрд╕реНрдЯ-рдЕрдкрдбреЗрдЯ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рднреА рдЗрд╕рдореЗрдВ рдкрд╛рдП рдЧрдП рд╣реИрдВ
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг/рдХреИрд╕реЗ рдХрд░реЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ред

рдЧрд┐рдЯ-рдкреНрд░рд╛рдкреНрдд-рдкреИрдХ Receive.denyNonFastForwards рдХреЙрдиреНрдлрд┐рдЧ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛
рдпрджрд┐ рд░реЗрдлрд░реА рдХреЗ рдЕрдкрдбреЗрдЯ рддреЗрдЬреА рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд┐рдХрд▓реНрдк



рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА.

рдкреВрд░реНрд╡ рдкреНрд░рд╛рдкреНрддрд┐ рд╣реБрдХ


рдХрд┐рд╕реА рднреА рд░реЗрдлрд░реА рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрджрд┐ $GIT_DIR/hooks/pre-receive рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдпрд╣
рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдПрдХ рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣реБрдХ рдХрд╛ рдорд╛рдирдХ рдЗрдирдкреБрдЯ рдПрдХ рд▓рд╛рдЗрди рд╣реЛрдЧрд╛
рдкреНрд░рддрд┐ рд╕рдВрджрд░реНрдн рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ:

sha1-рдкреБрд░рд╛рдирд╛ SP sha1-рдирдпрд╛ SP рд░реЗрдлрд╝рдирд╛рдо LF

Refname рдорд╛рди $GIT_DIR рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рд╣реЗрдб рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣реИ
"рд░реЗрдлреНрд╕/рдкреНрд░рдореБрдЦ/рдорд╛рд╕реНрдЯрд░"ред рдкреНрд░рддреНрдпреЗрдХ refname рд╕реЗ рдкрд╣рд▓реЗ рджреЛ sha1 рдорд╛рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╛рдо рд╣реИрдВ
рдЕрджреНрдпрддрди рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдирд╛рдо рдмрджрд▓реЗрдВред рдмрдирд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд░реЗрдлрд╝рд░реНрд╕ рдореЗрдВ sha1-old 0{40} рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛,
рдЬрдмрдХрд┐ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд░реЗрдлрд░реА рдореЗрдВ sha1-new 0{40} рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ sha1-рдкреБрд░рд╛рдирд╛ рдФрд░
sha1-new рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╡реИрдз рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреБрд╢ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╕рдордп (рджреЗрдЦреЗрдВ рдЧрд┐рдЯ-рдкреБрд╢(1)), рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреБрд╢ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдПрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ
рдЗрд╕рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдм рдФрд░ рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ GIT_PUSH_CERT рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреЗрдЦрдирд╛
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ-рдкреНрд░рд╛рдкреНрдд рд╣реБрдХ рдХрд╛ рд╡рд┐рд╡рд░рдгред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╣реИ
GPG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

GIT_PUSH_CERT_SIGNER
рдкреБрд╢ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреБрдВрдЬреА рдХреЗ рд╕реНрд╡рд╛рдореА рдХрд╛ рдирд╛рдо рдФрд░ рдИ-рдореЗрд▓ рдкрддрд╛
рдкреНрд░рдорд╛рдг рдкрддреНрд░ред

GIT_PUSH_CERT_KEY
рдкреБрд╢ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреБрдВрдЬреА рдХреА GPG рдХреБрдВрдЬреА рдЖрдИрдбреАред

GIT_PUSH_CERT_STATUS
рдкреБрд╢ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рдЬреАрдкреАрдЬреА рд╕рддреНрдпрд╛рдкрди рдХреА рд╕реНрдерд┐рддрд┐, рдЙрд╕реА рд╕реНрдорд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП
%G рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдХрдорд╛рдВрдб рдХреЗ рдЧрд┐рдЯ рд▓реЙрдЧ рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рдкреНрд░рд╛рд░реВрдк (рджреЗрдЦреЗрдВ рдЧрд┐рдЯ-рд▓реЙрдЧ(1))ред

GIT_PUSH_CERT_NONCE
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЧреИрд░-рд╕реНрдЯреНрд░рд┐рдВрдЧ рдиреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛ рдХреЛ рдкреБрд╢ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдЕрдЧрд░
рдпрд╣ рдкреБрд╢ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдореЗрдВ "рдиреЙрдиреНрд╕" рд╣реЗрдбрд░ рдкрд░ рджрд░реНрдЬ рдореВрд▓реНрдп рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ,
рдпрд╣ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╡реИрдз рд╣реИ рдЬрд┐рд╕реЗ рджреЛрдмрд╛рд░рд╛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
рдЕрд▓рдЧ "рдЧрд┐рдЯ рдкреБрд╢" рд╕рддреНрд░ред

GIT_PUSH_CERT_NONCE_STATUS

рдЕрдирдЪрд╛рд╣реА
"рдЧрд┐рдЯ рдкреБрд╢--рд╕рд╛рдЗрдирдб" рдиреЗ рдПрдХ рдЧреИрд░ рднреЗрдЬрд╛ рдЬрдмрдХрд┐ рд╣рдордиреЗ рдЙрд╕рд╕реЗ рдПрдХ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣рд╛ рдерд╛ред

рд▓рд╛рдкрддрд╛
"рдЧрд┐рдЯ рдкреБрд╢--рд╕рд╛рдЗрдирдб" рдиреЗ рдХреЛрдИ рднреА рдиреЙрди рд╣реЗрдбрд░ рдирд╣реАрдВ рднреЗрдЬрд╛ред

рдЦрд░рд╛рдм
"рдЧрд┐рдЯ рдкреБрд╢--рд╕рд╛рдЗрдирдб" рдиреЗ рдПрдХ рдлрд░реНрдЬреА рдиреЙрдирд╕ рднреЗрдЬрд╛ред

OK
рдЬрдм рд╣рдордиреЗ рдЗрд╕реЗ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рддреЛ "рдЧрд┐рдЯ рдкреБрд╢--рд╕рд╛рдЗрдиреНрдб" рдиреЗ рдиреЙрди рднреЗрдЬ рджрд┐рдпрд╛ред

рдбрдмрд░рд╛
"рдЧрд┐рдЯ рдкреБрд╢--рд╕рд╛рдЗрдирдб" рдиреЗ рдЬреЛ рд╣рдордиреЗ рдЗрд╕реЗ рдЕрднреА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдерд╛, рдЙрд╕рд╕реЗ рдЕрд▓рдЧ рдПрдХ рдиреЙрди рднреЗрдЬрд╛, рд▓реЗрдХрд┐рди
рдкрд┐рдЫрд▓реЗ рд╕рддреНрд░ рдореЗрдВ. GIT_PUSH_CERT_NONCE_SLOP рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рджреЗрдЦреЗрдВред

GIT_PUSH_CERT_NONCE_SLOP
"рдЧрд┐рдЯ рдкреБрд╢--рд╕рд╛рдЗрдирдб" рдиреЗ рдЬреЛ рд╣рдордиреЗ рдЗрд╕реЗ рдЕрднреА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдерд╛, рдЙрд╕рд╕реЗ рднрд┐рдиреНрди рдПрдХ рдиреЙрди рднреЗрдЬрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдореЗрдВ
рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рддреНрд░ рдЬрд┐рдирдХрд╛ рдкреНрд░рд╛рд░рдВрдн рд╕рдордп рдЗрддрдиреЗ рд╕реЗрдХрдВрдб рд╕реЗ рднрд┐рдиреНрди рд╣реИ
рд╡рд░реНрддрдорд╛рди рд╕рддреНрд░ред рдХреЗрд╡рд▓ рддрднреА рд╕рд╛рд░реНрдердХ рдЬрдм GIT_PUSH_CERT_NONCE_STATUS SLOP рдХрд╣рддрд╛ рд╣реИред рдпрд╣ рднреА рдкрдврд╝реЗрдВ
Receive.certNonceSlop рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд┐рдЯ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди(1).

рдХрд┐рд╕реА рднреА рд░реЗрдлрдиреЗрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдХрд┐рд╕реА рднреА рдлрд╛рд╕реНрдЯ-рдлреЙрд░рд╡рд░реНрдб рдЪреЗрдХ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╣реБрдХ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ред

рдпрджрд┐ рдкреНрд░реА-рд░рд┐рд╕реАрд╡ рд╣реБрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдирд┐рдХрд╛рд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ рддреЛ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛,
рдФрд░ рдЕрдкрдбреЗрдЯ, рдкреЛрд╕реНрдЯ-рдкреНрд░рд╛рдкреНрддрд┐ рдФрд░ рдкреЛрд╕реНрдЯ-рдЕрдкрдбреЗрдЯ рд╣реБрдХ рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдпрджрд┐ рдЕрджреНрдпрддрди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ рддреЛ рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

рдЕрджреНрдпрддрди рд╣реБрдХ


рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдлрд░реА рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрджрд┐ $GIT_DIR/hooks/update рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдпрд╣ рд╣реИ
рдкреНрд░рддрд┐ рд░реЗрдлрд░реА рдПрдХ рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреАрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде:

$GIT_DIR/рд╣реБрдХ/рдЕрджреНрдпрддрди refname sha1-рдкреБрд░рд╛рдирд╛ sha1-рдирдпрд╛

Refname рдкреИрд░рд╛рдореАрдЯрд░ $GIT_DIR рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рд╣реЗрдб рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣реИ
"рд░реЗрдлреНрд╕/рдкреНрд░рдореБрдЦ/рдорд╛рд╕реНрдЯрд░"ред рджреЛ sha1 рддрд░реНрдХ рдкрд╣рд▓реЗ refname рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╛рдо рд╣реИрдВ
рдФрд░ рдЕрджреНрдпрддрди рдХреЗ рдмрд╛рдж. рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░рд┐рдлрд╝рдиреЗрдо рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реБрдХ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП
рдпрд╛ рддреЛ sha1-old 0{40} рд╣реИ (рдорддрд▓рдм рдЕрднреА рддрдХ рдРрд╕рд╛ рдХреЛрдИ рд░реЗрдлрд░реА рдирд╣реАрдВ рд╣реИ), рдпрд╛ рдЗрд╕реЗ рдЬреЛ рд╣реИ рдЙрд╕рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
Refname рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдпрджрд┐ рд╣реБрдХ рдирд╛рдорд┐рдд рд░реЗрдлрд░реА рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рд╣реБрдХ рдХрд╛ рд╕рдлрд▓ рдирд┐рд╖реНрдкрд╛рджрди (рд╢реВрдиреНрдп рдирд┐рдХрд╛рд╕ рд╕реНрдерд┐рддрд┐) рд░реЗрдлрд░реА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрджреНрдпрддрди рд╣реЛрдирд╛, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╢рд░реНрдд рд╣реИред рдРрд╕реЗ рдореЗрдВ рднреЗрдЬрдирд╛ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ
рдЗрд╕ рд╣реБрдХ рд╕реЗ рдиреЛрдЯрд┐рд╕ (рдЬреИрд╕реЗ рдИрдореЗрд▓)ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкреЛрд╕реНрдЯ-рд░рд┐рд╕реАрд╡ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдкреЛрд╕реНрдЯ-рдкреНрд░рд╛рдкреНрддрд┐ рд╣реБрдХ


рд╕рднреА рд░реЗрдлрд░реА рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж (рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛), рдпрджрд┐ рдХреЛрдИ рд░реЗрдлрд░реА рдЕрдкрдбреЗрдЯ рдерд╛
рд╕рдлрд▓, рдФрд░ рдпрджрд┐ $GIT_DIR/hooks/post-receive рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдпрд╣ рд╣реЛрдЧрд╛
рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдПрдХ рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╣реБрдХ рдХрд╛ рдорд╛рдирдХ рдЗрдирдкреБрдЯ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрди рд╣реЛрдЧрд╛
рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЕрджреНрдпрддрди рд░реЗрдлрд░реА:

sha1-рдкреБрд░рд╛рдирд╛ SP sha1-рдирдпрд╛ SP рд░реЗрдлрд╝рдирд╛рдо LF

Refname рдорд╛рди $GIT_DIR рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рд╣реЗрдб рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣реИ
"рд░реЗрдлреНрд╕/рдкреНрд░рдореБрдЦ/рдорд╛рд╕реНрдЯрд░"ред рдкреНрд░рддреНрдпреЗрдХ refname рд╕реЗ рдкрд╣рд▓реЗ рджреЛ sha1 рдорд╛рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╛рдо рд╣реИрдВ
рдЕрджреНрдпрддрди рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдирд╛рдо рдмрджрд▓реЗрдВред рдмрдирд╛рдП рдЧрдП рд░реЗрдлреНрд╕ рдореЗрдВ sha1-рдкреБрд░рд╛рдирд╛ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛
0{40}, рдЬрдмрдХрд┐ рд╣рдЯрд╛рдП рдЧрдП рд░реЗрдлрд░реА рдореЗрдВ sha1-рдирдпрд╛ 0{40} рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ sha1-рдкреБрд░рд╛рдирд╛ рд╣реЛрдЧрд╛
рдФрд░ sha1-new рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╡реИрдз рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

GIT_PUSH_CERT* рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдкреВрд░реНрд╡-рдкреНрд░рд╛рдкреНрдд рд╣реБрдХ рдореЗрдВ,
рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдзрдХреНрдХрд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж.

рдЗрд╕ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рддрд┐ рд░реЗрдлрд░реА рдПрдХ рдореЗрд▓ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреБрд╢ рдХрд┐рдП рдЧрдП рдХрдорд┐рдЯ рд╕реВрдЪреАрдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рдФрд░ рдЕрдЪреНрдЫреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреБрд╢ рдХреЗ рдкреБрд╢ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ
рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рд╕реЗрд╡рд╛:

#!/ рдмрд┐рди / рд╢
# рдкреНрд░рддрд┐рдмрджреНрдз рдЕрджреНрдпрддрди рдЬрд╛рдирдХрд╛рд░реА рдореЗрд▓ рдХрд░реЗрдВред
рдЬрдмрдХрд┐ рдУрд╡рд▓ рдПрдирд╡рд▓ рд░реЗрдлрд░реА рдкрдврд╝реЗрдВ
do
рдпрджрд┐ expr "$oval" : '0*$' >/dev/null
рдлрд┐рд░
рдЗрдХреЛ "рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд░реЗрдлрд░реА рдмрдирд╛рдпрд╛ рдЧрдпрд╛:"
рдЧрд┐рдЯ рд░реЗрд╡-рд▓рд┐рд╕реНрдЯ--рд╕реБрдВрджрд░ "$nval"
рдЕрдиреНрдп
рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ "рдирдИ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдПрдБ:"
рдЧрд┐рдЯ рд░реЗрд╡-рд▓рд┐рд╕реНрдЯ --рд╕реБрдВрджрд░ "$nval" "^$рдУрд╡рд▓"
рдлрд╛рдИ |
рдореЗрд▓ -рдПрд╕ "рд░реЗрдлрд░реА $рд░реЗрдл рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди" рдХрдорд┐рдЯ-рд▓рд┐рд╕реНрдЯ@рдорд╛рдпрдбреЛрдореЗрди
рдХрд┐рдпрд╛
# рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреБрд╢ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд▓реЙрдЧ рдХрд░реЗрдВ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ
рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг -n "${GIT_PUSH_CERT-}" && рдкрд░реАрдХреНрд╖рдг ${GIT_PUSH_CERT_STATUS} = G
рдлрд┐рд░
(
рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдиреЙрдиреНрд╕ ${GIT_PUSH_NONCE} рд╣реИ
рдЧрд┐рдЯ рдХреИрдЯ-рдлрд╝рд╛рдЗрд▓ рдмреНрд▓реЙрдм ${GIT_PUSH_CERT}
) | рдореЗрд▓-рдПрд╕ "$GIT_PUSH_CERT_SIGNER рд╕реЗ рдкреБрд╢ рдкреНрд░рдорд╛рдгрдкрддреНрд░" рдкреБрд╢-рд▓реЙрдЧ@рдорд╛рдпрдбреЛрдореЗрди
fi
рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ 0

рдЗрд╕ рд╣реБрдХ рдЖрд╣реНрд╡рд╛рди рд╕реЗ рдирд┐рдХрд╛рд╕ рдХреЛрдб рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдирд┐рдХрд╛рд╕ рдХреЛрдб рд╣реЛрдЧрд╛
рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ.

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм рдпрд╣ рд╣реБрдХ рдЪрд▓рддрд╛ рд╣реИ рддреЛ refname рдореЗрдВ sha1-new рди рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпреЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реЗрдлрд░реА рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЧрд┐рдЯ-рдкреНрд░рд╛рдкреНрдд-рдкреИрдХ,
рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣реБрдХ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рдкрд╛рддрд╛ред рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╣реБрдХ sha1-new рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣реЗрдВ
Refname рдХреЗ рд╡рд░реНрддрдорд╛рди рдорд╛рди рдХреЗ рдмрдЬрд╛рдпред

рдкреЛрд╕реНрдЯ-рдЕрдкрдбреЗрдЯ рд╣реБрдХ


рдЕрдиреНрдп рд╕рднреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж, рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд░реЗрдлрд░реА рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрджрд┐
$GIT_DIR/рд╣реБрдХ/рдкреЛрд╕реНрдЯ-рдЕрдкрдбреЗрдЯ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдкреЛрд╕реНрдЯ-рдЕрдкрдбреЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдЕрджреНрдпрддрди рдХрд┐рдП рдЧрдП рд░реЗрдлрд░реА рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рдеред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд╡реНрдпрд╛рдкрдХ рд╕рдлрд╝рд╛рдИ рдХрд╛рд░реНрдп.

рдЗрд╕ рд╣реБрдХ рдЖрдордВрддреНрд░рдг рд╕реЗ рдирд┐рдХрд╛рд╕ рдХреЛрдб рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рдмрдЪреА рд╣реИ
рдЧрд┐рдЯ-рдкреНрд░рд╛рдкреНрдд-рдкреИрдХ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдРрд╕рд╛ рдХрд░рдирд╛ рд╡реИрд╕реЗ рднреА рд╕реНрд╡рдпрдВ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рд╣реИред

рдЗрд╕ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИ рддреЛ git update-server-info рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдбрдВрдм рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИред

#!/ рдмрд┐рди / рд╢
рдХрд╛рд░реНрдпрдХрд╛рд░реА рдЧрд┐рдЯ рдЕрджреНрдпрддрди-рд╕рд░реНрд╡рд░-рдЬрд╛рдирдХрд╛рд░реА

onworks.net рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдирд▓рд╛рдЗрди git-receive-pack рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдлреНрд░реА рд╕рд░реНрд╡рд░ рдФрд░ рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди

рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд▓рд╛рдЗрдиреЗрдХреНрд╕ рдПрдк рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

рд▓рд┐рдирдХреНрд╕ рдХрдорд╛рдВрдб

Ad