рдЬреАрдЖрдИрдЯреА рд╕рд░реНрд╡рд░ рддрдХ рдмрд╣реБ-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣реБрдВрдЪ рдХрд╛ рд╕рдВрдЧрдарди

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

рдореЗрд░реА рдЗрдЪреНрдЫрд╛рдПрдБ рд╣реИрдВ:

  • рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЦрд╛рддреЗ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ
  • рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  • рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ
  • рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ рдЬрд┐рди рдкрд░ рд╡рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
  • рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ

рдпрд╣ рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:

  • рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ
  • Git рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣реБрдВрдЪ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ

рдЬреАрдЖрдИрдЯреА рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди

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

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

    рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛?.. рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рдкрджреНрдзрддрд┐ рд╕реЗ рдЗрдВрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдпрд╣ рд╕рдордЭ рд▓реЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдкрд░ рд▓реМрдЯреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрднреА рд╣рдо рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд╢рд╛рдпрдж рдХреБрдЫ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

  • Git рд╕реНрдерд╛рдиреАрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ sshfs рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХрд╛рдзрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реА
  • http - рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП
  • рдЧрд┐рдЯ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ
  • https - рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣реБрдВрдЪ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖... рдпрд╣ рд╕рдВрднрд╡ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рд╕рдм рдХреБрдЫ рдЬрдЯрд┐рд▓ рд╣реИред

Git рд╕рд░реНрд╡рд░ рддрдХ рдмрд╣реБ-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣реБрдВрдЪ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ssh рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЖрдЗрдП ssh рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред

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

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

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрд╕рдПрд╕рдПрдЪ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд 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 рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ "рдбреЗрд╡рд▓рдкрд░ 2" рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ proj2 рдФрд░ proj3 рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

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

рдЪреВрдБрдХрд┐ рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЖрдзрд╛рд░ рд▓рд┐рдирдХреНрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд░рдХреНрд╖рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдпреЛрдЬрдирд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рдЖрдЗрдП рдЕрднреНрдпрд╛рд╕ рдХреА рдУрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВред

Linux рд╕рд░реНрд╡рд░ рдкрд░ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдирд╛

рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

[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 рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдЦрд░рд╛рдмреА рдЖ рд╕рдХрддреА рд╣реИред

рд▓рд┐рдирдХреНрд╕ рдЪрд╛рдЙрди - рдПрдХ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЛ рдмрджрд▓рдирд╛

рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕реНрд╡рд╛рдореА рдЙрд╕рдХрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛. рд▓реЗрдХрд┐рди рд╡рд╣ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдореВрд╣ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдХреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрд╕реА рд╕рдореВрд╣ рдореЗрдВ рдореМрдЬреВрдж рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдпрд╣реА рдЪрд╛рд╣рд┐рдП.

рдЧрд┐рдЯ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд╣реБрдХ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИред рд╣реБрдХ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИ рдЬреЛ рдкреБрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдиреАрдЪреЗ рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдирдХрд░ рд╣рдо рдЕрдкрдиреА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

[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

Git рд╕рд░реНрд╡рд░ рдкрд░, рд╣рдо рдХрдорд┐рдЯ рдХреЗ рдмрд╛рдж рд╣реБрдХ рдкреЛрд╕реНрдЯ-рдЕрдкрдбреЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ

[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 .
╨Я╤А╨╛╤Ж╨╡╤Б╤Б ╨╜╨╡ ╨╝╨╛╨╢╨╡╤В ╨┐╨╛╨╗╤Г╤З╨╕╤В╤М ╨┤╨╛╤Б╤В╤Г╨┐ ╨║ ╤Д╨░╨╣╨╗╤Г, ╤В╨░╨║ ╨║╨░╨║ ╤Н╤В╨╛╤В ╤Д╨░╨╣╨╗ ╨╖╨░╨╜╤П╤В ╨┤╤А╤Г╨│╨╕╨╝ ╨┐╤А╨╛╤Ж╨╡╤Б╤Б╨╛╨╝.

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

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 рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░реЗрдВ
  • рд▓рд┐рдирдХреНрд╕ рдЦреЛрдЬ рдореЗрдВ рдЦреЛрдЬ рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреИрд╕реЗ рдкрд▓рдЯреЗрдВ
  • рд▓рд┐рдирдХреНрд╕ рд╢реЗрд▓ рдореЗрдВ рдПрдХ-рд▓рд╛рдЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд▓реВрдк рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рд▓рд╛рдЗрдиреЗрдВ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ
  • рдмреИрд╢ рдореЗрдВ рд╕рд┐рдВрдЧрд▓ рдХреЛрдЯреНрд╕ рд╕реЗ рдХреИрд╕реЗ рдмрдЪреЗрдВ
  • рд╡рд┐рдВрдбреЛрдЬрд╝ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдХрд┐рд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдЙрд╕рдХреА рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╣рдЯрд╛рдПрдВ
  • рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЛрдмрд╛рд░рд╛ рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдЙрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрд╢ рдПрдорд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ