Kukonzekera kwa ogwiritsa ntchito ambiri ku seva ya GIT

Mukakhazikitsa ndikusintha seva ya Git, funso limadza pakukonzekera mwayi wofikira kwa ogwiritsa ntchito angapo kumapulojekiti angapo. Ndinafufuza nkhaniyi ndikupeza yankho lomwe linakwaniritsa zofunikira zanga zonse: zosavuta, zotetezeka, zodalirika.

Zofuna zanga ndi:

  • wogwiritsa ntchito aliyense amalumikizana ndi akaunti yake
  • Ogwiritsa ntchito angapo amatha kugwira ntchito imodzi
  • wogwiritsa ntchito yemweyo amatha kugwira ntchito pama projekiti angapo
  • wogwiritsa ntchito aliyense ali ndi mwayi wopeza mapulojekiti omwe amagwira ntchito
  • Ziyenera kukhala zotheka kulumikiza kudzera pa mzere wolamula, osati kudzera mumtundu wina wa intaneti

Zingakhalenso zabwino:

  • perekani zilolezo zowerengera kokha kwa anthu olamulira
  • Konzani ufulu wofikira ogwiritsa ntchito mu Git

Mwachidule za zosankha zomwe zingatheke kuti mupeze seva ya GIT

Choyamba, muyenera kudziwa zomwe mungasankhe, nayi mwachidule ma protocol a Git.

  • ssh - akaunti yopangidwa mwapadera imagwiritsidwa ntchito kupeza seva.
    • Ndizodabwitsa kuti Git samapatula pazomwe amavomereza kugwiritsa ntchito akaunti imodzi kuti mupeze zosungira zonse. Izi sizikukwaniritsa zofunikira zanga konse.
    • Mutha kugwiritsa ntchito maakaunti angapo, koma mungachepetse bwanji mwayi wogwiritsa ntchito zolemba zina zokha?
      • Kutsekera mu bukhu lanyumba sikoyenera, chifukwa ndizovuta kukonza zolembera kwa ogwiritsa ntchito ena
      • Kugwiritsa ntchito ma symlink kuchokera pakakwatu yakunyumba nakonso kumakhala kovuta chifukwa Git samatanthauzira ngati maulalo
      • Mutha kuletsa kulowa kwa womasulira, koma palibe chitsimikizo chokwanira kuti chidzagwira ntchito nthawi zonse
        • Mukhoza zambiri kulumikiza womasulira wanu lamulo kwa owerenga, koma
          • Choyamba, ichi ndi chisankho chovuta,
          • ndipo chachiwiri, izi zitha kuzunguliridwa.

    Koma mwina si vuto kuti wogwiritsa ntchito adzatha kuchita malamulo aliwonse?. Tidzabwereranso ku njirayi pambuyo pake, koma pakadali pano tikambirana mwachidule njira zina, mwina padzakhala china chosavuta.

  • Protocol yakumaloko ya git itha kugwiritsidwa ntchito kuphatikiza ndi ma sshfs, ogwiritsa ntchito angapo atha kugwiritsidwa ntchito, koma chimodzimodzi monga momwe zinalili kale.
  • http - kuwerenga kokha
  • git ndi yowerengedwa-yokha
  • https - zovuta kukhazikitsa, mukufunikira mapulogalamu owonjezera, mtundu wina wa gulu lowongolera kuti mukonzekere mwayi wogwiritsa ntchito ... zikuwoneka zotheka, koma mwanjira ina zonse ndizovuta.

Kugwiritsa ntchito ssh protocol kukonza mwayi wofikira ogwiritsa ntchito ambiri ku seva ya Git

Tiyeni tibwerere ku ssh protocol.

Popeza mumagwiritsa ntchito ssh kupeza git, muyenera kuonetsetsa chitetezo cha data ya seva. Wogwiritsa ntchito ssh amagwiritsa ntchito malowedwe awo pa seva ya Linux, kuti athe kulumikizana kudzera pa kasitomala wa ssh ndikupeza mzere wamalamulo a seva.
Palibe chitetezo chathunthu motsutsana ndi mwayi wotero.

Koma wosuta sayenera kukhala ndi chidwi ndi mafayilo a Linux. Zambiri zimasungidwa mu git repository yokha. Chifukwa chake, ndizotheka kuti musalepheretse kulowa kudzera pamzere wolamula, koma kugwiritsa ntchito zida za Linux kuletsa wogwiritsa ntchito kuwona ma projekiti, kupatula omwe akutenga nawo mbali.
Chosankha chodziwikiratu ndikugwiritsa ntchito zilolezo za Linux.

Monga tanenera kale, ndizotheka kugwiritsa ntchito akaunti imodzi yokha kuti mupeze ssh. Kukonzekera uku ndikosayenera kwa ogwiritsa ntchito angapo, ngakhale akuphatikizidwa pamndandanda wazosankha zovomerezeka za git.

Kuti mukwaniritse zofunikira zomwe zaperekedwa koyambirira kwa nkhaniyi, chikwatu chotsatirachi chimapangidwa ndikupatsidwa ufulu ndi eni ake:

1) zolemba za polojekiti

dir1(proj1:proj1,0770)
dir2(proj2:proj2,0770)
dir3(proj3:proj3,0770)
...
kumene
dir1, dir2, dir3 - zolozera polojekiti: polojekiti 1, polojekiti 2, polojekiti 3.

proj1:proj1, proj2:proj2, proj3:proj3 ndi ogwiritsa ntchito a Linux opangidwa mwapadera omwe amapatsidwa monga eni ake aakalozera a polojekiti.

zilolezo zamakanema onse zakhazikitsidwa ku 0770 - mwayi wonse wa eni ake ndi gulu lake komanso kuletsa kwathunthu kwa wina aliyense.

2) maakaunti opanga

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

Mfundo yofunika kwambiri ndi yakuti opanga amapatsidwa gulu lowonjezera la mwiniwake wa dongosolo la polojekiti yofanana. Izi zimachitika ndi woyang'anira seva ya Linux ndi lamulo limodzi.

Muchitsanzo ichi, "Developer 1" ikugwira ntchito pa proj1 ndi proj2, ndipo "Developer 2" ikugwira ntchito pa proj2 ndi proj3.

Ngati aliyense wa Madivelopa alumikizana kudzera pa ssh kudzera pamzere wolamula, ndiye kuti ufulu wawo sungakhale wokwanira ngakhale kuwona zomwe zili muzowongolera zama projekiti zomwe satenga nawo gawo. Iye sangasinthe izi.

Popeza maziko a mfundoyi ndi chitetezo chofunikira cha ufulu wa Linux, ndondomekoyi ndi yodalirika. Kuphatikiza apo, chiwembucho ndi chosavuta kuyendetsa.

Tiyeni tipite kukachita.

Kupanga zosungira za Git pa seva ya Linux

Tiyeni tione.

[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

Ndatopa ndikulemba pamanja...

[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

Tili otsimikiza kuti ndizosatheka kupeza zosungira za anthu ena kuchokera pamzere wolamula komanso kuwona zomwe zili.

[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

Gwirizanani ndi omanga angapo pa projekiti yomweyi ku Git

Funso limodzi limakhalabe, ngati woyambitsa wina ayambitsa fayilo yatsopano, ndiye kuti opanga ena sangathe kusintha, chifukwa iye mwiniyo ndi mwini wake (mwachitsanzo, dev1), osati mwiniwake wa polojekitiyo (mwachitsanzo, proj1). Popeza tili ndi malo osungiramo seva, choyamba, tiyenera kudziwa momwe bukhu la ".git" limapangidwira komanso ngati mafayilo atsopano amapangidwa.

Kupanga malo osungira a Git ndikukankhira ku seva ya Git

Tiyeni tipite ku makina a kasitomala.

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>

Nthawi yomweyo, mafayilo atsopano amapangidwa pa seva, ndipo ndi a wogwiritsa ntchitoyo

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

Mukayika zosintha pa seva ya Git, mafayilo owonjezera ndi maupangiri amapangidwa, ndipo mwiniwake ndiye amene amatsitsa. Koma gulu la mafayilo ndi maupangiriwa limafanananso ndi gulu lalikulu la wogwiritsa ntchitoyo, ndiye kuti, gulu la dev1 la wogwiritsa ntchito dev1 ndi gulu la dev2 la wogwiritsa ntchito dev2 (kusintha gulu lalikulu la wogwiritsa ntchito sikungathandize, chifukwa ndiye mungagwire ntchito bwanji pama projekiti angapo?). Pankhaniyi, wosuta dev2 sangathe kusintha mafayilo opangidwa ndi wosuta dev1, zomwe zingayambitse kuwonongeka kwa magwiridwe antchito.

Linux chown - kusintha mwiniwake wa fayilo ndi wogwiritsa ntchito nthawi zonse

Mwini fayilo sangathe kusintha umwini wake. Koma akhoza kusintha gulu la fayilo yomwe ili yake, ndiyeno fayiloyi ikhoza kusinthidwa ndi ogwiritsa ntchito ena omwe ali m'gulu lomwelo. Ndicho chimene ife tikusowa.

Kugwiritsa ntchito Git hook

Chikwatu chogwirira ntchito cha hook ndiye chikwatu cha polojekiti. hook ndi chotheka chomwe chimayenda pansi pa wosuta akukankha. Podziwa izi, tikhoza kukwaniritsa zolinga zathu.

[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

kapena basi

vi hooks/post-update

Tiyeni tibwerere ku makina a kasitomala.

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

Pa seva ya Git, timayang'ana magwiridwe antchito a hook post-update script pambuyo pakuchita

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

- zopanda kanthu, zonse zili bwino.

Kulumikiza wopanga wachiwiri ku Git

Tiyeni tiyesere ntchito ya woyambitsa wachiwiri.

Pa kasitomala

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

Ndipo nthawi yomweyo, pa seva ...

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

- opanda kanthu kachiwiri, zonse zimagwira ntchito.

Kuchotsa pulojekiti ya Git ndikutsitsa pulojekitiyi kuchokera pa seva ya Git

Chabwino, mutha kutsimikiziranso kuti zosintha zonse zasungidwa.

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

- kuchotsa pulojekiti ya Git, ingochotsani chikwatu chonse. Tiyeni tipirire cholakwika chomwe chimapangidwa, chifukwa ndizosatheka kuchotsa chikwatu chomwe chilipo pogwiritsa ntchito lamulo ili, koma izi ndizomwe timafunikira.

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"

Kugawana mwayi mu Git

Tsopano tiyeni tiwonetsetse kuti ngakhale kudzera mwa Git wopanga wachiwiri sangathe kupeza pulojekiti ya Proj1, yomwe sakugwira ntchito.

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.

Tsopano tikulola kupeza

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

ndipo pambuyo pake zonse zimagwira ntchito.

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

Kuti mudziwe zambiri,

Kuphatikiza apo, ngati pali vuto ndi zilolezo zokhazikika popanga mafayilo ndi zolemba, mu CentOS mutha kugwiritsa ntchito lamulo.

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

Komanso m'nkhaniyi mutha kukhumudwa pazinthu zazing'ono zothandiza:

  • momwe mungapangire chikwatu mu Linux
  • Momwe mungadutsire maadiresi osiyanasiyana mu sed kuchokera pamzere wina mpaka kumapeto kwa fayilo, ndiye kuti, sinthani sed m'mizere yonse kupatula mzere woyamba.
  • Momwe mungasinthire mawonekedwe osakira mu Linux pezani
  • Momwe mungadutse mizere ingapo kukhala loop pogwiritsa ntchito liner imodzi mu chipolopolo cha Linux
  • Momwe mungathawe mawu amodzi mu bash
  • momwe mungachotsere chikwatu ndi zonse zomwe zili mu mzere wolamula wa windows
  • Momwe mungagwiritsire ntchito bash mv kutchulanso fayilo osalembanso

Zikomo chifukwa tcheru chanu.

Source: www.habr.com

Kuwonjezera ndemanga