Te whakahaere i te urunga maha-kaiwhakamahi ki te tūmau GIT

I te wa e whakauru ana me te whirihora i te tūmau Git, ka puta ake te patai mo te whakarite urunga mo nga kaiwhakamahi maha ki etahi kaupapa. I rangahau ahau i te take ka kitea he otinga e tutuki ana i aku whakaritenga katoa: ngawari, haumaru, pono.

Ko aku hiahia:

  • ka hono ia kaiwhakamahi ki tana ake putea
  • He maha nga kaiwhakamahi ka taea te mahi i runga i tetahi kaupapa
  • ka taea e te kaiwhakamahi kotahi te mahi i runga i nga kaupapa maha
  • kei ia kaiwhakamahi anake te uru ki aua kaupapa e mahi ana ia
  • Ka taea te hono atu ma te raina whakahau, kaua ma etahi momo atanga tukutuku anake

Ka pai hoki:

  • tuku whakaaetanga panui-anake ki nga tangata whakahaere
  • Te whakahaere tika i nga motika uru a nga kaiwhakamahi i Git

Tirohanga mo nga whiringa ka taea mo te uru ki te tūmau GIT

Ko te mea tuatahi, me mohio koe ki nga mea hei whiriwhiri, na konei he tirohanga tere mo nga tikanga Git.

  • ssh - ka whakamahia he pūkete kaiwhakamahi motuhake ki te uru ki te tūmau.
    • He mea kee kaore a Git e whakakore i ana taunakitanga te whakamahi i te kaute kotahi ki te uru ki nga putunga katoa. Kare rawa tenei e tutuki i aku whakaritenga.
    • Ka taea e koe te whakamahi i nga kaute maha, engari me pehea e taea ai e koe te whakaiti i te urunga a te kaiwhakamahi ki etahi raarangi anake?
      • Kaore e pai te kati ki te raarangi kaainga, na te mea he uaua ki te whakarite i te uru tuhituhi ki reira mo etahi atu kaiwhakamahi
      • He uaua ano te whakamahi i nga hononga tohu mai i to raarangi kaainga na te mea kaore a Git e whakamaori he hononga
      • Ka taea te aukati i te uru ki te kaiwhakamaori, engari karekau he tino taurangi ka mahi tonu
        • Ka taea e koe te hono atu i to ake kaiwhakamaori whakahau mo aua kaiwhakamahi, engari
          • tuatahi, he momo whakatau uaua tenei,
          • tuarua, ka taea tenei te karo.

    Engari pea ehara i te mea he raruraru ka taea e te kaiwhakamahi te whakahaere i nga whakahau? Ka hoki ano tatou ki tenei tikanga a muri ake nei, engari mo tenei wa ka whakaarohia e tatou etahi atu huarahi, tera pea he mea ngawari ake.

  • Ka taea te whakamahi i te kawa rohe git ki nga sshfs, ka taea te whakamahi i nga kaiwhakamahi maha, engari he rite tonu ki te keehi o mua.
  • http - panui-anake
  • git he panui-anake
  • https - he uaua ki te whakauru, ka hiahia koe ki etahi atu rorohiko, etahi momo paewhiri mana hei whakarite i te urunga a te kaiwhakamahi... he ahua ka taea, engari he uaua nga mea katoa.

Ma te whakamahi i te kawa ssh hei whakarite i te urunga maha-kaiwhakamahi ki te tūmau Git

Kia hoki ki te kawa ssh.

I te mea ka whakamahi koe i te uru ssh mo te git, me whakarite e koe te haumarutanga o nga raraunga tūmau. Ko te kaiwhakamahi e hono ana ma te ssh e whakamahi ana i tana ake takiuru ki runga i te tūmau Linux, kia taea ai e ratou te hono atu ma te kiritaki ssh me te uru atu ki te raina whakahau a te tūmau.
Karekau he whakamarumaru katoa mo taua urunga.

Engari kaua te kaiwhakamahi e aro ki nga konae Linux. Ko nga korero nui ka rongoa i roto i te putunga git anake. Na reira, kaore e taea te aukati i te uru ma te raina whakahau, engari ma te whakamahi i nga taputapu Linux hei aukati i te kaiwhakamahi ki te tiro kaupapa, haunga nga mea e uru ana ia.
Ko te tino whiriwhiri ko te whakamahi i te punaha whakaaetanga Linux.

Ka rite ki te korero kua korerohia, ka taea te whakamahi i tetahi kaute mo te uru ssh. Ko tenei whirihoranga he kino mo te maha o nga kaiwhakamahi, ahakoa kei roto i te rarangi o nga whiringa git kua tohua.

Hei whakatinana i nga whakaritenga i tukuna i te timatanga o te tuhinga, ka hangaia te hanganga whaiaronga e whai ake nei me te tohu mo nga mana me nga rangatira:

1) whaiaronga kaupapa

dir1(proj1:proj1,0770)
dir2(proj2:proj2,0770)
dir3(proj3:proj3,0770)
...
te wahi
dir1, dir2, dir3 - nga raarangi kaupapa: kaupapa 1, kaupapa 2, kaupapa 3.

proj1:proj1, proj2:proj2, proj3:proj3 he mea hanga motuhake nga kaiwhakamahi Linux kua tohua hei rangatira mo nga raarangi kaupapa e pa ana.

kua whakatauhia nga whakaaetanga mo nga raarangi katoa ki te 0770 - te uru katoa mo te rangatira me tana roopu me te aukati katoa mo era atu.

2) pūkete kaiwhakawhanake

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

Ko te mea nui ko nga kaiwhakawhanake ka whakawhiwhia he roopu taapiri o te rangatira o te punaha whakahaere o te kaupapa e pa ana. Ka mahia tenei e te kaiwhakahaere tūmau Linux me te whakahau kotahi.

I roto i tenei tauira, "Kaiwhakawhanake 1" kei te mahi i nga kaupapa proj1 me te proj2, me te "Developer 2" kei te mahi i nga kaupapa proj2 me te proj3.

Mena ka hono tetahi o nga Kaiwhakawhanake ma te ssh ma te raina whakahau, kaore e ranea o raatau mana ki te tiro i nga ihirangi o nga raarangi kaupapa kaore e uru atu. Kaore e taea e ia te whakarereke i tenei.

I te mea ko te kaupapa o tenei kaupapa ko te haumarutanga taketake o nga mana Linux, he pono tenei kaupapa. I tua atu, he tino ngawari te whakahaere o te kaupapa.

Haere ki te mahi.

Waihangahia nga putunga Git i runga i te tūmau Linux

Kia tirohia.

[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

Kua ngenge ahau ki te tuhi ma te ringaringa...

[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

E whakapono ana matou kaore e taea te uru atu ki nga whare pupuri a etahi atu tangata mai i te raina whakahau me te tiro ki o raatau ihirangi.

[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

Mahi tahi me nga kaiwhakawhanake maha i runga i te kaupapa kotahi i Git

Kei te noho tonu tetahi patai, mena ka whakauruhia e tetahi kaiwhakawhanake he konae hou, kaore e taea e etahi atu kaiwhakawhanake te whakarereke, na te mea ko ia tonu te rangatira (hei tauira, dev1), ehara i te rangatira o te kaupapa (hei tauira, proj1). I te mea kei a matou he rehitatanga taha-tumau, tuatahi, me mohio me pehea te hanganga o te whaiaronga ".git" me te hanga i nga konae hou.

Te hanga i tetahi putunga Git rohe me te pana ki te tūmau Git

Me neke atu ki te miihini kiritaki.

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>

I te wa ano, ka hangaia nga konae hou ki runga i te tūmau, no te kaiwhakamahi nana i mahi te pana

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

Ina tukuna e koe nga huringa ki te tūmau Git, ka hangaia etahi atu konae me nga raarangi whaiaronga, a ko te rangatira te kaiwhakamahi nana te tukunga ake. Engari ka rite ano te roopu o enei konae me nga raarangi ki te roopu matua o tenei kaiwhakamahi, ara, ko te roopu dev1 mo te kaiwhakamahi dev1 me te roopu dev2 mo te kaiwhakamahi dev2 (te whakarereke i te roopu matua o te kaiwhakawhanake kaore e awhina, na te mea me pehea koe e mahi ai i nga kaupapa maha?). I tenei keehi, kaore e taea e te kaiwhakamahi dev2 te whakarereke i nga konae i hangaia e te kaiwhakamahi dev1, tera pea ka pakaru te mahi.

Linux chown - te huri i te rangatira o te konae na te kaiwhakamahi tonu

Kaore e taea e te rangatira o te konae te whakarereke i tona mana. Engari ka taea e ia te whakarereke i te roopu o tetahi konae nona, katahi ka taea te whakarereke i tenei konae e etahi atu kaiwhakamahi kei roto i te roopu kotahi. Koira te hiahia.

Te whakamahi i te matau Git

Ko te raarangi mahi mo te matau ko te raarangi pakiaka o te kaupapa. Ko te matau he kaikawe e rere ana i raro i te kaiwhakamahi e pana ana. Ma te mohio ki tenei, ka taea e tatou te whakatinana i a tatou mahere.

[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

tika ranei

vi hooks/post-update

Kia hoki ki te miihini kiritaki.

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

I runga i te tūmau Git, ka tirotirohia e matou te mahi o te whakamau i muri i te whakahou i muri i te tukunga

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

- kau, he pai nga mea katoa.

Te hono i tetahi kaiwhakawhanake tuarua i Git

Kia whakatauira tatou i nga mahi a te kaiwhakawhanake tuarua.

I runga i te kiritaki

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

Na i te wa ano, i runga i te tūmau ...

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

— kau ano, mahi katoa.

Te whakakore i tetahi kaupapa Git me te tango i te kaupapa mai i te tūmau Git

Ana, ka taea ano e koe te whakarite kua tiakina nga huringa katoa.

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

— ki te muku i tetahi kaupapa Git, tapahia rawatia te whaiaronga. Kia mau ki te hapa ka puta, na te mea kaore e taea te whakakore i te raarangi o naianei ma te whakamahi i tenei whakahau, engari koinei tonu te whanonga e hiahiatia ana.

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"

Tiri uru ki Git

Inaianei kia mohio tatou ahakoa na Git kaore e taea e te kaiwhakawhanake tuarua te uru ki te kaupapa Proj1, kaore ia e mahi ana.

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.

Inaianei ka whakaaetia e matou te uru

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

a muri iho ka mahi nga mea katoa.

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

Mō ētahi atu pārongo,

I tua atu, mena he raru ki nga whakaaetanga taunoa i te wa e hanga ana i nga konae me nga raarangi, kei te CentOS ka taea e koe te whakamahi i te whakahau.

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

I roto ano i te tuhinga ka tutuki pea koe ki nga mea iti e whai hua ana:

  • me pehea te hanga rakau raarangi i Linux
  • me pehea te whakawhiti i te whānuitanga o nga wahitau i roto i te sed mai i tetahi raina ki te mutunga o te konae, ara, me whakakapi ki te sed i nga rarangi katoa engari ko te rarangi tuatahi
  • Me pehea te huri i tetahi ahuatanga rapu i te rapu Linux
  • Me pehea te whakawhiti i nga raina maha ki roto i te kapiti ma te whakamahi i te raina kotahi i roto i te anga Linux
  • Me pehea te mawhiti i nga korero kotahi i roto i te bash
  • me pehea ki te muku i te whaiaronga me ona ihirangi katoa i roto i te rarangi whakahau windows
  • Me pehea te whakamahi i te bash mv hei whakaingoa i tetahi konae me te kore e tuhi ano

Mauruuru koe mo tou whakarongo.

Source: will.com

Tāpiri i te kōrero