Mokhatlo oa phihlello ea basebelisi ba bangata ho seva sa GIT

Ha o kenya le ho lokisa seva sa Git, potso e hlaha mabapi le ho hlophisa phihlello ea basebelisi ba 'maloa ho merero e mengata. Ke batlisisitse taba ena mme ka fumana tharollo e fihlelang litlhoko tsohle tsa ka: e bonolo, e bolokehile, e ka tšeptjoa.

Litakatso tsa ka ke:

  • mosebelisi e mong le e mong o hokahana le ak'haonte ea hae
  • Basebelisi ba 'maloa ba ka sebetsa morerong o le mong
  • mosebelisi ea tšoanang a ka sebetsa mererong e mengata
  • mosebelisi e mong le e mong o na le phihlello ea merero eo a sebetsang ho eona feela
  • Ho lokela ho khoneha ho hokahanya ka mohala oa taelo, eseng feela ka mofuta o itseng oa sebopeho sa webo

Hape ho ka ba monate:

  • fana ka tumello ea ho bala feela ho batho ba laolang
  • Laola litokelo tsa phihlello ea basebelisi habonolo ho Git

Kakaretso ea likhetho tse ka khonehang tsa ho fihlella seva sa GIT

Pele ho tsohle, o hloka ho tseba hore na o khetha eng, ka hona mona ke kakaretso e potlakileng ea liprothokholo tsa Git.

  • ssh - ak'haonte e entsoeng ka ho khetheha e sebelisoa ho fihlella seva.
    • Hoa makatsa hore ebe Git ha e qhelele ka thoko ho likhothaletso tsa eona ts'ebeliso ea ak'haonte e le 'ngoe ho fihlella polokelo eohle. Sena ha se fihlelle litlhoko tsa ka ho hang.
    • U ka sebelisa li-account tse ngata, empa u ka fokotsa phihlello ea basebelisi joang ho li-directory tse itseng feela?
      • Ho koala bukana ea lapeng ha hoa lokela, hobane ho thata ho hlophisa phihlello ea ho ngola moo bakeng sa basebelisi ba bang
      • Ho sebelisa li-symlink ho tsoa bukeng ea hau ea lapeng ho boetse ho thata hobane Git ha e li hlalose e le lihokelo
      • Hoa khoneha ho thibela ho fumana mofetoleli, empa ha ho na tiiso e feletseng ea hore e tla sebetsa kamehla
        • Ka kakaretso u ka hokahanya mofetoleli oa hau oa taelo bakeng sa basebelisi ba joalo, empa
          • pele, ena e se e ntse e le mofuta o mong oa qeto e thata,
          • 'me ea bobeli, sena se ka qojoa.

    Empa mohlomong ha se bothata hore mosebedisi o tla khona ho phethahatsa litaelo leha e le life? Re tla khutlela mokhoeng ona hamorao, empa hajoale re tla hlahloba ka bokhutšoanyane mekhoa e meng, mohlomong ho tla ba le ho hong ho bonolo.

  • Protocol ea lehae ea git e ka sebelisoa hammoho le sshfs, basebelisi ba bangata ba ka sebelisoa, empa ha e le hantle e tšoana le nyeoe e fetileng.
  • http - bala feela
  • git e baloa feela
  • https - ho thata ho kenya, o hloka software e eketsehileng, mofuta o mong oa phanele ea taolo ho hlophisa phihlello ea basebelisi ... e shebahala e ka khoneha, empa ka tsela e itseng ntho e 'ngoe le e' ngoe e rarahane.

Ho sebelisa ssh protocol ho hlophisa phihlello ea basebelisi ba bangata ho seva sa Git

Ha re khutlele ho ssh protocol.

Kaha o sebelisa phihlello ea ssh bakeng sa git, o hloka ho netefatsa ts'ireletso ea data ea seva. Mosebelisi ea hokahanyang ka ssh o sebelisa ho kena ha hae ho seva sa Linux, kahoo a ka hokela ka ssh moreki mme a fihlella mohala oa taelo oa seva.
Ha ho na tšireletso e felletseng khahlanong le phihlello e joalo.

Empa mosebelisi ha a lokela ho thahasella lifaele tsa Linux. Lintlha tsa bohlokoa li bolokiloe feela sebakeng sa polokelo ea git. Ka hona, hoa khoneha hore u se ke ua thibela ho kena ka mohala oa taelo, empa u sebelisa lisebelisoa tsa Linux ho thibela mosebedisi ho shebella merero, ntle le tseo a kopanelang ho tsona.
Khetho e hlakileng ke ho sebelisa sistimi ea tumello ea Linux.

Joalokaha ho se ho boletsoe, hoa khoneha ho sebelisa ak'haonte e le 'ngoe feela bakeng sa phihlello ea ssh. Tlhophiso ena ha e bolokehe ho basebelisi ba 'maloa, leha e kenyelelitsoe lethathamong la likhetho tse khothaletsoang tsa git.

Ho kenya ts'ebetsong litlhoko tse fanoeng qalong ea sengoloa, sebopeho se latelang sa directory se entsoe ka kabelo ea litokelo le beng:

1) litataiso tsa morero

dir1(proj1:proj1,0770)
dir2(proj2:proj2,0770)
dir3(proj3:proj3,0770)
...
moo
dir1, dir2, dir3 - litataiso tsa morero: morero oa 1, morero oa 2, morero oa 3.

proj1:proj1, proj2:proj2, proj3:proj3 ke basebelisi ba Linux ba entsoeng ka ho khetheha ba abetsoeng ho ba beng ba libuka tse tsamaisanang tsa morero.

Litumello tsa li-directory tsohle li behiloe ho 0770 - phihlello e felletseng bakeng sa mong'a le sehlopha sa hae le thibelo e felletseng bakeng sa batho bohle.

2) liakhaonto tsa nts'etsopele

Разработчик 1: dev1:dev1,proj1,proj2
Разработчик 2: dev2:dev2,proj2,proj3

Ntlha ea bohlokoa ke hore bahlahisi ba abeloa sehlopha se eketsehileng sa mong'a mochine oa tsamaiso ea morero o lumellanang. Sena se etsoa ke molaoli oa seva ea Linux ka taelo e le 'ngoe.

Mohlaleng ona, "Developer 1" e sebetsa ho proj1 le proj2, mme "Developer 2" e sebetsa ho proj2 le proj3.

Haeba e mong oa Bahlahisi ba hokahana ka ssh ka mohala oa taelo, litokelo tsa bona li ke ke tsa lekana le ho sheba litaba tsa bukana ea merero eo ba sa keneng ho eona. A ke ke a fetola sena ka boeena.

Kaha motheo oa molao-motheo ona ke ts'ireletso ea mantlha ea litokelo tsa Linux, morero ona oa tšepahala. Ho phaella moo, morero o bonolo haholo ho o tsamaisa.

Ha re tsoeleng pele ho itloaetsa.

Ho theha polokelo ea Git ho seva sa Linux

Ha re hlahlobeng.

[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

Ke khathetse ke ho thaepa ka letsoho...

[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

Re na le bonnete ba hore ha ho khonehe ho fihlella lipolokelo tsa batho ba bang ho tsoa moleng oa taelo esita le ho sheba litaba tsa bona.

[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

Sebelisana 'moho le bahlahisi ba bangata morerong o le mong ho Git

Potso e le 'ngoe e sala, haeba moqapi a le mong a hlahisa faele e ncha, joale bahlahisi ba bang ba ke ke ba e fetola, hobane ke eena mong'a eona (mohlala, dev1), eseng mong'a morero (mohlala, proj1). Kaha re na le polokelo ea lehlakore la seva, pele ho tsohle, re hloka ho tseba hore na ".git" directory e hlophisitsoe joang le hore na lifaele tse ncha li entsoe.

Ho theha polokelo ea sebaka sa Git le ho sutumelletsa ho seva sa Git

Ha re feteleng ho mochini oa bareki.

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>

Ka nako e ts'oanang, lifaele tse ncha li bōptjoa ho seva, 'me ke tsa mosebedisi ea entseng push

[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]$

Ha o kenya liphetoho ho seva sa Git, lifaele le li-directory tse ling lia etsoa, ​​​​'me ha e le hantle mong'a tsona ke mosebelisi ea kenyang. Empa joale sehlopha sa lifaele le litsamaiso tsena li boetse li lumellana le sehlopha se seholo sa mosebelisi enoa, ke hore, sehlopha sa dev1 bakeng sa mosebelisi oa dev1 le sehlopha sa dev2 bakeng sa mosebelisi oa dev2 (ho fetola sehlopha se seholo sa mosebelisi ho ke ke ha thusa, hobane joale u ka sebetsa joang mererong e mengata?). Tabeng ena, user dev2 e ke ke ea khona ho fetola lifaele tse entsoeng ke mosebedisi dev1, e leng se ka lebisang ho senyeha ha tshebetso.

Linux chown - ho fetola mong'a faele ka mosebelisi ea tloaelehileng

Mong'a faele a ke ke a fetola mong'a eona. Empa a ka fetola sehlopha sa faele eo e leng ea hae, ebe faele ena e ka fetoloa ke basebelisi ba bang ba sehlopheng se le seng. Ke seo re se hlokang.

Ho sebelisa Git hook

Lenane la ho sebetsa bakeng sa hook ke mohloli oa motheo oa morero. hook ke sesebelisoa se sebetsang ka tlas'a mosebelisi ea sutumetsang. Ka ho tseba sena, re ka phethahatsa merero ea rona.

[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

kapa feela

vi hooks/post-update

Ha re khutlele mochineng oa bareki.

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

Ho seva sa Git, re hlahloba ts'ebetso ea hook post-update script kamora boitlamo

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

- ha ho letho, tsohle li hantle.

Ho hokela moqapi oa bobeli ho Git

Ha re etsise mosebetsi oa moqapi oa bobeli.

Ho moreki

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

'Me ka nako e ts'oanang, ho seva ...

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

- ha ho letho hape, tsohle lia sebetsa.

Ho hlakola morero oa Git le ho khoasolla projeke ho tsoa ho seva sa Git

Hantle, u ka boela ua etsa bonnete ba hore liphetoho tsohle li bolokiloe.

C:gittest>rd /S /Q .
Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.

- ho hlakola morero oa Git, hlakola bukana ka botlalo. Ha re mamelle phoso e hlahisitsoeng, kaha ho ke ke ha khoneha ho hlakola bukana ea hajoale ho sebelisa taelo ena, empa sena ke sona hantle boitšoaro boo re bo hlokang.

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"

Ho arolelana phihlello ho Git

Joale a re etse bonnete ba hore esita le ka Git moqapi oa bobeli a ke ke a khona ho fumana morero oa Proj1, oo a sa sebetseng ho oona.

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.

Hona joale re lumella ho kena

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

'me ka mor'a moo tsohle lia sebetsa.

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

Bakeng sa boitsebiso bo eketsehileng,

Ho feta moo, haeba ho na le bothata ka tumello ea kamehla ha u theha lifaele le li-directory, ho CentOS u ka sebelisa taelo.

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

Hape sehloohong sena u ka 'na ua khoptjoa ke lintho tse nyenyane tse molemo:

  • mokhoa oa ho haha ​​​​sefate sa directory ho Linux
  • mokhoa oa ho fetisa liaterese tse ngata ho sed ho tloha moleng o itseng ho isa pheletsong ea faele, ke hore, ho fetola sed meleng eohle ntle le mola oa pele.
  • Mokhoa oa ho khelosa boemo ba ho batla ho Linux fumana
  • Mokhoa oa ho fetisa mela e mengata ka har'a lupu u sebelisa mohala o le mong ka har'a khetla ea Linux
  • Mokhoa oa ho baleha mantsoe a qotsitsoeng a le mong ho bash
  • mokhoa oa ho hlakola bukana e nang le litaba tsohle tsa eona lifensetereng tsa taelo
  • Mokhoa oa ho sebelisa bash mv ho reha file hape ntle le ho e ngola hape

Kea le leboha ka tlhokomelo ea hao.

Source: www.habr.com

Eketsa ka tlhaloso