Eto ti iraye si olumulo pupọ si olupin GIT

Nigbati fifi sori ẹrọ ati tunto olupin Git kan, ibeere naa waye nipa siseto iraye si fun awọn olumulo pupọ si awọn iṣẹ akanṣe pupọ. Mo ṣe iwadii ọran naa ati rii ojutu kan ti o pade gbogbo awọn ibeere mi: rọrun, ailewu, igbẹkẹle.

Awọn ifẹ mi ni:

  • olumulo kọọkan sopọ pẹlu akọọlẹ tirẹ
  • Ọpọlọpọ awọn olumulo le ṣiṣẹ lori iṣẹ akanṣe kan
  • olumulo kanna le ṣiṣẹ lori awọn iṣẹ akanṣe pupọ
  • olumulo kọọkan ni iwọle si awọn iṣẹ akanṣe lori eyiti o ṣiṣẹ
  • O yẹ ki o ṣee ṣe lati sopọ nipasẹ laini aṣẹ, kii ṣe nipasẹ diẹ ninu iru wiwo wẹẹbu

Yoo tun jẹ nla:

  • fifun awọn igbanilaaye kika-nikan si awọn eniyan iṣakoso
  • Ni irọrun ṣakoso awọn ẹtọ wiwọle olumulo ni Git

Akopọ ti awọn aṣayan ti o ṣeeṣe fun iraye si olupin GIT

Ni akọkọ, o nilo lati mọ kini lati yan lati, nitorinaa eyi ni atokọ ni iyara ti awọn ilana Git.

  • ssh - akọọlẹ olumulo ti o ṣẹda pataki kan ni a lo lati wọle si olupin naa.
    • O jẹ ajeji pe Git ko yọkuro kuro ninu awọn iṣeduro rẹ lilo akọọlẹ kan lati wọle si gbogbo awọn ibi ipamọ. Eyi ko pade awọn ibeere mi rara.
    • O le lo awọn akọọlẹ lọpọlọpọ, ṣugbọn bawo ni o ṣe le ṣe idinwo iwọle olumulo si awọn ilana kan nikan?
      • Pipade sinu iwe ilana ile ko dara, nitori o nira lati ṣeto iwọle kikọ sibẹ fun awọn olumulo miiran
      • Lilo awọn ọna asopọ lati inu ilana ile rẹ tun nira nitori Git ko tumọ wọn bi awọn ọna asopọ
      • O ṣee ṣe lati ni ihamọ wiwọle si onitumọ, ṣugbọn ko si ẹri kikun pe yoo ṣiṣẹ nigbagbogbo
        • O le ni gbogbogbo so onitumọ aṣẹ tirẹ fun iru awọn olumulo, ṣugbọn
          • Ni akọkọ, eyi ti jẹ iru ipinnu ti o nira tẹlẹ,
          • ati keji, yi le wa ni circumvented.

    Ṣugbọn boya kii ṣe iṣoro pe olumulo yoo ni anfani lati ṣiṣẹ awọn aṣẹ eyikeyi? .. Ni gbogbogbo, ọna yii ko le ṣe akoso ti o ba ṣe akiyesi gangan bi o ṣe le lo. A yoo pada si ọna yii nigbamii, ṣugbọn fun bayi a yoo ṣe akiyesi ni ṣoki awọn iyatọ miiran, boya nkan yoo wa rọrun.

  • Ilana agbegbe git le ṣee lo ni apapo pẹlu sshfs, awọn olumulo lọpọlọpọ le ṣee lo, ṣugbọn ni pataki kanna bi ọran ti tẹlẹ
  • http - kika-nikan
  • git jẹ kika-nikan
  • https - nira lati fi sori ẹrọ, o nilo sọfitiwia afikun, diẹ ninu iru igbimọ iṣakoso lati ṣeto iraye si olumulo… o dabi pe o ṣeeṣe, ṣugbọn bakan ohun gbogbo jẹ idiju.

Lilo ilana ssh lati ṣeto iraye si olumulo pupọ si olupin Git

Jẹ ki a pada si ilana ssh naa.

Niwọn igba ti o lo iwọle ssh fun git, o nilo lati rii daju aabo data olupin naa. Olumulo ti o sopọ nipasẹ ssh lo wiwọle tiwọn lori olupin Linux, nitorina wọn le sopọ nipasẹ alabara ssh ati wọle si laini aṣẹ olupin naa.
Ko si aabo pipe si iru iraye si.

Ṣugbọn olumulo ko yẹ ki o nifẹ si awọn faili Linux. Alaye pataki ti wa ni ipamọ nikan ni ibi ipamọ git. Nitorinaa, o ṣee ṣe lati ma ṣe ni ihamọ iwọle nipasẹ laini aṣẹ, ṣugbọn lilo awọn irinṣẹ Linux lati ṣe idiwọ olumulo lati wiwo awọn iṣẹ akanṣe, laisi awọn eyiti o ṣe alabapin.
Aṣayan ti o han gbangba ni lati lo eto awọn igbanilaaye Linux.

Gẹgẹbi a ti sọ tẹlẹ, o ṣee ṣe lati lo akọọlẹ kan nikan fun iwọle ssh. Iṣeto ni ailewu fun ọpọlọpọ awọn olumulo, botilẹjẹpe o wa ninu atokọ ti awọn aṣayan git ti a ṣeduro.

Lati ṣe awọn ibeere ti a fun ni ibẹrẹ nkan naa, ilana ilana atẹle ni a ṣẹda pẹlu iṣẹ iyansilẹ ti awọn ẹtọ ati awọn oniwun:

1) ise agbese ilana

dir1 (proj1:proj1,0770)
dir2 (proj2:proj2,0770)
dir3 (proj3:proj3,0770)
...
nibi ti
dir1, dir2, dir3 - awọn ilana ilana: ise agbese 1, ise agbese 2, ise agbese 3.

proj1:proj1, proj2:proj2, proj3:proj3 jẹ awọn olumulo Linux ti a ṣẹda ni pataki ti a yàn gẹgẹbi awọn oniwun ti awọn ilana iṣẹ akanṣe ti o baamu.

awọn igbanilaaye fun gbogbo awọn ilana ti ṣeto si 0770 - wiwọle ni kikun fun oniwun ati ẹgbẹ rẹ ati idinamọ pipe fun gbogbo eniyan miiran.

2) Olùgbéejáde iroyin

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

Koko bọtini ni pe awọn olupilẹṣẹ ti yan ẹgbẹ afikun ti oniwun olumulo eto ti iṣẹ akanṣe ti o baamu. Eyi ni a ṣe nipasẹ oluṣakoso olupin Linux pẹlu aṣẹ kan.

Ni apẹẹrẹ yii, "Olùgbéejáde 1" n ṣiṣẹ lori awọn iṣẹ akanṣe proj1 ati proj2, ati "Developer 2" n ṣiṣẹ lori awọn iṣẹ akanṣe proj2 ati proj3.

Ti eyikeyi ninu Awọn Difelopa sopọ nipasẹ ssh nipasẹ laini aṣẹ, lẹhinna awọn ẹtọ wọn kii yoo to paapaa lati wo awọn akoonu ti awọn ilana iṣẹ akanṣe ninu eyiti wọn ko kopa. Ko le yi eyi funrararẹ.

Niwọn igba ti ipilẹ ipilẹ yii jẹ aabo ipilẹ ti awọn ẹtọ Linux, ero yii jẹ igbẹkẹle. Ni afikun, eto naa rọrun pupọ lati ṣakoso.

Jẹ ki a tẹsiwaju si adaṣe.

Ṣiṣẹda awọn ibi ipamọ Git lori olupin Linux kan

A ṣayẹwo.

[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

O ti rẹ mi lati tẹ ẹ pẹlu ọwọ...

[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

A ni idaniloju pe ko ṣee ṣe lati wọle si awọn ibi ipamọ ti awọn eniyan miiran lati laini aṣẹ ati paapaa wo awọn akoonu wọn.

[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

Ṣe ifowosowopo pẹlu ọpọlọpọ awọn olupilẹṣẹ lori iṣẹ akanna ni Git

Ibeere kan wa, ti olupilẹṣẹ kan ba ṣafihan faili tuntun kan, lẹhinna awọn olupilẹṣẹ miiran ko le yipada, nitori oun funrararẹ ni oniwun rẹ (fun apẹẹrẹ, dev1), kii ṣe oniwun olumulo ti iṣẹ akanṣe naa (fun apẹẹrẹ, proj1). Niwọn bi a ti ni ibi ipamọ ẹgbẹ olupin kan, ni akọkọ, a nilo lati mọ bii ilana “.git” ti ṣe eto ati boya awọn faili tuntun ti ṣẹda.

Ṣiṣẹda ibi ipamọ Git agbegbe ati titari si olupin Git

Jẹ ki a lọ si ẹrọ onibara.

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>

Ni akoko kanna, awọn faili titun ni a ṣẹda lori olupin naa, ati pe wọn jẹ ti olumulo ti o ṣe titari naa

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

Nigbati o ba gbe awọn ayipada si olupin Git, awọn faili afikun ati awọn ilana ni a ṣẹda, ati pe oniwun wọn jẹ olumulo gangan ti o ṣe ikojọpọ naa. Ṣugbọn lẹhinna ẹgbẹ ti awọn faili wọnyi ati awọn ilana tun ni ibamu si ẹgbẹ akọkọ ti olumulo yii, iyẹn ni, ẹgbẹ dev1 fun olumulo dev1 ati ẹgbẹ dev2 fun olumulo dev2 (iyipada ẹgbẹ akọkọ ti olumulo idagbasoke kii yoo ṣe iranlọwọ, nitori lẹhinna bawo ni o ṣe le ṣiṣẹ lori awọn iṣẹ akanṣe pupọ?). Ni ọran yii, olumulo dev2 kii yoo ni anfani lati yi awọn faili ti o ṣẹda nipasẹ olumulo dev1, eyiti o le ja si didenukole ni iṣẹ ṣiṣe.

Linux chown - iyipada eni ti faili kan nipasẹ olumulo deede

Eni ti faili ko le yi ohun ini rẹ pada. Ṣugbọn o le yi ẹgbẹ ti faili ti o jẹ tirẹ pada, lẹhinna faili yii le ṣe atunṣe nipasẹ awọn olumulo miiran ti o wa ni ẹgbẹ kanna. Ohun ti a nilo niyẹn.

Lilo Git kio

Itọsọna iṣẹ fun kio jẹ ilana ipilẹ ti iṣẹ akanṣe naa. kio jẹ ẹya executable ti o nṣiṣẹ labẹ olumulo n titari. Mọ eyi, a le ṣe awọn eto wa.

[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

boya o kan

vi hooks/post-update

Jẹ ki a pada si ẹrọ onibara.

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

Lori olupin Git, a ṣayẹwo iṣẹ ṣiṣe ti iwe afọwọkọ imudojuiwọn lẹhin-ipari lẹhin ifaramọ naa

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

- ofo, ohun gbogbo dara.

Nsopọ olupilẹṣẹ keji ni Git

Jẹ ki a ṣe afiwe iṣẹ ti olupilẹṣẹ keji.

Lori onibara

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

Ati ni akoko kanna, lori olupin ...

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

- sofo lẹẹkansi, ohun gbogbo ṣiṣẹ.

Piparẹ iṣẹ akanṣe Git kan ati igbasilẹ iṣẹ akanṣe lati olupin Git

O dara, o le tun rii daju pe gbogbo awọn ayipada ti wa ni fipamọ.

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

- lati paarẹ iṣẹ akanṣe Git kan, nìkan ko ilana naa kuro patapata. Jẹ ki a farada pẹlu aṣiṣe ti o ti ipilẹṣẹ, nitori ko ṣee ṣe lati paarẹ ilana lọwọlọwọ nipa lilo aṣẹ yii, ṣugbọn eyi ni ihuwasi deede ti a nilo.

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"

Wiwọle pinpin ni Git

Bayi jẹ ki a rii daju pe paapaa nipasẹ Git olupilẹṣẹ keji ko le wọle si iṣẹ akanṣe Proj1, lori eyiti ko ṣiṣẹ.

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.

Bayi a gba wiwọle si

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

ati lẹhin naa ohun gbogbo n ṣiṣẹ.

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

Alaye afikun

Ni afikun, ti iṣoro ba wa pẹlu awọn igbanilaaye aiyipada nigba ṣiṣẹda awọn faili ati awọn ilana, ni CentOS o le lo aṣẹ naa.

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

Paapaa ninu nkan naa o le kọsẹ lori awọn nkan iwulo kekere:

  • Bii o ṣe le kọ igi liana ni Linux
  • Bii o ṣe le ṣe ọpọlọpọ awọn adirẹsi ni sed lati laini kan si opin faili naa, iyẹn ni, ṣe rirọpo ni sed ni gbogbo awọn laini ayafi laini akọkọ
  • Bii o ṣe le yi ipo wiwa pada ni wiwa Linux
  • Bii o ṣe le kọja awọn laini lọpọlọpọ sinu lupu kan nipa lilo ila kan ninu ikarahun Linux
  • Bii o ṣe le sa fun awọn agbasọ ẹyọkan ni bash
  • Bii o ṣe le pa ilana rẹ kuro pẹlu gbogbo awọn akoonu inu inu laini aṣẹ windows
  • Bii o ṣe le lo bash mv lati tunrukọ faili kan laisi atunkọ lẹẹkansi

O ṣeun fun akiyesi rẹ.

orisun: www.habr.com

Fi ọrọìwòye kun