GIT рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдмрд╣реБ-рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░рд╡реЗрд╢рд╛рдЪреА рд╕рдВрд╕реНрдерд╛

Git рд╕рд░реНрд╡реНрд╣рд░ рд╕реНрдерд╛рдкрд┐рдд рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддрд╛рдирд╛, рдЕрдиреЗрдХ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдЕрдиреЗрдХ рдкреНрд░рдХрд▓реНрдкрд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рдкреНрд░рд╢реНрди рдЙрджреНрднрд╡рддреЛ. рдореА рдпрд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рд╕рдВрд╢реЛрдзрди рдХреЗрд▓реЗ рдЖрдгрд┐ рдорд╛рдЭреНрдпрд╛ рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреВрд░реНрдг рдХрд░рдгрд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рд╕рд╛рдкрдбрд▓реЗ: рд╕рд╛рдзреЗ, рд╕реБрд░рдХреНрд╖рд┐рдд, рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣.

рдорд╛рдЭреНрдпрд╛ рд╢реБрднреЗрдЪреНрдЫрд╛ рдЖрд╣реЗрдд:

  • рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдЦрд╛рддреНрдпрд╛рд╢реА рдЬреЛрдбрддреЛ
  • рдЕрдиреЗрдХ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдПрдХрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╡рд░ рдХрд╛рдо рдХрд░реВ рд╢рдХрддрд╛рдд
  • рд╕рдорд╛рди рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЕрдиреЗрдХ рдкреНрд░рдХрд▓реНрдкрд╛рдВрд╡рд░ рдХрд╛рдо рдХрд░реВ рд╢рдХрддреЛ
  • рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рдлрдХреНрдд рддреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЕрд╕рддреЛ рдЬреНрдпрд╛рд╡рд░ рддреЛ рдХрд╛рдо рдХрд░рддреЛ
  • рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирджреНрд╡рд╛рд░реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдгреЗ рд╢рдХреНрдп рдЕрд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ, рдЖрдгрд┐ рдХреЗрд╡рд│ рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕рджреНрд╡рд╛рд░реЗ рдирд╛рд╣реА

рд╣реЗ рджреЗрдЦреАрд▓ рдЫрд╛рди рд╣реЛрдИрд▓:

  • рдирд┐рдпрдВрддреНрд░рд┐рдд рд╡реНрдпрдХреНрддреАрдВрдирд╛ рдХреЗрд╡рд│-рд╡рд╛рдЪрдиреАрдп рдкрд░рд╡рд╛рдирдЧреНрдпрд╛ рджреНрдпрд╛
  • Git рдордзреНрдпреЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░рд╡реЗрд╢ рдЕрдзрд┐рдХрд╛рд░ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛

GIT рд╕рд░реНрд╡реНрд╣рд░рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрднрд╛рд╡реНрдп рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреЗ рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди

рд╕рд░реНрд╡рдкреНрд░рдердо, рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рдирд┐рд╡рдбрд╛рдпрдЪреЗ рд╣реЗ рдорд╛рд╣рд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдпреЗрдереЗ Git рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдЪреЗ рджреНрд░реБрдд рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди рдЖрд╣реЗ.

  • ssh - рд╕рд░реНрд╡реНрд╣рд░рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЦрд╛рд╕ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЦрд╛рддреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ.
    • рд╣реЗ рд╡рд┐рдЪрд┐рддреНрд░ рдЖрд╣реЗ рдХреА Git рд╕рд░реНрд╡ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХрд╛ рдЦрд╛рддреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рддреНрдпрд╛рдЪреНрдпрд╛ рд╢рд┐рдлрд╛рд░рд╕реАрдВрдордзреВрди рд╡рдЧрд│рдд рдирд╛рд╣реА. рд╣реЗ рдорд╛рдЭреНрдпрд╛ рдЧрд░рдЬрд╛ рдЕрдЬрд┐рдмрд╛рдд рдкреВрд░реНрдг рдХрд░рдд рдирд╛рд╣реА.
    • рддреБрдореНрд╣реА рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЦрд╛рддреА рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рддреБрдореНрд╣реА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪрд╛ рдкреНрд░рд╡реЗрд╢ рдХреЗрд╡рд│ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдВрд╡рд░ рдХрд╕рд╛ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░реВ рд╢рдХрддрд╛?
      • рд╣реЛрдо рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреНрдпреЗ рдмрдВрдж рдХрд░рдгреЗ рдпреЛрдЧреНрдп рдирд╛рд╣реА, рдХрд╛рд░рдг рдЗрддрд░ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рддреЗрдереЗ рд▓реЗрдЦрди рдкреНрд░рд╡реЗрд╢ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдХрдареАрдг рдЖрд╣реЗ
      • рддреБрдордЪреНрдпрд╛ рд╣реЛрдо рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреАрд▓ рд╕рд┐рдорд▓рд┐рдВрдХреНрд╕ рд╡рд╛рдкрд░рдгреЗ рджреЗрдЦреАрд▓ рдЕрд╡рдШрдб рдЖрд╣реЗ рдХрд╛рд░рдг Git рддреНрдпрд╛рдВрдЪрд╛ рджреБрд╡реЗ рдореНрд╣рдгреВрди рдЕрд░реНрде рд▓рд╛рд╡рдд рдирд╛рд╣реА
      • рджреБрднрд╛рд╖реНрдпрд╛рд▓рд╛ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рдиреЗрд╣рдореА рдХрд╛рд░реНрдп рдХрд░реЗрд▓ рдпрд╛рдЪреА рдкреВрд░реНрдг рд╣рдореА рдирд╛рд╣реА
        • рдЕрд╢рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рддреБрдордЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ рдХрдиреЗрдХреНрдЯ рдХрд░реВ рд╢рдХрддрд╛, рдкрдг
          • рдкреНрд░рдердо, рд╣рд╛ рдЖрдзреАрдЪ рдПрдХ рдкреНрд░рдХрд╛рд░рдЪрд╛ рдХрдареАрдг рдирд┐рд░реНрдгрдп рдЖрд╣реЗ,
          • рдЖрдгрд┐ рджреБрд╕рд░реЗ рдореНрд╣рдгрдЬреЗ, рд╣реЗ рдЯрд╛рд│рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.

    рдкрд░рдВрддреБ рдХрджрд╛рдЪрд┐рдд рд╣реА рд╕рдорд╕реНрдпрд╛ рдирд╛рд╣реА рдХреА рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдХрдорд╛рдВрдбрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓?... рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд╣реА рдкрджреНрдзрдд рдЖрдкрдг рдирдХреНрдХреА рдХрд╢реА рд╡рд╛рдкрд░рд╛рдпрдЪреА рд╣реЗ рд╢реЛрдзреВрди рдХрд╛рдврд▓реЗ рддрд░ рддреЗ рдирд╛рдХрд╛рд░рддрд╛ рдпреЗрдд рдирд╛рд╣реА. рдЖрдореНрд╣реА рдирдВрддрд░ рдпрд╛ рдкрджреНрдзрддреАрдХрдбреЗ рдкрд░рдд рдпреЗрдК, рдкрд░рдВрддреБ рдЖрддреНрддрд╛ рдЖрдореНрд╣реА рдЗрддрд░ рдкрд░реНрдпрд╛рдпрд╛рдВрдЪрд╛ рдереЛрдбрдХреНрдпрд╛рдд рд╡рд┐рдЪрд╛рд░ рдХрд░реВ, рдХрджрд╛рдЪрд┐рдд рдХрд╛рд╣реАрддрд░реА рд╕реЛрдкреЗ рдЕрд╕реЗрд▓.

  • git рд╕реНрдерд╛рдирд┐рдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ sshfs рдЪреНрдпрд╛ рд╕рдВрдпреЛрдЬрдирд╛рдд рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдПрдХрд╛рдзрд┐рдХ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рдкрд░рдВрддреБ рдореВрд▓рдд: рдорд╛рдЧреАрд▓ рдХреЗрд╕ рдкреНрд░рдорд╛рдгреЗрдЪ
  • http - рдХреЗрд╡рд│ рд╡рд╛рдЪрдиреАрдп
  • git рдХреЗрд╡рд│ рд╡рд╛рдЪрдиреАрдп рдЖрд╣реЗ
  • https - рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдХрдареАрдг рдЖрд╣реЗ, рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░рд╡реЗрд╢ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреЗ рдирд┐рдпрдВрддреНрд░рдг рдкреЕрдиреЗрд▓... рддреЗ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рджрд┐рд╕рддреЗ, рдкрд░рдВрддреБ рддрд░реАрд╣реА рд╕рд░реНрд╡рдХрд╛рд╣реА рдЧреБрдВрддрд╛рдЧреБрдВрддреАрдЪреЗ рдЖрд╣реЗ.

Git рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдмрд╣реБ-рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░рд╡реЗрд╢ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА ssh рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд╛рдкрд░рдгреЗ

рдЪрд▓рд╛ ssh рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд╡рд░ рдкрд░рдд рдЬрд╛рдК.

рддреБрдореНрд╣реА git рд╕рд╛рдареА ssh рдНрдХреНрд╕реЗрд╕ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡реНрд╣рд░ рдбреЗрдЯрд╛рдЪреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. ssh рджреНрд╡рд╛рд░реЗ рдЬреЛрдбрдгрд╛рд░рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд▓рд┐рдирдХреНрд╕ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕реНрд╡рддрдГрдЪреЗ рд▓реЙрдЧрд┐рди рд╡рд╛рдкрд░рддреЛ, рддреНрдпрд╛рдореБрд│реЗ рддреЗ ssh рдХреНрд▓рд╛рдпрдВрдЯрджреНрд╡рд╛рд░реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдК рд╢рдХрддрд╛рдд рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХрддрд╛рдд.
рдЕрд╢рд╛ рдкреНрд░рд╡реЗрд╢рд╛рд╡рд┐рд░реВрджреНрдз рдХреЛрдгрддреЗрд╣реА рдкреВрд░реНрдг рд╕рдВрд░рдХреНрд╖рдг рдирд╛рд╣реА.

рдкрд░рдВрддреБ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓реНрд╕рдордзреНрдпреЗ рд╕реНрд╡рд╛рд░рд╕реНрдп рдирд╕рд╛рд╡реЗ. рдорд╣рддреНрддреНрд╡рд╛рдЪреА рдорд╛рд╣рд┐рддреА рдлрдХреНрдд рдЧрд┐рдЯ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдордзреНрдпреЗ рд╕рд╛рдард╡рд▓реА рдЬрд╛рддреЗ. рдореНрд╣рдгреВрди, рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирджреНрд╡рд╛рд░реЗ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдгреЗ рд╢рдХреНрдп рдирд╛рд╣реА, рдкрд░рдВрддреБ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рдкреНрд░рдХрд▓реНрдк рдкрд╛рд╣рдгреНрдпрд╛рдкрд╛рд╕реВрди рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд▓рд┐рдирдХреНрд╕ рд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рддреЛ рднрд╛рдЧ рдШреЗрддреЛ рддреЗ рд╡рдЧрд│реВрди.
рд▓рд┐рдирдХреНрд╕ рдкрд░рд╡рд╛рдирдЧреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА рд╡рд╛рдкрд░рдгреЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рдирд┐рд╡рдб рдЖрд╣реЗ.

рдЖрдзреАрдЪ рдирдореВрдж рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, ssh рдкреНрд░рд╡реЗрд╢рд╛рд╕рд╛рдареА рдлрдХреНрдд рдПрдХ рдЦрд╛рддреЗ рд╡рд╛рдкрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ. рд╣реЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЕрдиреЗрдХ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЖрд╣реЗ, рдЬрд░реА рддреЗ рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ git рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреНрдпрд╛ рд╕реВрдЪреАрдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ.

рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЕрдзрд┐рдХрд╛рд░ рдЖрдгрд┐ рдорд╛рд▓рдХрд╛рдВрдЪреНрдпрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯрд╕рд╣ рдЦрд╛рд▓реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд░рдЪрдирд╛ рддрдпрд╛рд░ рдХреЗрд▓реА рдЖрд╣реЗ:

1) рдкреНрд░рдХрд▓реНрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛

dir1(proj1:proj1,0770)
dir2(proj2:proj2,0770)
dir3(proj3:proj3,0770)
...
рдЬреЗрдереЗ
dir1, dir2, dir3 - рдкреНрд░рдХрд▓реНрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛: рдкреНрд░рдХрд▓реНрдк 1, рдкреНрд░рдХрд▓реНрдк 2, рдкреНрд░рдХрд▓реНрдк 3.

proj1:proj1, proj2:proj2, proj3:proj3 рд╣реЗ рдЦрд╛рд╕ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рд▓рд┐рдирдХреНрд╕ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдЖрд╣реЗрдд рдЬреНрдпрд╛рдВрдирд╛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд┐рд░реЗрдХреНрдЯреНрд░реАрдЪреЗ рдорд╛рд▓рдХ рдореНрд╣рдгреВрди рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗ рдЖрд╣реЗ.

рд╕рд░реНрд╡ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдВрд╕рд╛рдареА рдкрд░рд╡рд╛рдирдЧреНрдпрд╛ 0770 рд╡рд░ рд╕реЗрдЯ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд - рдорд╛рд▓рдХ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдЧрдЯрд╛рд╕рд╛рдареА рдкреВрд░реНрдг рдкреНрд░рд╡реЗрд╢ рдЖрдгрд┐ рдЗрддрд░ рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдкреВрд░реНрдг рдмрдВрджреА.

2) рд╡рд┐рдХрд╕рдХ рдЦрд╛рддреА

╨а╨░╨╖╤А╨░╨▒╨╛╤В╤З╨╕╨║ 1: dev1:dev1,proj1,proj2
╨а╨░╨╖╤А╨░╨▒╨╛╤В╤З╨╕╨║ 2: dev2:dev2,proj2,proj3

рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдирд╛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдорд╛рд▓рдХрд╛рдЪрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрдЯ рдирд┐рдпреБрдХреНрдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рд╣реЗ рд▓рд┐рдирдХреНрд╕ рд╕рд░реНрд╡реНрд╣рд░ рдкреНрд░рд╢рд╛рд╕рдХрд╛рджреНрд╡рд╛рд░реЗ рдПрдХрд╛ рдЖрджреЗрд╢рд╛рдиреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, "рдбреЗрд╡реНрд╣рд▓рдкрд░ 1" рдкреНрд░реЛрдЬреЗрдХреНрдЯ proj1 рдЖрдгрд┐ proj2 рд╡рд░ рдХрд╛рдо рдХрд░рдд рдЖрд╣реЗ рдЖрдгрд┐ "Developer 2" proj2 рдЖрдгрд┐ proj3 рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╡рд░ рдХрд╛рдо рдХрд░рдд рдЖрд╣реЗ.

рдЬрд░ рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдкреИрдХреА рдХреЛрдгреАрд╣реА рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирджреНрд╡рд╛рд░реЗ ssh рджреНрд╡рд╛рд░реЗ рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗ, рддрд░ рддреНрдпрд╛рдВрдЪреЗ рдЕрдзрд┐рдХрд╛рд░ рдЬреНрдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреНрдпреЗ рддреЗ рд╕рд╣рднрд╛рдЧреА рд╣реЛрдд рдирд╛рд╣реАрдд рддреНрдпрд╛рдВрдЪреА рд╕рд╛рдордЧреНрд░реА рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рджреЗрдЦреАрд▓ рдкреБрд░реЗрд╕реЗ рдирд╕рддреАрд▓. рддреЛ рд╕реНрд╡рддрдГ рд╣реЗ рдмрджрд▓реВ рд╢рдХрдд рдирд╛рд╣реА.

рдпрд╛ рддрддреНрддреНрд╡рд╛рдЪрд╛ рдЖрдзрд╛рд░ рд▓рд┐рдирдХреНрд╕ рдЕрдзрд┐рдХрд╛рд░рд╛рдВрдЪреА рдореВрд▓рднреВрдд рд╕реБрд░рдХреНрд╖рд╛ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рд╣реА рдпреЛрдЬрдирд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЖрд╣реЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдпреЛрдЬрдирд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ.

рдЪрд▓рд╛ рд╕рд░рд╛рд╡рд╛рдХрдбреЗ рд╡рд│реВрдпрд╛.

рд▓рд┐рдирдХреНрд╕ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЧрд┐рдЯ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рддрдпрд╛рд░ рдХрд░рдгреЗ

рдЪрд▓рд╛ рддрдкрд╛рд╕реВрдпрд╛.

[root@server ~]# cd /var/
[root@server var]# useradd gitowner
[root@server var]# mkdir gitservertest
[root@server var]# chown gitowner:gitowner gitservertest
[root@server var]# adduser proj1
[root@server var]# adduser proj2
[root@server var]# adduser proj3
[root@server var]# adduser dev1
[root@server var]# adduser dev2
[root@server var]# passwd dev1
[root@server var]# passwd dev2

рдореА рд╣рд╛рддрд╛рдиреЗ рдЯрд╛рдИрдк рдХрд░реВрди рдХрдВрдЯрд╛рд│рд▓реЛрдп...

[root@server gitservertest]# sed "s/ /n/g" <<< "proj1 proj2 proj3" | while read u; do mkdir $u; chown $u:$u $u; chmod 0770 $u; done

[root@server gitservertest]# usermod -aG proj1 dev1
[root@server gitservertest]# usermod -aG proj2 dev1
[root@server gitservertest]# usermod -aG proj2 dev2
[root@server gitservertest]# usermod -aG proj3 dev2

рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рддреНрд░реА рдЖрд╣реЗ рдХреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирд╡рд░реВрди рдЗрддрд░ рд▓реЛрдХрд╛рдВрдЪреНрдпрд╛ рднрд╛рдВрдбрд╛рд░рд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рд╕рд╛рдордЧреНрд░реА рджреЗрдЦреАрд▓ рдкрд╛рд╣рдгреЗ рдЕрд╢рдХреНрдп рдЖрд╣реЗ.

[dev1@server ~]$ cd /var/gitservertest/proj3
-bash: cd: /var/gitservertest/proj3: Permission denied
[dev1@server ~]$ ls /var/gitservertest/proj3
ls: cannot open directory /var/gitservertest/proj3: Permission denied

Git рдордзреАрд▓ рдПрдХрд╛рдЪ рдкреНрд░рдХрд▓реНрдкрд╛рд╡рд░ рдПрдХрд╛рдзрд┐рдХ рд╡рд┐рдХрд╕рдХрд╛рдВрд╕рд╣ рд╕рд╣рдпреЛрдЧ рдХрд░рд╛

рдПрдХ рдкреНрд░рд╢реНрди рдЙрд░рддреЛ, рдЬрд░ рдПрдЦрд╛рджреНрдпрд╛ рд╡рд┐рдХрд╛рд╕рдХрд╛рдиреЗ рдирд╡реАрди рдлрд╛рдЗрд▓ рд╕рд╛рджрд░ рдХреЗрд▓реА, рддрд░ рдЗрддрд░ рд╡рд┐рдХрд╛рд╕рдХ рддреА рдмрджрд▓реВ рд╢рдХрдд рдирд╛рд╣реАрдд, рдХрд╛рд░рдг рддреЛ рд╕реНрд╡рддрдГ рддреНрдпрд╛рдЪрд╛ рдорд╛рд▓рдХ рдЖрд╣реЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, dev1), рдЖрдгрд┐ рдкреНрд░рдХрд▓реНрдкрд╛рдЪрд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдорд╛рд▓рдХ рдирд╛рд╣реА (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, proj1). рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╕рд░реНрд╡реНрд╣рд░-рд╕рд╛рдЗрдб рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рд╕рд░реНрд╡рдкреНрд░рдердо, рдЖрдореНрд╣рд╛рд▓рд╛ ".git" рдбрд┐рд░реЗрдХреНрдЯрд░реАрдЪреА рд░рдЪрдирд╛ рдХрд╢реА рдЖрд╣реЗ рдЖрдгрд┐ рдирд╡реАрди рдлрд╛рдЗрд▓реНрд╕ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдХреА рдирд╛рд╣реА рд╣реЗ рдЬрд╛рдгреВрди рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рд╕реНрдерд╛рдирд┐рдХ Git рднрд╛рдВрдбрд╛рд░ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ Git рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдврдХрд▓рдгреЗ

рдЪрд▓рд╛ рдХреНрд▓рд╛рдпрдВрдЯ рдорд╢реАрдирд╡рд░ рдЬрд╛рдКрдпрд╛.

Microsoft Windows [Version 6.1.7601]
(c) ╨Ъ╨╛╤А╨┐╨╛╤А╨░╤Ж╨╕╤П ╨Ь╨░╨╣╨║╤А╨╛╤Б╨╛╤Д╤В (Microsoft Corp.), 2009. ╨Т╤Б╨╡ ╨┐╤А╨░╨▓╨░ ╨╖╨░╤Й╨╕╤Й╨╡╨╜╤Л.

C:gittest>git init .
Initialized empty Git repository in C:/gittest/.git/

C:gittest>echo "test dev1 to proj2" > test1.txt

C:gittest>git add .

C:gittest>git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   test1.txt

C:gittest>git commit -am "new test file added"
[master (root-commit) a7ac614] new test file added
 1 file changed, 1 insertion(+)
 create mode 100644 test1.txt
 
C:gittest>git remote add origin "ssh://[email protected]/var/gitservertest/proj2"

C:gittest>git push origin master
dev1:[email protected]'s password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 243 bytes | 243.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://10.1.1.11/var/gitservertest/proj2
 * [new branch]      master -> master

C:gittest>

рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдирд╡реАрди рдлрд╛рдпрд▓реА рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдорд╛рд▓рдХреАрдЪреНрдпрд╛ рдЕрд╕рддрд╛рдд рдЬреНрдпрд╛рдиреЗ рдкреБрд╢ рдХреЗрд▓реЗ

[dev1@server proj2]$ tree
.
тФЬтФАтФА 1.txt
тФЬтФАтФА branches
тФЬтФАтФА config
тФЬтФАтФА description
тФЬтФАтФА HEAD
тФЬтФАтФА hooks
тФВ   тФЬтФАтФА applypatch-msg.sample
тФВ   тФЬтФАтФА commit-msg.sample
тФВ   тФЬтФАтФА post-update.sample
тФВ   тФЬтФАтФА pre-applypatch.sample
тФВ   тФЬтФАтФА pre-commit.sample
тФВ   тФЬтФАтФА prepare-commit-msg.sample
тФВ   тФЬтФАтФА pre-push.sample
тФВ   тФЬтФАтФА pre-rebase.sample
тФВ   тФФтФАтФА update.sample
тФЬтФАтФА info
тФВ   тФФтФАтФА exclude
тФЬтФАтФА objects
тФВ   тФЬтФАтФА 75
тФВ   тФВ   тФФтФАтФА dcd269e04852ce2f683b9eb41ecd6030c8c841
тФВ   тФЬтФАтФА a7
тФВ   тФВ   тФФтФАтФА ac6148611e69b9a074f59a80f356e1e0c8be67
тФВ   тФЬтФАтФА f0
тФВ   тФВ   тФФтФАтФА 82ea1186a491cd063925d0c2c4f1c056e32ac3
тФВ   тФЬтФАтФА info
тФВ   тФФтФАтФА pack
тФФтФАтФА refs
    тФЬтФАтФА heads
    тФВ   тФФтФАтФА master
    тФФтФАтФА tags

12 directories, 18 files
[dev1@server proj2]$ ls -l objects/75/dcd269e04852ce2f683b9eb41ecd6030c8c841
-r--r--r--. 1 dev1 dev1 54 Jun 20 14:34 objects/75/dcd269e04852ce2f683b9eb41ecd6030c8c841
[dev1@server proj2]$

рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА Git рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдмрджрд▓ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛, рддреЗрд╡реНрд╣рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╛рдЗрд▓реНрд╕ рдЖрдгрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪрд╛ рдорд╛рд▓рдХ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЕрдкрд▓реЛрдб рдХрд░рдгрд╛рд░рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЕрд╕рддреЛ. рдкрд░рдВрддреБ рдирдВрддрд░ рдпрд╛ рдлрд╛рдпрд▓реА рдЖрдгрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдВрдЪрд╛ рдЧрдЯ рджреЗрдЦреАрд▓ рдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдореБрдЦреНрдп рдЧрдЯрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗ, dev1 рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕рд╛рдареА dev1 рдЧрдЯ рдЖрдгрд┐ dev2 рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕рд╛рдареА dev2 рдЧрдЯ (рдбреЗрд╡реНрд╣рд▓рдкрд░ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪрд╛ рдореБрдЦреНрдп рдЧрдЯ рдмрджрд▓рд▓реНрдпрд╛рдиреЗ рдорджрдд рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА, рдХрд╛рд░рдг рдордЧ рддреБрдореНрд╣реА рдЕрдиреЗрдХ рдкреНрд░рдХрд▓реНрдкрд╛рдВрд╡рд░ рдХрд╕реЗ рдХрд╛рдо рдХрд░реВ рд╢рдХрддрд╛?). рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ dev2 рд╡рд╛рдкрд░рдХрд░реНрддрд╛ dev1 рджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдпрд▓реА рдмрджрд▓реВ рд╢рдХрдгрд╛рд░ рдирд╛рд╣реА, рдЬреНрдпрд╛рдореБрд│реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдд рдмрд┐рдШрд╛рдб рд╣реЛрдК рд╢рдХрддреЛ.

рд▓рд┐рдирдХреНрд╕ рдЪрд╛рдКрди - рдирд┐рдпрдорд┐рдд рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдлрд╛рдЗрд▓рдЪреЗ рдорд╛рд▓рдХ рдмрджрд▓рдгреЗ

рдлрд╛рдЗрд▓рдЪрд╛ рдорд╛рд▓рдХ рддрд┐рдЪреА рдорд╛рд▓рдХреА рдмрджрд▓реВ рд╢рдХрдд рдирд╛рд╣реА. рдкрд░рдВрддреБ рддреЛ рддреНрдпрд╛рдЪреНрдпрд╛ рдорд╛рд▓рдХреАрдЪреНрдпрд╛ рдлрд╛рдЗрд▓рдЪрд╛ рдЧрдЯ рдмрджрд▓реВ рд╢рдХрддреЛ рдЖрдгрд┐ рдирдВрддрд░ рд╣реА рдлрд╛рдЗрд▓ рддреНрдпрд╛рдЪ рдЧрдЯрд╛рддреАрд▓ рдЗрддрд░ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрджреНрд╡рд╛рд░реЗ рд╕реБрдзрд╛рд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рдЖрдореНрд╣рд╛рд▓рд╛ рддреЗрдЪ рд╣рд╡реЗ рдЖрд╣реЗ.

Git рд╣реБрдХ рд╡рд╛рдкрд░рдгреЗ

рд╣реБрдХрд╕рд╛рдареА рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реА рдкреНрд░рдХрд▓реНрдкрд╛рдЪреА рдореВрд│ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЖрд╣реЗ. рд╣реБрдХ рд╣реЗ рдПрдХ рдПрдХреНрдЭрд┐рдХреНрдпреВрдЯреЗрдмрд▓ рдЖрд╣реЗ рдЬреЗ рдкреБрд╢ рдХрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдЦрд╛рд▓реА рдЪрд╛рд▓рддреЗ. рд╣реЗ рдЬрд╛рдгреВрди рдШреЗрддрд▓реНрдпрд╛рд╕ рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдпреЛрдЬрдирд╛ рдЕрдВрдорд▓рд╛рдд рдЖрдгреВ рд╢рдХрддреЛ.

[dev1@server proj2]$ mv hooks/post-update{.sample,}
[dev1@server proj2]$ sed -i '2,$ s/^/#/' hooks/post-update
[dev1@server proj2]$ cat <<< 'find . -group $(whoami) -exec chgrp proj2 '"'"'{}'"'"' ;' >> hooks/post-update

рдХрд┐рдВрд╡рд╛ рдлрдХреНрдд

vi hooks/post-update

рдЪрд▓рд╛ рдХреНрд▓рд╛рдпрдВрдЯ рдорд╢реАрдирд╡рд░ рдкрд░рдд рдЬрд╛рдКрдпрд╛.

C:gittest>echo "dev1 3rd line" >> test1.txt

C:gittest>git commit -am "3rd from dev1, testing server hook"
[master b045e22] 3rd from dev1, testing server hook
 1 file changed, 1 insertion(+)

C:gittest>git push origin master
dev1:[email protected]'s password:
   d22c66e..b045e22  master -> master

рдЧрд┐рдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░, рдЖрдореНрд╣реА рдХрдорд┐рдЯ рдирдВрддрд░ рд╣реБрдХ рдкреЛрд╕реНрдЯ-рдЕрдкрдбреЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪреЗ рдСрдкрд░реЗрд╢рди рддрдкрд╛рд╕рддреЛ

[dev1@server proj2]$ find . ! -group proj2

- рд░рд┐рдХреНрдд, рд╕рд░реНрд╡ рдХрд╛рд╣реА рдареАрдХ рдЖрд╣реЗ.

Git рдордзреНрдпреЗ рджреБрд╕рд░рд╛ рд╡рд┐рдХрд╛рд╕рдХ рдХрдиреЗрдХреНрдЯ рдХрд░рдд рдЖрд╣реЗ

рдЪрд▓рд╛ рджреБрд╕рд▒реНрдпрд╛ рд╡рд┐рдХрд╕рдХрд╛рдЪреНрдпрд╛ рдХрд╛рдорд╛рдЪреЗ рдЕрдиреБрдХрд░рдг рдХрд░реВрдпрд╛.

рдХреНрд▓рд╛рдпрдВрдЯ рд╡рд░

C:gittest>git remote remove origin

C:gittest>git remote add origin "ssh://[email protected]/var/gitservertest/proj2"

C:gittest>echo "!!! dev2 added this" >> test1.txt

C:gittest>echo "!!! dev2 wrote" > test2.txt

C:gittest>git add test2.txt

C:gittest>git commit -am "dev2 added to test1 and created test2"
[master 55d49a6] dev2 added to test1 and created test2
 2 files changed, 2 insertions(+)
 create mode 100644 test2.txt

C:gittest>git push origin master
[email protected]'s password:
   b045e22..55d49a6  master -> master

рдЖрдгрд┐ рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ ...

[dev1@server proj2]$ find . ! -group proj2

- рдкреБрдиреНрд╣рд╛ рд░рд┐рдХреНрдд, рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдХрд░рддреЗ.

Git рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣рдЯрд╡рдгреЗ рдЖрдгрд┐ Git рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реВрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ

рдмрд░рдВ, рддреБрдореНрд╣реА рдкреБрдиреНрд╣рд╛ рдПрдХрджрд╛ рдЦрд╛рддреНрд░реА рдХрд░реВ рд╢рдХрддрд╛ рдХреА рд╕рд░реНрд╡ рдмрджрд▓ рдЬрддрди рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд.

C:gittest>rd /S /Q .
╨Я╤А╨╛╤Ж╨╡╤Б╤Б ╨╜╨╡ ╨╝╨╛╨╢╨╡╤В ╨┐╨╛╨╗╤Г╤З╨╕╤В╤М ╨┤╨╛╤Б╤В╤Г╨┐ ╨║ ╤Д╨░╨╣╨╗╤Г, ╤В╨░╨║ ╨║╨░╨║ ╤Н╤В╨╛╤В ╤Д╨░╨╣╨╗ ╨╖╨░╨╜╤П╤В ╨┤╤А╤Г╨│╨╕╨╝ ╨┐╤А╨╛╤Ж╨╡╤Б╤Б╨╛╨╝.

- рдЧрд┐рдЯ рдкреНрд░рдХрд▓реНрдк рд╣рдЯрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдлрдХреНрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреВрд░реНрдгрдкрдгреЗ рд╕рд╛рдл рдХрд░рд╛. рдпрд╛ рдХрдорд╛рдВрдбрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рд╕рдзреНрдпрд╛рдЪреА рдбрд┐рд░реЗрдХреНрдЯрд░реА рд╣рдЯрд╡рдгреЗ рдЕрд╢рдХреНрдп рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдирд┐рд░реНрдорд╛рдг рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рддреНрд░реБрдЯреАрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░реВрдпрд╛, рдкрд░рдВрддреБ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдиреЗрдордХреЗ рд╣реЗрдЪ рд╡рд░реНрддрди рд╣рд╡реЗ рдЖрд╣реЗ.

C:gittest>dir
 ╨б╨╛╨┤╨╡╤А╨╢╨╕╨╝╨╛╨╡ ╨┐╨░╨┐╨║╨╕ C:gittest

21.06.2019  08:43    <DIR>          .
21.06.2019  08:43    <DIR>          ..

C:gittest>git clone ssh://[email protected]/var/gitservertest/proj2
Cloning into 'proj2'...
[email protected]'s password:

C:gittest>cd proj2

C:gittestproj2>dir
 ╨б╨╛╨┤╨╡╤А╨╢╨╕╨╝╨╛╨╡ ╨┐╨░╨┐╨║╨╕ C:gittestproj2

21.06.2019  08:46    <DIR>          .
21.06.2019  08:46    <DIR>          ..
21.06.2019  08:46               114 test1.txt
21.06.2019  08:46                19 test2.txt
C:gittestproj2>type test1.txt
"test dev1 to proj2"
"dev1 added some omre"
"dev1 3rd line"
"!!! dev2 added this"

C:gittestproj2>type test2.txt
"!!! dev2 wrote"

Git рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░рдд рдЖрд╣реЗ

рдЖрддрд╛ рдЖрдкрдг рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдпрд╛ рдХреА Git рджреНрд╡рд╛рд░реЗ рджреЗрдЦреАрд▓ рджреБрд╕рд░рд╛ рд╡рд┐рдХрд╛рд╕рдХ Proj1 рдкреНрд░рдХрд▓реНрдкрд╛рдд рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА, рдЬреНрдпрд╛рд╡рд░ рддреЛ рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА.

C:gittestproj2>git remote remove origin

C:gittestproj2>git remote add origin "ssh://[email protected]/var/gitservertest/proj1"

C:gittestproj2>git push origin master
[email protected]'s password:
fatal: '/var/gitservertest/proj1' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

рдЖрддрд╛ рдЖрдореНрд╣реА рдкреНрд░рд╡реЗрд╢рд╛рд╕ рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ

[root@server ~]# usermod -aG proj1 dev2

рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдХрд░рддреЗ.

C:gittestproj2>git push origin master
[email protected]'s password:
To ssh://10.1.1.11/var/gitservertest/proj1
 * [new branch]      master -> master

рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА,

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдлрд╛рдЗрд▓реНрд╕ рдЖрдгрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рдбреАрдлреЙрд▓реНрдЯ рдкрд░рд╡рд╛рдирдЧреНрдпрд╛рдВрдордзреНрдпреЗ рд╕рдорд╕реНрдпрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, CentOS рдордзреНрдпреЗ рддреБрдореНрд╣реА рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛

setfacl -Rd -m o::5 -m g::7 /var/gitservertest

рддрд╕реЗрдЪ рд▓реЗрдЦрд╛рдд рддреБрдореНрд╣реА рдЫреЛрдЯреНрдпрд╛ рдЙрдкрдпреБрдХреНрдд рдЧреЛрд╖реНрдЯреАрдВрд╡рд░ рдЕрдбрдЦрд│реВ рд╢рдХрддрд╛:

  • рд▓рд┐рдирдХреНрд╕рдордзреНрдпреЗ рдбрд┐рд░реЗрдХреНрдЯрд░реА рдЯреНрд░реА рдХрд╢реА рддрдпрд╛рд░ рдХрд░рд╛рд╡реА
  • sed рдордзреАрд▓ рдкрддреНрддреНрдпрд╛рдВрдЪреА рд╢реНрд░реЗрдгреА рдПрдХрд╛ рдард░рд╛рд╡рд┐рдХ рдУрд│реАрдкрд╛рд╕реВрди рдлрд╛рдИрд▓рдЪреНрдпрд╛ рд╢реЗрд╡рдЯрдкрд░реНрдпрдВрдд рдХрд╢реА рдкрд╛рд╕ рдХрд░рд╛рдпрдЪреА, рдореНрд╣рдгрдЬреЗрдЪ рдкрд╣рд┐рд▓реА рдУрд│ рд╡рдЧрд│рддрд╛ рд╕рд░реНрд╡ рдУрд│реАрдВрдордзреНрдпреЗ sed рдордзреНрдпреЗ рдмрджрд▓ рдХрд░рд╛
  • рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрдВрдбрдордзреНрдпреЗ рд╢реЛрдз рд╕реНрдерд┐рддреА рдХрд╢реА рдЙрд▓рдЯрд╡рд╛рдпрдЪреА
  • рд▓рд┐рдирдХреНрд╕ рд╢реЗрд▓рдордзреНрдпреЗ рд╡рди-рд▓рд╛рдЗрдирд░ рд╡рд╛рдкрд░реВрди рд▓реВрдкрдордзреНрдпреЗ рдЕрдиреЗрдХ рдУрд│реА рдХрд╢рд╛ рдкрд╛рд╕ рдХрд░рд╛рдпрдЪреНрдпрд╛
  • рдмреЕрд╢ рдордзреНрдпреЗ рд╕рд┐рдВрдЧрд▓ рдХреЛрдЯреНрд╕ рдХрд╕реЗ рд╕реБрдЯрд╛рдпрдЪреЗ
  • рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирдордзреАрд▓ рд╕рд░реНрд╡ рд╕рд╛рдордЧреНрд░реАрд╕рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╢реА рд╣рдЯрд╡рд╛рдпрдЪреА
  • рдлрд╛рдЗрд▓ рдкреБрдиреНрд╣рд╛ рди рд▓рд┐рд╣рд┐рддрд╛ рдкреБрдирд░реНрдирд╛рдорд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА bash mv рдХрд╕реЗ рд╡рд╛рдкрд░рд╛рд╡реЗ

рдЖрдкрд▓реНрдпрд╛ рд▓рдХреНрд╖ рджрд┐рд▓реНрдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛