αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž…αŸ’αžšαžΎαž“αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ GIT

αž“αŸ…αž–αŸαž›αžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Git αžŸαŸ†αžŽαž½αžšαž€αžΎαžαž‘αžΎαž„αž’αŸ†αž–αžΈαž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“αž…αŸ†αž–αŸ„αŸ‡αž‚αž˜αŸ’αžšαŸ„αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αžαŸ’αž‰αž»αŸ†β€‹αž”αžΆαž“β€‹αžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœβ€‹αž”αž‰αŸ’αž αžΆβ€‹αž“αŸαŸ‡ αž αžΎαž™β€‹αž”αžΆαž“β€‹αžšαž€β€‹αžƒαžΎαž‰β€‹αžŠαŸ†αžŽαŸ„αŸ‡β€‹αžŸαŸ’αžšαžΆαž™β€‹αžŠαŸ‚αž›β€‹αž”αŸ†αž–αŸαž‰β€‹αžαžΆαž˜β€‹αžαž˜αŸ’αžšαžΌαžœβ€‹αž€αžΆαžšβ€‹αž‘αžΆαŸ†αž„β€‹αž’αžŸαŸ‹β€‹αžšαž”αžŸαŸ‹β€‹αžαŸ’αž‰αž»αŸ†αŸ– αžŸαžΆαž˜αž‰αŸ’αž‰ αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– αž“αž·αž„β€‹αž’αžΆαž…β€‹αž‘αž»αž€β€‹αž…αž·αžαŸ’αžβ€‹αž”αžΆαž“αŸ”

αž”αŸ†αžŽαž„αž”αŸ’αžšαžΆαžαŸ’αž“αžΆαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž‚αžΊαŸ–

  • αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αŸ’αž“αžΆαž€αŸ‹αŸ—αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž‚αžŽαž“αžΈαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ”
  • αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„αž˜αž½αž™αŸ”
  • αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαžΌαž…αž‚αŸ’αž“αžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”
  • αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αŸ’αž“αžΆαž€αŸ‹αŸ—αž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαž”αžΆαž“αžαŸ‚αž‚αž˜αŸ’αžšαŸ„αž„αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αžŠαŸ‚αž›αž‚αžΆαžαŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”
  • αžœαžΆαž‚αž½αžšαžαŸ‚αž’αžΆαž…αžαž—αŸ’αž‡αžΆαž”αŸ‹αžαžΆαž˜αžšαž™αŸˆαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αž αžΎαž™αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αžαžΆαž˜αžšαž™αŸˆαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αžŽαŸ’αžŠαžΆαž‰αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸ„αŸ‡αž‘αŸαŸ”

αžœαžΆαž€αŸαž“αžΉαž„αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αž•αž„αžŠαŸ‚αžšαŸ–

  • αž•αŸ’αžαž›αŸ‹αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αžΆαž“αž”αžΆαž“αžαŸ‚αž…αŸ†αž–αŸ„αŸ‡αž”αž»αž‚αŸ’αž‚αž›αžŠαŸ‚αž›αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„
  • αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸ…αž€αŸ’αž“αž»αž„ Git

αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ…αž“αŸƒαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ GIT

αž‡αžΆαžŠαŸ†αž”αžΌαž„ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŠαžΉαž„αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž–αžΈ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ…αž“αŸƒαž–αž·αž’αžΈαž€αžΆαžš Git αŸ”

  • ssh - αž‚αžŽαž“αžΈαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‡αžΆαž–αž·αžŸαŸαžŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αž”αŸ’αžšαžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”
    • αžœαžΆαž‡αžΆαžšαžΏαž„αž…αž˜αŸ’αž›αŸ‚αž€αžŠαŸ‚αž› Git αž˜αž·αž“αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž–αžΈαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‚αžŽαž“αžΈαž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αž”αŸ’αžšαžΎαžƒαŸ’αž›αžΆαŸ†αž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž“αŸαŸ‡αž˜αž·αž“αž”αŸ†αž–αŸαž‰αžαžΆαž˜αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ”
    • αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž”αŸ’αžšαžΎβ€‹αž‚αžŽαž“αžΈβ€‹αž…αŸ’αžšαžΎαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžαžΎβ€‹αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž€αŸ†αžŽαžαŸ‹β€‹αž€αžΆαžšβ€‹αž…αžΌαž›β€‹αž”αŸ’αžšαžΎβ€‹αžšαž”αžŸαŸ‹β€‹αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎβ€‹αž‘αŸ…β€‹αž€αžΆαž“αŸ‹β€‹αžαŸ‚β€‹αžαžβ€‹αž˜αž½αž™β€‹αž…αŸ†αž“αž½αž“β€‹αžŠαŸ„αž™β€‹αžšαž”αŸ€αž”β€‹αžŽαžΆ?
      • αž€αžΆαžšαž”αž·αž‘αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžαž•αŸ’αž‘αŸ‡αž‚αžΊαž˜αž·αž“αžŸαž˜αžšαž˜αŸ’αž™αž‘αŸαž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž€αžΆαžšαžŸαžšαžŸαŸαžšαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”
      • αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ symlinks αž–αžΈ home directory αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž€αŸαž–αž·αž”αžΆαž€αžŠαŸ‚αžš αž–αŸ’αžšαŸ„αŸ‡ Git αž˜αž·αž“αž”αž€αžŸαŸ’αžšαžΆαž™αž–αž½αž€αžœαžΆαž‡αžΆ links
      • αž’αŸ’αž“αž€αž’αžΆαž…αžŠαžΆαž€αŸ‹αž€αž˜αŸ’αžšαž·αžαž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž’αžΆαž“αžΆαž–αŸαž‰αž›αŸαž‰αžαžΆαžœαžΆαž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž“αž·αž…αŸ’αž…αž“αŸ„αŸ‡αž‘αŸαŸ”
        • αž‡αžΆαž‘αžΌαž‘αŸ…αž’αŸ’αž“αž€αž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ‚αž”αž“αŸαŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚
          • αžŠαŸ†αž”αžΌαž„ αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αžŸαž˜αŸ’αžšαŸαž…β€‹αž…αž·αžαŸ’αžβ€‹αžŠαŸβ€‹αž›αŸ†αž”αžΆαž€β€‹αž˜αž½αž™β€‹αž…αŸ†αž“αž½αž“β€‹αžšαž½αž…β€‹αž‘αŸ…β€‹αž αžΎαž™
          • αž αžΎαž™αž‘αžΈαž–αžΈαžš αž“αŸαŸ‡αž’αžΆαž…αž‡αŸ€αžŸαž”αžΆαž“αŸ”

    αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžœαžΆαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αžΉαž„αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŽαžΆαž˜αž½αž™αž”αžΆαž“αž‘αŸ?.. αž‡αžΆαž‘αžΌαž‘αŸ… αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αŸαŸ‡αž˜αž·αž“αž’αžΆαž…αž…αŸ’αžšαžΆαž“αž…αŸ„αž›αž”αžΆαž“αž‘αŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž™αž›αŸ‹αž…αŸ’αž”αžΆαžŸαŸ‹αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž”αŸ’αžšαžΎαžœαžΆαŸ” αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αŸαŸ‡αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž–αž·αž…αžΆαžšαžŽαžΆαžŠαŸ„αž™αžŸαž„αŸ’αžαŸαž”αž’αŸ†αž–αžΈαž‡αž˜αŸ’αžšαžΎαžŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž“αžΉαž„αž˜αžΆαž“αž’αŸ’αžœαžΈαžŸαžΆαž˜αž‰αŸ’αž‰αž‡αžΆαž„αž“αŸαŸ‡αŸ”

  • αž–αž·αž’αžΈαž€αžΆαžšαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ git αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžšαž½αž˜αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ sshfs αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž…αŸ’αžšαžΎαž“αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαŸ†αžαžΆαž“αŸ‹αž‚αžΊαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„αž€αžšαžŽαžΈαž˜αž»αž“αžŠαŸ‚αžšαŸ”
  • http - αž”αžΆαž“αžαŸ‚αž’αžΆαž“
  • git αž‚αžΊαž”αžΆαž“αžαŸ‚αž’αžΆαž“
  • https - αž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž“αŸ’αžαŸ‚αž˜ αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž•αŸ’αž‘αžΆαŸ†αž„αž”αž‰αŸ’αž‡αžΆαž˜αž½αž™αž…αŸ†αž“αž½αž“ αžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹... αžœαžΆαž˜αžΎαž›αž‘αŸ…αž’αžΆαž…αž‘αŸ…αžšαž½αž… αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž˜αžΆαž“αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αŸ”

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αž·αž’αžΈαž€αžΆαžš ssh αžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž…αŸ’αžšαžΎαž“αž“αžΆαž€αŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Git

αž…αžΌαžšαž™αžΎαž„αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž–αž·αž’αžΈαž€αžΆαžš ssh αŸ”

αžŠαŸ„αž™αžŸαžΆαžšαž’αŸ’αž“αž€αž”αŸ’αžšαžΎ ssh access αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ git αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αžΆαž“αžΆαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αžαžΆαž˜αžšαž™αŸˆ ssh αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αžΆαžšαž…αžΌαž›αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž›αžΈαž“αž»αž… αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž–αž½αž€αž‚αŸαž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αžαžΆαž˜αžšαž™αŸˆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ ssh αž“αž·αž„αž…αžΌαž›αž”αŸ’αžšαžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”
αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž€αžΆαžšαž–αžΆαžšαž–αŸαž‰αž›αŸαž‰αž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž”αŸ‚αž”αž“αŸαŸ‡αž‘αŸαŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž·αž“αž‚αž½αžšαž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎαž―αž€αžŸαžΆαžšαž›αžΈαž“αž»αž…αž‘αŸαŸ” αž–αŸαžαŸŒαž˜αžΆαž“αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„ git αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžαžΆαž˜αžšαž™αŸˆαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž›αžΈαž“αž»αž…αžŠαžΎαž˜αŸ’αž”αžΈαž αžΆαž˜αžƒαžΆαžαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž·αž“αž±αŸ’αž™αž˜αžΎαž›αž‚αž˜αŸ’αžšαŸ„αž„ αžŠαŸ„αž™αž˜αž·αž“αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž’αŸ’αž“αž€αžŠαŸ‚αž›αž‚αžΆαžαŸ‹αž…αžΌαž›αžšαž½αž˜αŸ”
αž‡αž˜αŸ’αžšαžΎαžŸαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž‚αžΊαžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž›αžΈαž“αž»αž…αŸ”

αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžšαž½αž…αž˜αž€αž αžΎαž™ αžœαžΆαž’αžΆαž…αž”αŸ’αžšαžΎαž‚αžŽαž“αžΈαžαŸ‚αž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎ 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 αž αžΎαž™ "αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ 2" αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ proj2 αž“αž·αž„ proj3 αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŽαžΆαž˜αž½αž™αž—αŸ’αž‡αžΆαž”αŸ‹αžαžΆαž˜αžšαž™αŸˆ ssh αžαžΆαž˜αžšαž™αŸˆαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αž“αŸ„αŸ‡αžŸαž·αž‘αŸ’αž’αž·αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž“αžΉαž„αž˜αž·αž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αž˜αžΆαžαž·αž€αžΆαž“αŸƒαžαžαž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž˜αž·αž“αž…αžΌαž›αžšαž½αž˜αž€αŸαžŠαŸ„αž™αŸ” αž‚αžΆαžαŸ‹αž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαŸ’αž›αž½αž“αž―αž„αž”αžΆαž“αž‘αŸαŸ”

αžŠαŸ„αž™αžŸαžΆαžšαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒαžŸαž·αž‘αŸ’αž’αž·αž›αžΈαž“αž»αž… αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αž‚αžΊαž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αŸ”

αž…αžΌαžšβ€‹αž”αž“αŸ’αžβ€‹αž’αž“αž»αžœαžαŸ’αžαŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžƒαŸ’αž›αžΆαŸ†αž„ 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 αžŠαŸ‚αž›αž’αžΆαž…αž“αžΆαŸ†αž‘αŸ…αžŠαž›αŸ‹αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αž˜αž»αžαž„αžΆαžšαŸ”

Linux chown - αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž˜αŸ’αž…αžΆαžŸαŸ‹αž―αž€αžŸαžΆαžšαžŠαŸ„αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž˜αŸ’αž˜αžαžΆαŸ”

αž˜αŸ’αž…αžΆαžŸαŸ‹αž―αž€αžŸαžΆαžšαž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αž˜αŸ’αž˜αžŸαž·αž‘αŸ’αž’αž·αžšαž”αžŸαŸ‹αžœαžΆαž”αžΆαž“αž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‚αžΆαžαŸ‹αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αŸ’αžšαž»αž˜αž“αŸƒαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž‡αžΆαž€αž˜αŸ’αž˜αžŸαž·αž‘αŸ’αž’αž·αžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž―αž€αžŸαžΆαžšαž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αžŠαŸ„αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ”

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Git hook

αžαžαž€αžΆαžšαž„αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αŸ†αž–αž€αŸ‹αž‚αžΊαž‡αžΆαžαžαž«αžŸαž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αŸ” hook αž‚αžΊαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αžšαŸ„αž˜αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαžšαž»αž‰αŸ” αžŠαŸ„αž™αžŠαžΉαž„αžšαžΏαž„αž“αŸαŸ‡ αž™αžΎαž„αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž•αŸ‚αž“αž€αžΆαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

[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

αž αžΎαž™αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡αž“αŸ…αž›αžΎ server...

[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 αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž“αŸ’αž‘αžΆαžαŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αž”αž“αŸ’αž‘αžΆαžαŸ‹αž‘αžΈαž˜αž½αž™αŸ”
  • αžšαž”αŸ€αž”αžŠαžΆαž€αŸ‹αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸαž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŸαŸ’αžœαŸ‚αž„αžšαž€αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž… αžŸαŸ’αžœαŸ‚αž„αžšαž€
  • αžšαž”αŸ€αž”αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹αžαŸ‚αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ‚αž›αž›αžΈαž“αž»αž…
  • αžαžΎαž’αŸ’αžœαžΎαžŠαžΌαž…αž˜αŸ’αžαŸαž…αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸαž…αž…αŸαž‰αž–αžΈαžŸαž˜αŸ’αžšαž„αŸ‹αžαŸ‚αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ bash
  • αžšαž”αŸ€αž”αž›αž»αž”αžαžαžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΆαžαž·αž€αžΆαžšαž”αžŸαŸ‹αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ windows
  • αžšαž”αŸ€αž”αž”αŸ’αžšαžΎ bash mv αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αž―αž€αžŸαžΆαžšαžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαžšαžŸαŸαžšαž˜αŸ’αžαž„αž‘αŸ€αž

αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹