Inhlangano yokufinyelela kwabasebenzisi abaningi kuseva ye-GIT

Lapho ufaka futhi ulungiselela iseva ye-Git, umbuzo uphakama mayelana nokuhlela ukufinyelela kwabasebenzisi abambalwa kumaphrojekthi ambalwa. Ngicwaninge udaba ngathola isixazululo esihlangabezana nazo zonke izidingo zami: elula, ephephile, ethembekile.

Izifiso zami yilezi:

  • umsebenzisi ngamunye uxhuma ne-akhawunti yakhe
  • Abasebenzisi abambalwa bangasebenza kuphrojekthi eyodwa
  • umsebenzisi ofanayo angasebenza kumaphrojekthi amaningi
  • umsebenzisi ngamunye unokufinyelela kuphela kulawo maphrojekthi asebenza kuwo
  • Kufanele kwenzeke ukuxhuma ngomugqa womyalo, hhayi nje ngokusebenzisa uhlobo oluthile lwesixhumi esibonakalayo sewebhu

Kungaba kuhle futhi:

  • nikeza izimvume zokufunda kuphela kubantu abalawulayo
  • Phatha kalula amalungelo okufinyelela komsebenzisi ku-Git

Uhlolojikelele lwezinketho ezingenzeka zokufinyelela iseva ye-GIT

Okokuqala, udinga ukwazi ukuthi yini ongakhetha kuyo, ngakho-ke nansi ukubuka konke okusheshayo kwamaphrothokholi we-Git.

  • ssh - i-akhawunti yomsebenzisi edalwe ngokukhethekile isetshenziselwa ukufinyelela iseva.
    • Kuyamangaza ukuthi i-Git ayibandakanyi ezincomweni zayo ukusetshenziswa kwe-akhawunti eyodwa ukufinyelela zonke izinqolobane. Lokhu akuhlangabezani nezimfuneko zami nhlobo.
    • Ungasebenzisa ama-akhawunti amaningi, kodwa ungakukhawulela kanjani ukufinyelela komsebenzisi ezinhlwini ezithile zemibhalo kuphela?
      • Ukuvala uhla lwemibhalo lwasekhaya akufanelekile, ngoba kunzima ukuhlela ukufinyelela kokubhala lapho kwabanye abasebenzisi
      • Ukusebenzisa ama-symlink asuka kunkomba yakho yasekhaya nakho kunzima ngoba i-Git ayiwatoli njengezixhumanisi
      • Kungenzeka ukukhawulela ukufinyelela kumhumushi, kodwa asikho isiqinisekiso esigcwele sokuthi iyohlala isebenza
        • Ungakwazi ngokujwayelekile ukuxhuma umhumushi wakho womyalo kubasebenzisi abanjalo, kodwa
          • okokuqala, lokhu sekuvele kuwuhlobo oluthile lwesinqumo esinzima,
          • futhi okwesibili, lokhu kungagwenywa.

    Kodwa mhlawumbe akuyona inkinga ukuthi umsebenzisi uzokwazi ukwenza noma yimiphi imiyalo?.. Ngokuvamile, le ndlela ayikwazi ukukhishwa uma uthola ukuthi ungayisebenzisa kanjani. Sizobuyela kule ndlela ngokuhamba kwesikhathi, kodwa okwamanje sizocubungula kafushane ezinye izindlela, mhlawumbe kuzoba nokunye okulula.

  • Iphrothokholi yendawo ye-git ingasetshenziswa ihlanganiswe nama-sshfs, abasebenzisi abaningi bangasetshenziswa, kodwa ngokuyisisekelo kuyafana necala langaphambilini.
  • http - funda kuphela
  • I-git ifundwa kuphela
  • I-https - kunzima ukuyifaka, udinga isofthiwe eyengeziwe, uhlobo oluthile lwephaneli yokulawula ukuhlela ukufinyelela komsebenzisi ... kubonakala kungenakwenzeka, kodwa ngandlela-thile yonke into iyinkimbinkimbi.

Ukusebenzisa iphrothokholi ye-ssh ukuhlela ukufinyelela kwabasebenzisi abaningi kuseva ye-Git

Masibuyele kuphrothokholi ye-ssh.

Njengoba usebenzisa ukufinyelela kwe-ssh kwe-git, udinga ukuqinisekisa ukuphepha kwedatha yeseva. Umsebenzisi oxhuma nge-ssh usebenzisa ukungena kwakhe ngemvume kuseva ye-Linux, ukuze akwazi ukuxhuma ngeklayenti le-ssh futhi afinyelele umugqa womyalo weseva.
Asikho isivikelo esiphelele ekufinyeleleni okunjalo.

Kodwa umsebenzisi akufanele abe nentshisekelo kumafayela e-Linux. Ulwazi olubalulekile lugcinwa kuphela kunqolobane ye-git. Ngakho-ke, kungenzeka ukuthi ungavimbeli ukufinyelela ngomugqa womyalo, kodwa usebenzisa amathuluzi e-Linux ukuvimbela umsebenzisi ukuthi abuke amaphrojekthi, ngaphandle kwalawo abamba iqhaza kuwo.
Inketho esobala ukusebenzisa uhlelo lwezimvume ze-Linux.

Njengoba sekushiwo, kungenzeka ukusebenzisa i-akhawunti eyodwa kuphela ukufinyelela kwe-ssh. Lokhu kulungiselelwa akuphephile kubasebenzisi abambalwa, nakuba kufakwe ohlwini lwezinketho ezinconyiwe ze-git.

Ukuze kusetshenziswe izimfuneko ezinikezwe ekuqaleni kwe-athikili, uhlaka lohla lwemibhalo olulandelayo luyakhiwa ngokunikezwa kwamalungelo nabanikazi:

1) izinkomba zephrojekthi

i-dir1(proj1:proj1,0770)
i-dir2(proj2:proj2,0770)
i-dir3(proj3:proj3,0770)
...
kuphi
dir1, dir2, dir3 - izinkomba zephrojekthi: iphrojekthi 1, iphrojekthi 2, iphrojekthi 3.

proj1:proj1, proj2:proj2, proj3:proj3 bangabasebenzisi be-Linux abadalwe ngokukhethekile ababelwa njengabanikazi bezinhla zemibhalo zephrojekthi ezihambisanayo.

izimvume zazo zonke izinkomba zisethwe kokuthi 0770 - ukufinyelela okugcwele komnikazi neqembu lakhe kanye nokuvinjelwa okuphelele kwawo wonke umuntu.

2) ama-akhawunti kanjiniyela

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

Iphuzu elibalulekile ukuthi abathuthukisi banikezwe iqembu elengeziwe lomnikazi wohlelo lomsebenzi wephrojekthi ehambisanayo. Lokhu kwenziwa umlawuli weseva ye-Linux ngomyalo owodwa.

Kulesi sibonelo, "Unjiniyela 1" usebenza kumaphrojekthi we-proj1 ne-proj2, futhi "Unjiniyela 2" usebenza kumaphrojekthi we-proj2 ne-proj3.

Uma noma yibaphi Onjiniyela baxhuma nge-ssh ngomugqa womyalo, khona-ke amalungelo abo ngeke anele ngisho nokubuka okuqukethwe kohla lwemibhalo lwamaphrojekthi abangabambi iqhaza kukho. Angeke akwazi ukukushintsha lokhu yena.

Njengoba isisekelo salesi simiso siwukuphepha okuyisisekelo kwamalungelo e-Linux, lolu hlelo luthembekile. Ngaphezu kwalokho, uhlelo kulula kakhulu ukuphatha.

Asiqhubeke sizilolonge.

Ukudala amakhosombe e-Git kuseva ye-Linux

Ake sihlole.

[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

Sengikhathele ukuthayipha ngesandla...

[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

Siyaqiniseka ukuthi akunakwenzeka ukufinyelela amakhosombe wabanye abantu emugqeni womyalo futhi ubuke nokukuqukethe.

[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

Hlanganyela nonjiniyela abaningi kuphrojekthi efanayo ku-Git

Kusele umbuzo owodwa, uma unjiniyela oyedwa ethula ifayela elisha, khona-ke abanye abathuthukisi abakwazi ukulishintsha, ngoba yena ngokwakhe ungumnikazi walo (isibonelo, i-dev1), hhayi umnikazi womsebenzisi wephrojekthi (ngokwesibonelo, i-proj1). Njengoba sinenqolobane yohlangothi lweseva, okokuqala, sidinga ukwazi ukuthi uhla lwemibhalo lwe-“.git” lwakhiwe kanjani nokuthi amafayela amasha ayakhiwa yini.

Ukudala ikhosombe lendawo le-Git nokuphushela kuseva ye-Git

Masiqhubekele emshinini weklayenti.

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>

Ngesikhathi esifanayo, kwakhiwa amafayela amasha kuseva, futhi angawomsebenzisi owenze i-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]$

Uma ulayisha izinguquko kuseva ye-Git, amafayela engeziwe nezinkomba ziyakhiwa, futhi umnikazi wazo ungumsebenzisi olayishayo. Kodwa-ke iqembu lalawa mafayela nezinkomba liphinde lihambisane neqembu elikhulu lalo msebenzisi, okungukuthi, iqembu le-dev1 lomsebenzisi we-dev1 kanye neqembu le-dev2 lomsebenzisi we-dev2 (ukushintsha iqembu eliyinhloko lomsebenzisi wonjiniyela ngeke kusize, ngoba ungasebenza kanjani kumaphrojekthi amaningi?). Kulesi simo, umsebenzisi we-dev2 ngeke akwazi ukushintsha amafayela adalwe ngumsebenzisi we-dev1, okungase kuholele ekuqhekekeni kokusebenza.

I-Linux chown - ukushintsha umnikazi wefayela ngumsebenzisi ojwayelekile

Umnikazi wefayela akakwazi ukushintsha ubunikazi balo. Kodwa angakwazi ukushintsha iqembu lefayela okungeyakhe, bese leli fayela lingashintshwa abanye abasebenzisi abaseqenjini elifanayo. Yilokho esikudingayo.

Ukusebenzisa i-Git hook

Uhla lwemibhalo olusebenzayo lwe-hook luwuhlu lwemibhalo oluyimpande yephrojekthi. i-hook iyinhlangano esebenzisekayo esebenza ngaphansi komsebenzisi owenza i-push. Ngokwazi lokhu, singasebenzisa izinhlelo zethu.

[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

noma nje

vi hooks/post-update

Masibuyele emshinini weklayenti.

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

Kuseva ye-Git, sibheka ukusebenza kweskripthi sokuvuselela i-hook ngemva kokuzibophezela

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

- akunalutho, konke kuhamba kahle.

Ixhuma unjiniyela wesibili ku-Git

Ake silingise umsebenzi wonjiniyela wesibili.

Kwiklayenti

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

Futhi ngesikhathi esifanayo, kuseva...

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

- akunalutho futhi, konke kuyasebenza.

Ukususa iphrojekthi ye-Git nokulanda iphrojekthi kuseva ye-Git

Nokho, ungaphinda wenze isiqiniseko sokuthi zonke izinguquko zilondoloziwe.

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

- ukususa iphrojekthi ye-Git, mane usule inkomba ngokuphelele. Ake sibekezelele iphutha elikhiqizwayo, njengoba kungenakwenzeka ukususa uhla lwemibhalo lwamanje sisebenzisa lo myalo, kodwa yilokhu kanye ukuziphatha esikudingayo.

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"

Yabelana ngokufinyelela ku-Git

Manje ake siqinisekise ukuthi ngisho nange-Git umthuthukisi wesibili akakwazi ukufinyelela iphrojekthi ye-Proj1, angasebenzi kuyo.

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.

Manje sivumela ukufinyelela

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

futhi emva kwalokho konke kuyasebenza.

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

Imininingwane eyengeziwe

Ukwengeza, uma kunenkinga ngezimvume ezizenzakalelayo lapho udala amafayela nezinkomba, ku-CentOS ungasebenzisa umyalo.

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

Futhi kulesi sihloko ungase ukhubeke ezintweni ezincane eziwusizo:

  • indlela yokwakha isihlahla somkhombandlela ku-Linux
  • indlela yokudlulisa uhla lwamakheli ku-sed ukusuka emugqeni othile kuye ekugcineni kwefayela, okungukuthi, ukwenza esikhundleni se-sed kuyo yonke imigqa ngaphandle komugqa wokuqala
  • Ungasiguqula kanjani isimo sokusesha ku-Linux thola
  • Uwedlula kanjani imigqa eminingi ku-loop usebenzisa i-line-liner kugobolondo le-Linux
  • Ungazibalekela kanjani izingcaphuno ezingabodwa ku-bash
  • indlela yokususa uhla lwemibhalo nakho konke okuqukethwe kulo kulayini womyalo weWindows
  • Ungayisebenzisa kanjani i-bash mv ukuqamba kabusha ifayela ngaphandle kokulibhala kabusha futhi

Ngiyabonga ngokunaka kwakho.

Source: www.habr.com

Engeza amazwana