Eagrachadh ruigsinneachd ioma-chleachdaiche air an fhrithealaiche GIT

Nuair a bhios tu a’ stàladh agus a’ rèiteachadh frithealaiche Git, tha a’ cheist ag èirigh mu bhith a’ cur ruigsinneachd air dòigh dha grunn luchd-cleachdaidh gu grunn phròiseactan. Rinn mi beagan rannsachaidh air a’ chùis agus lorg mi fuasgladh a choinnicheas ris na riatanasan agam uile: sìmplidh, sàbhailte, earbsach.

Is e mo mhiannan:

  • bidh gach neach-cleachdaidh a’ ceangal leis a’ chunntas aca fhèin
  • Faodaidh grunn luchd-cleachdaidh obrachadh air aon phròiseact
  • faodaidh an aon neach-cleachdaidh obrachadh air grunn phròiseactan
  • chan eil cothrom aig gach neach-cleachdaidh ach air na pròiseactan sin air a bheil e ag obair
  • bu chòir gum biodh e comasach ceangal a dhèanamh tron ​​​​loidhne-àithne, agus chan ann dìreach tro sheòrsa de eadar-aghaidh lìn

Bhiodh e math cuideachd:

  • thoir ceadan leughaidh a-mhàin airson smachd a chumail air daoine
  • Stiùirich còraichean-slighe luchd-cleachdaidh gu dòigheil ann an Git

Sealladh farsaing air roghainnean a dh’ fhaodadh a bhith ann airson faighinn gu frithealaiche GIT

An toiseach, feumaidh fios a bhith agad dè a thaghas tu, mar sin seo sealladh farsaing air protocolaidhean Git.

  • ssh - tha cunntas cleachdaiche a chaidh a chruthachadh gu sònraichte air a chleachdadh gus faighinn chun fhrithealaiche.
    • tha e neònach nach eil Git a’ moladh gun a bhith a’ cleachdadh aon chunntas gus faighinn chun a h-uile stòr. Chan eil seo a’ coinneachadh ris na riatanasan agam idir.
    • Faodaidh tu grunn chunntasan a chleachdadh, ach ciamar as urrainn dhut ruigsinneachd neach-cleachdaidh a chuingealachadh gu dìreach clàran sònraichte?
      • Chan eil dùnadh a-steach don eòlaire dachaigh freagarrach, oir tha e duilich ruigsinneachd sgrìobhaidh a chuir air dòigh airson luchd-cleachdaidh eile
      • Tha cleachdadh cheanglaichean samhlachail bhon eòlaire dachaigh cuideachd duilich oir chan eil Git gam mìneachadh mar cheanglaichean.
      • Cuir casg air ruigsinneachd air an eadar-theangair, uill, faodaidh tu, ach chan eil làn ghealladh ann gun obraich seo an-còmhnaidh
        • Mar as trice faodaidh tu an eadar-theangair àithne agad fhèin a cheangal airson an leithid de luchd-cleachdaidh, ach,
          • an toiseach, tha seo mar-thà na sheòrsa de cho-dhùnadh duilich,
          • agus 2, faodar a dhol seachad air.

    Ach is dòcha nach e duilgheadas a th’ ann gum bi e comasach don neach-cleachdaidh òrdughan sam bith a chuir an gnìomh?.. San fharsaingeachd, chan urrainnear an dòigh seo a chuir a-mach ma gheibh thu a-mach dìreach mar a chleachdas tu e. Tillidh sinn chun dòigh seo nas fhaide air adhart, ach airson a-nis beachdaichidh sinn goirid air na roghainnean eile a tha air fhàgail, is dòcha gum bi rudeigin nas sìmplidh ann.

  • Faodar am protocol ionadail git a chleachdadh còmhla ri sshfs, faodar ioma-chleachdaiche a chleachdadh, ach gu ìre mhòr an aon rud ris a’ chùis roimhe
  • http - leugh a-mhàin
  • git ri leughadh a-mhàin
  • https - duilich a stàladh, feumaidh tu bathar-bog a bharrachd, seòrsa de phannal smachd gus ruigsinneachd luchd-cleachdaidh a chuir air dòigh... tha e a’ coimhead comasach, ach dòigh air choireigin tha a h-uile dad iom-fhillte.

A’ cleachdadh a’ phròtacal ssh gus ruigsinneachd ioma-chleachdaiche air an fhrithealaiche Git a chuir air dòigh

Rachamaid air ais chun phròtacal ssh.

Leis gu bheil ssh access air a chleachdadh airson git, feumaidh dàta an fhrithealaiche a bhith tèarainte. Bidh an neach-cleachdaidh a tha a 'ceangal tro ssh a' cleachdadh an logadh a-steach aca fhèin air an fhrithealaiche Linux, gus an urrainn dhaibh ceangal tron ​​​​chliant ssh agus faighinn gu loidhne-àithne an fhrithealaiche.
Chan eil dìon iomlan ann an aghaidh ruigsinneachd mar sin.

Ach cha bu chòir ùidh a bhith aig an neach-cleachdaidh ann am faidhlichean Linux. Tha fiosrachadh cudromach air a stòradh a-mhàin ann an stòr git. Mar sin, chan urrainn dhut ruigsinneachd a chuingealachadh tron ​​​​loidhne-àithne, ach tro Linux, thoir casg air an neach-cleachdaidh bho bhith a’ coimhead air pròiseactan, ach a-mhàin an fheadhainn anns a bheil e a ’gabhail pàirt.
Tha e follaiseach an siostam ceadan Linux a chleachdadh.

Mar a chaidh ainmeachadh roimhe, chan urrainnear ach aon chunntas a chleachdadh airson ruigsinneachd ssh. Tha an rèiteachadh seo mì-shàbhailte dha grunn luchd-cleachdaidh, ged a tha e air a ghabhail a-steach ann an liosta git de na roghainnean a thathar a’ moladh.

Gus na riatanasan a chaidh a thoirt seachad aig toiseach an artaigil a bhuileachadh, tha an structar eòlaire a leanas air a chruthachadh le sònrachadh chòraichean agus luchd-seilbh:

1) clàran pròiseict

dir1 (pròiseict 1: proj1,0770)
dir2 (pròiseict 2: proj2,0770)
dir3 (pròiseict 3: proj3,0770)
...
far a bheil
dir1, dir2, dir3 - clàran pròiseict: pròiseact 1, pròiseact 2, pròiseact 3.

proj1: proj1, proj2: proj2, proj3: tha proj3 nan luchd-cleachdaidh Linux a chaidh a chruthachadh gu sònraichte a tha air an sònrachadh mar shealbhadairean nan clàran pròiseict fa-leth.

tha ceadan airson a h-uile clàr air an suidheachadh gu 0770 - làn ruigsinneachd don t-sealbhadair agus a bhuidheann agus casg iomlan airson a h-uile duine eile.

2) cunntasan leasaiche

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

Is e am prìomh phuing gu bheil an luchd-leasachaidh a’ faighinn buidheann a bharrachd de neach-cleachdaidh an t-siostaim aig a bheil am pròiseact co-fhreagarrach. Tha seo air a dhèanamh le rianadair an fhrithealaiche Linux le aon àithne.

San eisimpleir seo, tha leasaiche 1 ag obair air pròiseactan proj1 agus proj2, agus tha leasaiche 2 ag obair air pròiseactan proj2 agus proj3.

Ma nì gin de na leasaichean ceangal tro ssh tron ​​​​loidhne-àithne, cha bhith na còraichean aige gu leòr eadhon airson na tha anns na clàran de phròiseactan anns nach eil e a’ gabhail pàirt fhaicinn. Chan urrainn dha e fhèin atharrachadh.

Leis gur e bunait a’ phrionnsapail seo tèarainteachd bunaiteach chòraichean Linux, tha an sgeama seo earbsach. A bharrachd air an sin, tha an sgeama gu math furasta a riaghladh.

Leig leinn gluasad air adhart gu bhith ag obair.

A 'cruthachadh Git Repositories air Linux Server

Bidh sinn a ’sgrùdadh.

[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

sgìth de bhith a’ sgrìobhadh...

[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

Tha sinn cinnteach gu bheil e do-dhèanta faighinn gu stòran dhaoine eile bhon loidhne-àithne agus eadhon na tha annta fhaicinn.

[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

Co-obraich le grunn luchd-leasachaidh air an aon phròiseact ann an Git

Tha aon cheist fhathast, ma tha aon leasaiche a 'toirt a-steach faidhle ùr, chan urrainn do luchd-leasachaidh eile atharrachadh, oir is e fhèin an sealbhadair aige (mar eisimpleir, dev1), agus chan e sealbhadair a' phròiseict (mar eisimpleir, proj1). Leis gu bheil stòr againn ri taobh an fhrithealaiche, an toiseach, feumaidh fios a bhith againn ciamar a tha structar an eòlaire “.git” agus a bheil faidhlichean ùra gan cruthachadh.

A ’cruthachadh stòr Git ionadail agus a’ putadh chun t-seirbheisiche Git

Gluaisidh sinn air adhart gu inneal an neach-dèiligidh.

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>

Aig an aon àm, thèid faidhlichean ùra a chruthachadh air an fhrithealaiche, agus buinidh iad don neach-cleachdaidh a rinn am putadh

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

Nuair a luchdaicheas tu suas atharrachaidhean air an t-seirbheisiche Git, thèid faidhlichean agus clàran a bharrachd a chruthachadh, agus is e an sealbhadair aca an neach-cleachdaidh a nì an luchdachadh suas. Ach an uairsin bidh am buidheann de na faidhlichean agus na seòlaidhean sin cuideachd a’ freagairt ri prìomh bhuidheann an neach-cleachdaidh seo, is e sin, am buidheann dev1 airson an neach-cleachdaidh dev1 agus am buidheann dev2 airson an neach-cleachdaidh dev2 (cha chuidich atharrachadh prìomh bhuidheann cleachdaiche an leasaiche, oir an uairsin ciamar as urrainn dhut obrachadh air grunn phròiseactan?). Anns a ’chùis seo, cha bhith e comasach don neach-cleachdaidh dev2 na faidhlichean a chruthaich cleachdaiche dev1 atharrachadh, a dh’ fhaodadh briseadh sìos ann an comas-gnìomh.

Linux chown - ag atharrachadh sealbhadair faidhle le neach-cleachdaidh cunbhalach

Chan urrainn do shealbhadair faidhle an sealbh aige atharrachadh. Ach faodaidh e am buidheann faidhle a bhuineas dha atharrachadh, agus an uairsin faodar am faidhle seo atharrachadh le luchd-cleachdaidh eile a tha san aon bhuidheann. Sin a tha a dhìth oirnn.

A 'cleachdadh an Git Hook

Is e an eòlaire obrach airson dubhan prìomh eòlaire a’ phròiseict. Is e gnìomh a th’ ann an dubhan a bhios a’ ruith fon neach-cleachdaidh a’ putadh. Le fios seo, is urrainn dhuinn ar planaichean a chuir an gnìomh.

[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

no dìreach

vi hooks/post-update

Tillidh sinn gu inneal an neach-dèiligidh.

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

Air an fhrithealaiche Git, thoir sùil air obair an sgriobt post-ùrachadh dubhan às deidh an gealltanas

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

- falamh, tha a h-uile dad gu math.

A’ ceangal dàrna leasaiche ri Git

Dèanamaid atharrais air obair an dàrna leasaiche.

Air an neach-dèiligidh

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

Agus aig an aon àm, air an fhrithealaiche ...

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

- a-rithist falamh, bidh a h-uile dad ag obair.

A’ cuir às do phròiseact Git agus a’ luchdachadh pròiseact bho fhrithealaiche Git

Uill, faodaidh tu a-rithist dèanamh cinnteach gu bheil na h-atharrachaidhean air fad air an sàbhaladh.

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

- gus pròiseact Git a dhubhadh às, dìreach cuir às don eòlaire gu tur. Nach cuir sinn suas ris a’ mhearachd a chaidh a thoirt seachad, leis gu bheil e do-dhèanta an eòlaire gnàthach a dhubhadh às leis an àithne seo, ach is e seo dìreach an giùlan a dh’ fheumas sinn.

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"

Co-roinn ruigsinneachd ann an Git

A-nis dèan cinnteach nach urrainn don dàrna leasaiche faighinn gu pròiseact Proj1 tro Git, air nach eil e ag obair.

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.

A-nis leig le ruigsinneachd

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

agus às deidh sin bidh a h-uile dad ag obair.

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

Airson tuilleadh fiosrachaidh,

A bharrachd air an sin, ma tha duilgheadas ann leis na ceadan bunaiteach nuair a chruthaicheas tu faidhlichean agus clàran, air CentOS faodaidh tu an àithne a chleachdadh

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

Cuideachd san artaigil faodaidh tu tuiteam air rudan beaga feumail:

  • mar a thogas tu craobh eòlaire ann an Linux
  • mar a bheir thu seachad raon de sheòlaidhean bho loidhne shònraichte gu deireadh an fhaidhle ann an sed, is e sin, gus fear eile a dhèanamh ann an sed anns a h-uile loidhne ach a-mhàin a’ chiad loidhne
  • Mar a bheir thu air ais suidheachadh sgrùdaidh ann an Linux lorg
  • Mar a chuireas tu grunn loidhnichean a-steach do lùb a’ cleachdadh aon-loidhne ann an slige Linux
  • Mar a gheibh thu air falbh bho luachan singilte ann am bash
  • mar a sguabas tu às eòlaire leis a h-uile susbaint ann an loidhne-àithne windows
  • Mar a chleachdas tu bash mv gus faidhle ath-ainmeachadh gun a bhith ga ath-sgrìobhadh a-rithist

Tapadh leibh airson ur aire.

Source: www.habr.com

Cuir beachd ann