Kurongeka kwevazhinji-mushandisi kuwana kune iyo GIT server

Paunenge uchiisa nekugadzirisa sevha yeGit, mubvunzo unomuka nezve kuronga kuwana kwevashandisi vakati wandei kumapurojekiti akati wandei. Ndakatsvaga nyaya yacho ndikawana mhinduro yaizadzisa zvese zvandinoda: zviri nyore, zvakachengeteka, zvakavimbika.

Zvandinoshuvira ndezvi:

  • mushandisi wega wega anobatana neakaundi yake
  • Vazhinji vashandisi vanogona kushanda pane imwe purojekiti
  • mushandisi mumwe chete anogona kushanda pamapurojekiti akawanda
  • mushandisi wega wega anowana chete kune iwo mapurojekiti aanoshanda paari
  • Izvo zvinofanirwa kuve zvichigoneka kubatana kuburikidza nemutsara wekuraira, uye kwete chete kuburikidza neimwe mhando yewebhu interface

Zvingave zvakare zvakanaka:

  • ipa mvumo yekuverenga-chete kune vanodzora vanhu
  • Gadzirisa kodzero yekuwana mushandisi muGit

Mhedziso yezvinogoneka sarudzo dzekuwana iyo GIT server

Chekutanga pane zvese, iwe unofanirwa kuziva yekusarudza kubva, saka heino kukurumidza kutarisisa kweGit protocol.

  • ssh - yakanyatsogadzirwa mushandisi account inoshandiswa kuwana sevha.
    • Zvinoshamisa kuti Git haina kusarudzira kubva mukurudziro yayo kushandiswa kweakaundi imwe chete kuwana ese marepositori. Izvi hazvizadzise zvandinoda zvachose.
    • Iwe unogona kushandisa akawanda maakaundi, asi iwe ungadzikamisa sei mushandisi kuwana kune mamwe madhairekitori chete?
      • Kuvhara mudhairekitori repamba hakuna kukodzera, nekuti zvakaoma kuronga kupinda kwekunyora ikoko kune vamwe vashandisi
      • Kushandisa symlinks kubva kudhairekitori rako repamba zvakare kwakaoma nekuti Git haidudzire semanongedzo
      • Zvinokwanisika kurambidza kupinda kune muturikiri, asi hapana chivimbiso chakazara chokuti ichagara ichishanda
        • Iwe unogona kazhinji kubatanidza muturikiri wako wekuraira kune vashandisi vakadaro, asi
          • chekutanga, iyi yatove imwe mhando yesarudzo yakaoma,
          • uye chechipiri, izvi zvinogona circumvented.

    Asi pamwe haisi dambudziko kuti mushandisi achakwanisa kuita chero mirairo? Tichadzokera kune iyi nzira gare gare, asi ikozvino tichatarisa muchidimbu dzimwe nzira, pamwe pachava nechinhu chiri nyore.

  • Iyo git yemuno protocol inogona kushandiswa musanganiswa ne sshfs, vashandisi vazhinji vanogona kushandiswa, asi zvakangofanana neyakapfuura kesi.
  • http - kuverenga-chete
  • git inoverengwa-chete
  • https - yakaoma kuisa, unoda mamwe software, imwe mhando yepaneti yekudzora kuronga kuwana kwevashandisi ... inotaridzika inogoneka, asi neimwe nzira zvinhu zvese zvakaoma.

Uchishandisa ssh protocol kuronga kuwanda kwevashandisi kuwana kune Git server

Ngatidzokere kune ssh protocol.

Sezvo iwe uchishandisa ssh kuwana git, iwe unofanirwa kuve nechokwadi chekuchengetedza data server. Mushandisi anobatanidza ne ssh anoshandisa yavo yekupinda paLinux server, kuti vagone kubatana kuburikidza ne ssh mutengi uye kuwana iyo server yekuraira mutsara.
Hapana dziviriro yakakwana pakuwana kwakadaro.

Asi mushandisi haafanire kufarira mafaera eLinux. Ruzivo rwakakosha runochengetwa chete mugit repository. Naizvozvo, zvinokwanisika kusarambidza kupinda kuburikidza nemutsara wekuraira, asi kushandisa Linux maturusi kurambidza mushandisi kuona mapurojekiti, kusasanganisa iwo aanotora chikamu.
Sarudzo iri pachena ndeye kushandisa iyo Linux mvumo system.

Sezvatotaurwa, zvinokwanisika kushandisa account imwe chete yekuwana ssh. Iyi gadziriso haina kuchengetedzeka kune vakati wandei vashandisi, kunyangwe ichiverengerwa mune rondedzero yezvinokurudzirwa git sarudzo.

Kuti uite zvinodiwa zvakapihwa pakutanga kwechinyorwa, iyo inotevera dhairekitori chimiro inogadzirwa nekupihwa kwekodzero uye varidzi:

1) madhairekitori eprojekiti

dir1(proj1:proj1,0770)
dir2(proj2:proj2,0770)
dir3(proj3:proj3,0770)
...
apo
dir1, dir2, dir3 - madhairekitori eprojekiti: chirongwa 1, chirongwa 2, chirongwa 3.

proj1:proj1, proj2:proj2, proj3:proj3 vakanyatsogadzirwa vashandisi veLinux vanopihwa sevaridzi veanoenderana madhairekitori eprojekiti.

mvumo yemadhairekitori ese akaiswa ku0770 - kuwana kuzere kwemuridzi neboka rake uye kurambidzwa kwakazara kune wese wese.

2) maakaundi emugadziri

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

Chinhu chakakosha ndechekuti vagadziri vanopihwa rimwe boka remuridzi wemushandisi weiyo inoenderana purojekiti. Izvi zvinoitwa neLinux server administrator nemurairo mumwe chete.

Mumuenzaniso uyu, "Developer 1" iri kushanda pamapurojekiti proj1 uye proj2, uye "Developer 2" iri kushanda pamapurojekiti proj2 uye proj3.

Kana chero veVagadziri vakabatana kuburikidza ne ssh kuburikidza nemutsara wekuraira, saka kodzero dzavo hadzizove dzakakwana kunyange kuona zviri mukati meprojekiti madhairekitori mavari. Haakwanisi kushandura izvi pachake.

Sezvo hwaro hwemusimboti uyu ndiko kuchengetedzeka kwekodzero dzeLinux kodzero, chirongwa ichi chakavimbika. Mukuwedzera, chirongwa chacho chiri nyore kwazvo kutungamirira.

Ngatienderere mberi tichidzidzira.

Kugadzira Git repositories pane Linux server

Ngatitarisei.

[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

Ndaneta nekuinyora neruoko...

[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

Isu tine chokwadi chekuti hazvibviri kuwana marepositori evamwe vanhu kubva pamutsetse wekuraira uye kunyange kuona zvirimo.

[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

Bata pamwe nevakawanda vanogadzira pane imwechete purojekiti muGit

Mubvunzo mumwe unoramba uripo, kana mumwe mugadziri akaunza faira idzva, saka vamwe vanogadzira havagone kuichinja, nekuti iye pachake ndiye muridzi wayo (somuenzaniso, dev1), uye kwete muridzi wepurojekiti (semuenzaniso, proj1). Sezvo isu tine server-side repository, chekutanga, tinoda kuziva kuti ".git" dhairekitori rakagadzirwa sei uye kana mafaera matsva anogadzirwa.

Kugadzira yemuno Git repository uye kusundira kuGit server

Ngatiendei kumuchina wevatengi.

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>

Panguva imwecheteyo, mafaera matsva anogadzirwa pane sevha, uye ndeemushandisi akaita 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]$

Paunorodha shanduko kuGit server, mamwe mafaera uye madhairekitori anogadzirwa, uye muridzi wavo ndiye chaiye mushandisi anoita kurodha. Asi ipapo boka remafaira aya nemadhairekitori rinoenderanawo neboka guru remushandisi uyu, kureva kuti, boka re dev1 remushandisi we dev1 uye boka re dev2 remushandisi we dev2 (kuchinja boka guru remushandisi wemushandisi hazvibatsire, nekuti saka ungashanda sei pamapurojekiti akawanda?). Muchiitiko ichi, mushandisi dev2 haakwanise kushandura mafaera akagadzirwa nemushandisi dev1, izvo zvinogona kukonzera kuparara kwekushanda.

Linux chown - kushandura muridzi wefaira nemushandisi wenguva dzose

Muridzi wefaira haakwanise kushandura muridzi waro. Asi anogona kuchinja boka refaira raari, uye ipapo iyi faira inogona kugadziriswa nevamwe vashandisi vari muboka rimwe chete. Ndizvo zvatinoda.

Kushandisa Git hook

Iyo inoshanda dhairekitori ye hook ndiyo mudzi wedhairekitori reprojekiti. hook is an executable inomhanya pasi pemushandisi ari kusunda. Tichiziva izvi, tinogona kuita zvirongwa zvedu.

[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

kana kuti chete

vi hooks/post-update

Ngatidzokere kumushini wevatengi.

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

PaGit server, isu tinotarisa kushanda kwehoku post-update script mushure mekuita

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

- isina chinhu, zvese zvakanaka.

Kubatanidza mugadziri wechipiri muGit

Ngatitevedzerei basa remugadziri wechipiri.

Pamutengi

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

Uye panguva imwe chete, pane server ...

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

- isina chinhu zvakare, zvese zvinoshanda.

Kudzima purojekiti yeGit uye kurodha purojekiti kubva kuGit server

Zvakanaka, iwe unogona zvakare kuve nechokwadi chekuti shanduko dzese dzakachengetwa.

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

- kudzima chirongwa cheGit, ingo bvisa dhairekitori zvachose. Ngatishivirirei kukanganisa kunogadzirwa, sezvo zvisingaite kudzima dhairekitori razvino uchishandisa uyu murairo, asi ndiwo chaiwo maitiro atinoda.

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"

Kugovera kupinda muGit

Zvino ngative nechokwadi chekuti kunyangwe kuburikidza neGit mugadziri wechipiri haakwanise kuwana iyo Proj1 purojekiti, yaasiri kushanda pairi.

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.

Iye zvino tinobvumira kupinda

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

uye shure kwaizvozvo zvinhu zvose zvinoshanda.

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

Kuti uwane mamwe mashoko,

Pamusoro pezvo, kana paine dambudziko nemvumo yekusarudzika paunenge uchigadzira mafaera nemadhairekitori, muCentOS unogona kushandisa murairo.

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

Zvakare mune chinyorwa iwe unogona kugumburwa pazvinhu zvidiki zvinobatsira:

  • maitiro ekugadzira dhairekitori muti muLinux
  • nzira yekupfuudza huwandu hwekero mu sed kubva kune imwe mutsara kusvika kumagumo efaira, kureva kuti, chinja sed mumitsara yese kunze kwemutsara wekutanga.
  • Maitiro ekushandura mamiriro ekutsvaga muLinux tsvaga
  • Maitiro ekupfuura mitsetse yakawanda kuita loop uchishandisa imwe-liner muLinux shell
  • Maitiro ekutiza makotesheni ega mubash
  • nzira yekudzima dhairekitori nezvose zvirimo muWindows command line
  • Maitiro ekushandisa bash mv kutumidzazve faira pasina kurinyora zvakare

Ndinokutendai uchicherechedze.

Source: www.habr.com

Voeg