Faʻatulagaina o le tele o tagata faʻaoga avanoa i le GIT server

A faʻapipiʻi ma faʻapipiʻi se Git server, e tulaʻi mai le fesili e uiga i le faʻatulagaina o avanoa mo le tele o tagata faʻaoga i le tele o poloketi. Sa ou suʻesuʻeina le mataupu ma maua se fofo e fetaui ma ou manaʻoga uma: faigofie, saogalemu, faʻalagolago.

O oʻu manaʻoga o:

  • e fa'afeso'ota'i tagata ta'itasi ma a latou lava tala
  • E mafai e le tele o tagata fa'aoga ona galulue i se poloketi e tasi
  • e mafai e le tagata e tasi ona galue i le tele o galuega faatino
  • e mafai e tagata ta'ito'atasi ona maua na'o poloketi na ia galue ai
  • E tatau ona mafai ona faʻafesoʻotaʻi e ala i le laina faʻatonu, ae le naʻo se ituaiga o upega tafaʻilagi

O le a lelei foi:

  • tu'u atu fa'atagaga na'o le faitau i tagata fa'atonutonu
  • Fa'afaigofie ona pulea aia tatau a tagata fa'aoga ile Git

Va'aiga lautele o filifiliga talafeagai mo le fa'aogaina o le GIT server

Muamua lava, e tatau ona e iloa le mea e te filifili mai ai, o lea o se faʻamatalaga vave o Git protocols.

  • ssh - o se faʻamatalaga faʻapitoa e faʻaaogaina e faʻaaogaina e faʻaoga ai le server.
    • O se mea uiga ese e le faʻaesea e Git mai ana fautuaga le faʻaogaina o le tasi tala e faʻaoga uma ai faleoloa. E matua le fetaui lava lea mea ma ou mana'oga.
    • E mafai ona e fa'aogaina tala e tele, ae fa'afefea ona fa'atapula'aina le avanoa a le tagata fa'aoga i na'o fa'amaumauga patino?
      • O le tapunia i totonu o le lisi o fale e le talafeagai, aua e faigata ona faʻatulagaina avanoa tusitusi iina mo isi tagata faʻaoga
      • O le faʻaaogaina o symlinks mai lau lisi o fale e faigata foi ona e le faʻamatalaina e Git o ni soʻotaga
      • E mafai ona fa'atapula'aina le avanoa i le fa'aliliu upu, ae leai se fa'amautinoaga atoatoa o le a aoga i taimi uma
        • E masani ona e fa'afeso'ota'i lau lava fa'aliliu upu mo ia tagata fa'aoga, ae
          • muamua, o se ituaiga o filifiliga faigata lea,
          • ma lona lua, o lenei mea e mafai ona alofia.

    Ae atonu e le o se faʻafitauli e mafai e le tagata faʻaoga ona faʻatinoina soʻo se poloaiga?.. I se tulaga lautele, o lenei metotia e le mafai ona faʻamaonia pe afai e te iloa tonu pe faʻapefea ona faʻaaogaina. O le a tatou toe foi i lenei metotia mulimuli ane, ae mo le taimi nei o le a tatou mafaufau puupuu i isi auala, atonu o le ai ai se mea faigofie.

  • O le git local protocol e mafai ona faʻaogaina faʻatasi ma sshfs, e tele tagata faʻaoga e mafai ona faʻaogaina, ae tutusa lava ma le mataupu muamua.
  • http - na'o le faitau
  • git e na'o le faitau
  • https - faigata ona faʻapipiʻi, e te manaʻomia le polokalama faʻaopoopo, o se ituaiga o faʻatonuga e faʻatulaga ai le avanoa o tagata faʻaoga ... e foliga mai e mafai, ae i se isi itu e faigata mea uma.

Faʻaaogaina o le ssh protocol e faʻatulaga ai le tele o tagata faʻaoga avanoa i le Git server

Sei o tatou toe foʻi i le ssh protocol.

Talu ai o le ssh avanoa e faʻaaogaina mo git, e tatau ona e faʻamautinoa le saogalemu o faʻamaumauga a le server. O le tagata faʻaoga e faʻafesoʻotaʻi e ala i le ssh faʻaaogaina a latou lava saini i luga o le Linux server, ina ia mafai ona latou faʻafesoʻotaʻi e ala i le ssh client ma faʻaoga le laina faʻatonu a le server.
E leai se puipuiga atoatoa mai lea avanoa.

Ae e le tatau ona fiafia le tagata faʻaoga i faila Linux. O faʻamatalaga taua e teuina i totonu o le git repository. O le mea lea, e le mafai ona faʻatapulaʻaina le avanoa e ala i le laina faʻatonu, ae faʻaaoga meafaigaluega Linux e faʻasaina ai le tagata faʻaoga mai le matamataina o galuega faatino, e le aofia ai i latou o loʻo ia auai.
O le filifiliga manino o le faʻaaogaina o le Linux faʻatagaga faiga.

E pei ona taʻua muamua, e mafai ona faʻaaoga naʻo le tasi le tala mo le avanoa ssh. O lenei faʻatulagaga e le saogalemu mo le tele o tagata faʻaoga, e ui lava o loʻo aofia i le lisi o filifiliga git fautuaina.

Mo le faʻatinoina o manaʻoga o loʻo tuʻuina atu i le amataga o le tusiga, o le faʻatulagaina o faʻamaumauga o loʻo i lalo e faia ma le tuʻuina atu o aia tatau ma tagata e ona:

1) lisi o galuega faatino

dir1(proj1:proj1,0770)
dir2(proj2:proj2,0770)
dir3(proj3:proj3,0770)
...
le mea
dir1, dir2, dir3 - lisi o galuega faatino: poloketi 1, galuega faatino 2, galuega faatino 3.

proj1:proj1, proj2:proj2, proj3:proj3 o lo'o faia fa'apitoa tagata fa'aoga Linux o lo'o tofia e avea ma pule o fa'atonuga o galuega.

fa'atagaga mo fa'atonuga uma ua tu'u ile 0770 - avanoa atoatoa mo lē e ona ma lana vaega ma fa'asa atoa mo isi tagata uma.

2) fa'amatalaga fa'apitoa

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

O le mea autu o loʻo tuʻuina atu e le au atinaʻe se vaega faʻaopoopo o le tagata e ona le faʻaogaina o le polokalama tutusa. E faia lenei mea e le pule o le server Linux ma le poloaiga e tasi.

I lenei faʻataʻitaʻiga, "Developer 1" o loʻo galue i luga o poloketi proj1 ma proj2, ma "Developer 2" o loʻo galue i luga o poloketi proj2 ma proj3.

Afai e fesoʻotaʻi soʻo se tagata atiaʻe e ala i le ssh e ala i le laina o le faʻatonuga, o le a le lava a latou aia tatau e oʻo lava i le vaʻai i mea o loʻo i totonu o lisi o galuega latou te le auai. E le mafai e ia lava ona suia lenei mea.

Talu ai o le faavae o lenei mataupu faavae o le puipuiga faavae o aia tatau a Linux, o lenei polokalame e faatuatuaina. E le gata i lea, o le polokalame e matua faigofie lava ona faʻatinoina.

Sei o tatou agai i luma e faataitai.

Fausia faleteuoloa Git i luga ole server Linux

Matou te siaki.

[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

Ua ou fiu e ta i le lima...

[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

Matou te talitonu e le mafai ona faʻaogaina fale teu oloa a isi tagata mai le laina o le faʻatonuga ma vaʻai i latou mea.

[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

Galulue faʻatasi ma le tele o atinaʻe i luga o le poloketi tutusa i Git

E tasi le fesili e tumau, afai e faʻafeiloaʻi e se tasi tagata faʻapipiʻi se faila fou, ona le mafai lea e isi tagata atinaʻe ona suia, aua o ia lava e ona (mo se faʻataʻitaʻiga, dev1), ae le o le tagata e ona le poloketi (mo se faʻataʻitaʻiga, proj1). Talu ai o loʻo i ai le matou fale teu oloa, muamua lava, e tatau ona matou iloa pe faʻafefea ona faʻatulagaina le ".git" directory ma pe faia faila fou.

Fausia se faleoloa Git i le lotoifale ma tulei i le Git server

Se'i o tatou agai i luma ile masini a le kalani.

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 le taimi lava e tasi, o faila fou e faia i luga o le 'auʻaunaga, ma o latou a le tagata faʻaoga na faia le tulei

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

A e tuʻuina atu suiga i le Git server, o faila faʻaopoopo ma faʻamaumauga e faia, ma o latou e ona o le tagata faʻaoga na te faia le faʻapipiʻi. Ae o le vaega o nei faila ma directories e tutusa foi ma le vaega autu o lenei tagata faʻaoga, o lona uiga, o le dev1 vaega mo le dev1 tagata faʻaoga ma le dev2 vaega mo le dev2 tagata faʻaoga (suia le vaega autu o le tagata faʻaoga tagata e le fesoasoani, aua e fa'afefea ona e galue i le tele o galuega faatino?). I lenei tulaga, o le a le mafai e le tagata faʻaoga dev2 ona suia faila na faia e le tagata faʻaoga dev1, lea e mafai ona taʻitaʻia ai le malepelepe o galuega.

Linux chown - suia le tagata e ona se faila e se tagata masani

E lē mafai e lē e ana le faila ona suia lona pule. Ae e mafai ona ia suia le vaega o se faila e ona ia, ona mafai lea ona suia lenei faila e isi tagata faʻaoga o loʻo i totonu o le vaega e tasi. O le mea lena tatou te manaʻomia.

Fa'aaoga le matau Git

O le tusi galue mo le matau o le a'a o le galuega. matau o se fa'atinoina lea e tamo'e i lalo o le tagata fa'aoga o lo'o faia le tulei. O le iloaina o lenei mea, e mafai ai ona tatou faatinoina a tatou fuafuaga.

[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

a le na o le

vi hooks/post-update

Se'i tatou toe fo'i i le masini kalani.

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 luga o le Git server, matou te siakiina le faʻaogaina o le matau post-update script pe a maeʻa le tautinoga

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

- gaogao, e lelei mea uma.

Faʻafesoʻotaʻi se tagata faʻapipiʻi lona lua i Git

Se'i tatou fa'ata'ita'i le galuega a le fa'atupu lona lua.

I luga ole kalani

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

Ma i le taimi lava e tasi, i luga o le server...

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

— toe gaogao, e aoga mea uma.

Aveese se poloketi Git ma la'uina mai le poloketi mai le Git server

Ia, e mafai ona e toe fa'amautinoa ua uma ona fa'asaoina suiga uma.

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

- ia tape se poloketi Git, naʻo le faʻamama atoatoa o le lisi. Sei o tatou onosaia le mea sese ua tupu, talu ai e le mafai ona tape le lisi o loʻo i ai nei e faʻaaoga ai lenei poloaiga, ae o le amio tonu lea tatou te manaʻomia.

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"

Fa'asoa avanoa ile Git

Ia tatou mautinoa e oʻo lava ia Git e le mafai e le tagata faʻapitoa lona lua ona maua le poloketi Proj1, lea e le o galue ai.

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.

O lea ua matou fa'atagaina avanoa

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

ma ina ua mavae lena mea uma e aoga.

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

Faamatalaga faaopoopo

E le gata i lea, afai ei ai se faʻafitauli i faʻatagaga le faʻatagaina pe a fatuina faila ma directories, i CentOS e mafai ona e faʻaogaina le poloaiga

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

I totonu foi o le tusiga e mafai ona e tautevateva i mea laiti aoga:

  • auala e fausia ai se laʻau faʻatonu i Linux
  • auala e pasi ai le tele o tuatusi i sed mai se laina patino i le pito o le faila, o lona uiga, fai se sui i sed i laina uma vagana ai le laina muamua
  • Faʻafefea ona fesuiaʻi se tulaga suʻesuʻe i Linux maua
  • E faʻafefea ona pasi le tele o laina i totonu o se matasele e faʻaaoga ai le tasi-liner i le atigi Linux
  • E faʻafefea ona sola ese mai upusii tasi i le bash
  • faʻafefea ona tape se lisi ma mea uma i totonu o le laina faʻatonu windows
  • Faʻafefea ona faʻaoga le bash mv e toe faʻaigoaina se faila e aunoa ma le toe tusia

Faafetai mo lou mafaufau.

puna: www.habr.com

Faaopoopo i ai se faamatalaga