Lub koom haum ntawm ntau tus neeg siv nkag mus rau GIT server

Thaum txhim kho thiab teeb tsa Git server, cov lus nug tshwm sim txog kev teeb tsa kev nkag mus rau ntau tus neeg siv rau ntau qhov haujlwm. Kuv tshawb nrhiav qhov teeb meem thiab nrhiav tau ib qho kev daws teeb meem uas ua tau raws li txhua yam kuv xav tau: yooj yim, nyab xeeb, txhim khu kev qha.

Kuv qhov kev xav yog:

  • txhua tus neeg siv txuas nrog lawv tus kheej tus account
  • Ntau tus neeg siv tuaj yeem ua haujlwm ntawm ib qhov project
  • tib tus neeg siv tuaj yeem ua haujlwm ntawm ntau qhov haujlwm
  • txhua tus neeg siv tsuas yog nkag mus rau cov haujlwm uas nws ua haujlwm
  • Nws yuav tsum muaj peev xwm txuas tau los ntawm kab hais kom ua, thiab tsis yog los ntawm qee hom web interface

Nws kuj yuav zoo heev:

  • muab kev tso cai nyeem nkaus xwb rau cov neeg tswj hwm
  • Yooj yim tswj cov neeg siv cov cai nkag hauv Git

Txheej txheem cej luam ntawm cov kev xaiv tau rau kev nkag mus rau GIT server

Ua ntej ntawm tag nrho cov, koj yuav tsum paub yuav ua li cas xaiv los ntawm, yog li ntawm no yog ib tug ceev ceev txheej txheem cej luam ntawm Git raws tu qauv.

  • ssh - tus neeg siv tshwj xeeb tsim tus account yog siv los nkag rau lub server.
    • Nws yog qhov txawv txav uas Git tsis suav nrog nws cov lus pom zoo siv ib tus account kom nkag mus rau txhua qhov chaw khaws cia. Qhov no tsis ua raws li kuv qhov kev xav tau txhua.
    • Koj tuaj yeem siv ntau tus as khauj, tab sis koj tuaj yeem txwv cov neeg siv nkag mus rau qee cov npe?
      • Kaw rau hauv cov npe hauv tsev tsis haum, vim nws nyuaj rau kev teeb tsa kev nkag mus rau lwm tus neeg siv
      • Kev siv symlinks los ntawm koj cov npe hauv tsev kuj nyuaj vim Git tsis txhais lawv li kev sib txuas
      • Nws muaj peev xwm txwv tsis pub nkag mus rau tus neeg txhais lus, tab sis tsis muaj kev lees paub tag nrho tias nws yuav ua haujlwm ib txwm
        • Feem ntau koj tuaj yeem txuas koj tus kheej tus neeg txhais lus rau cov neeg siv, tab sis
          • ua ntej, qhov no yog ib qho kev txiav txim siab nyuaj,
          • thiab qhov thib ob, qhov no tuaj yeem raug hla.

    Tab sis tej zaum nws tsis yog ib qho teeb meem uas tus neeg siv yuav tuaj yeem ua tiav cov lus txib? Peb yuav rov qab mus rau txoj kev no tom qab, tab sis tam sim no peb yuav luv luv xav txog lwm txoj kev xaiv, tej zaum yuav muaj qee yam yooj yim dua.

  • Cov txheej txheem git hauv zos tuaj yeem siv ua ke nrog sshfs, ntau tus neeg siv tuaj yeem siv tau, tab sis qhov tseem ceeb zoo ib yam li cov ntaub ntawv dhau los
  • http - nyeem nkaus xwb
  • git yog nyeem nkaus xwb
  • https - nyuaj rau nruab, koj xav tau cov software ntxiv, qee yam kev tswj hwm vaj huam sib luag los teeb tsa cov neeg siv nkag ... nws zoo li ua tau, tab sis qee yam txhua yam nyuaj.

Siv ssh raws tu qauv los teeb tsa ntau tus neeg siv nkag mus rau Git server

Cia peb rov qab mus rau ssh raws tu qauv.

Txij li thaum koj siv ssh nkag rau git, koj yuav tsum ua kom muaj kev ruaj ntseg ntawm cov ntaub ntawv server. Tus neeg siv uas txuas ntawm ssh siv lawv tus kheej nkag rau ntawm Linux server, yog li lawv tuaj yeem txuas ntawm ssh tus neeg siv khoom thiab nkag mus rau tus neeg rau zaub mov cov kab hais kom ua.
Tsis muaj kev tiv thaiv tag nrho ntawm kev nkag mus rau qhov no.

Tab sis tus neeg siv yuav tsum tsis txhob xav txog Linux cov ntaub ntawv. Cov ntaub ntawv tseem ceeb tsuas yog khaws cia hauv git repository. Yog li ntawd, nws tsis tuaj yeem txwv tsis pub nkag los ntawm kab hais kom ua, tab sis siv Linux cov cuab yeej txwv tsis pub tus neeg siv los saib cov haujlwm, tsis suav nrog cov uas nws koom nrog.
Qhov kev xaiv pom tseeb yog siv qhov kev tso cai Linux.

Raws li twb tau hais lawm, nws tuaj yeem siv tsuas yog ib tus account rau ssh nkag. Qhov kev teeb tsa no tsis muaj kev nyab xeeb rau ntau tus neeg siv, txawm hais tias nws suav nrog hauv cov npe ntawm cov kev xaiv git pom zoo.

Txhawm rau ua raws li qhov yuav tsum tau muab rau thaum pib ntawm tsab xov xwm, cov qauv hauv qab no tau tsim nrog kev tso cai ntawm cov cai thiab cov tswv:

1) project directory

dir1(proj1:proj1,0770)
dir2(proj2:proj2,0770)
dir3(proj3:proj3,0770)
...
qhov twg
dir1, dir2, dir3 - qhov project directories: project 1, project 2, project 3.

proj1:proj1, proj2:proj2, proj3:proj3 yog tsim tshwj xeeb rau cov neeg siv Linux uas raug xaiv los ua tus tswv ntawm cov npe sib txuas.

kev tso cai rau tag nrho cov npe tau teem rau 0770 - tag nrho nkag rau tus tswv thiab nws pab pawg thiab tag nrho txwv rau lwm tus.

2) developer accounts

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

Lub ntsiab lus tseem ceeb yog tias cov neeg tsim khoom raug xa mus rau ib pab pawg ntxiv ntawm cov neeg siv tus tswv ntawm qhov sib thooj. Qhov no yog ua los ntawm Linux server tus thawj coj nrog ib qho lus txib.

Hauv qhov piv txwv no, "Developer 1" tab tom ua haujlwm rau cov haujlwm proj1 thiab proj2, thiab "Developer 2" tab tom ua haujlwm rau cov haujlwm proj2 thiab proj3.

Yog tias ib qho ntawm Developers txuas ntawm ssh los ntawm kab hais kom ua, ces lawv txoj cai yuav tsis txaus txawm tias saib cov ntsiab lus ntawm qhov project directory uas lawv tsis koom. Nws hloov tsis tau qhov no nws tus kheej.

Txij li thaum lub hauv paus ntawm lub hauv paus ntsiab lus no yog qhov yooj yim kev ruaj ntseg ntawm Linux txoj cai, cov tswv yim no ntseeg tau. Tsis tas li ntawd, cov txheej txheem yog yooj yim heev rau kev tswj hwm.

Cia peb mus xyaum.

Tsim Git repositories ntawm Linux server

Peb kuaj.

[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

Kuv nkees ntawm kev ntaus ntawv los ntawm tes ...

[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

Peb ntseeg tau tias nws tsis tuaj yeem nkag mus rau lwm tus neeg lub chaw khaws cia los ntawm kab hais kom ua thiab txawm saib lawv cov ntsiab lus.

[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

Koom tes nrog ntau tus tsim tawm ntawm tib txoj haujlwm hauv Git

Ib lo lus nug tseem tshuav, yog tias ib tus neeg tsim tawm qhia cov ntaub ntawv tshiab, ces lwm tus neeg tsim khoom hloov pauv tsis tau, vim nws tus kheej yog nws tus tswv (piv txwv li, dev1), thiab tsis yog tus tswv ntawm qhov project (piv txwv li, proj1). Txij li thaum peb muaj server-side repository, ua ntej ntawm tag nrho cov, peb yuav tsum paub yuav ua li cas lub ".git" directory yog tsim thiab seb cov ntaub ntawv tshiab yog tsim.

Tsim Git chaw cia khoom hauv zos thiab thawb mus rau Git server

Cia peb mus rau lub tshuab neeg siv khoom.

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>

Nyob rau tib lub sijhawm, cov ntaub ntawv tshiab raug tsim los ntawm cov neeg rau zaub mov, thiab lawv yog cov neeg siv uas tau ua lub laub

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

Thaum koj upload cov kev hloov pauv rau Git server, cov ntaub ntawv ntxiv thiab cov npe tau tsim, thiab lawv tus tswv yog tus neeg siv uas ua rau upload. Tab sis tom qab ntawd cov pab pawg ntawm cov ntaub ntawv no thiab cov npe tseem sib raug rau cov pab pawg tseem ceeb ntawm cov neeg siv no, uas yog, pab pawg dev1 rau cov neeg siv dev1 thiab dev2 pab pawg rau cov neeg siv dev2 (hloov pab pawg tseem ceeb ntawm cov neeg siv tsim tawm yuav tsis pab, vim li cas koj tuaj yeem ua haujlwm ntawm ntau qhov haujlwm?). Hauv qhov no, tus neeg siv dev2 yuav tsis tuaj yeem hloov cov ntaub ntawv tsim los ntawm tus neeg siv dev1, uas tuaj yeem ua rau muaj kev puas tsuaj hauv kev ua haujlwm.

Linux chown - hloov tus tswv ntawm cov ntaub ntawv los ntawm cov neeg siv niaj hnub

Tus tswv ntawm cov ntaub ntawv tsis tuaj yeem hloov nws cov tswv cuab. Tab sis nws tuaj yeem hloov cov pab pawg ntawm cov ntaub ntawv uas yog nws, thiab tom qab ntawd cov ntaub ntawv no tuaj yeem hloov kho los ntawm lwm tus neeg siv uas nyob hauv tib pab pawg. Qhov ntawd yog qhov peb xav tau.

Siv Git nuv

Daim ntawv teev npe ua haujlwm rau nuv yog lub hauv paus directory ntawm qhov project. nuv yog ib qho executable uas khiav hauv qab tus neeg siv ua lub laub. Paub qhov no, peb tuaj yeem ua raws li peb cov phiaj xwm.

[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

los yog xwb

vi hooks/post-update

Cia peb rov qab mus rau lub tshuab neeg siv khoom.

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

Ntawm Git neeg rau zaub mov, peb tshawb xyuas cov haujlwm ntawm kev sib txuas tom qab hloov kho tsab ntawv tom qab kev cog lus

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

- khoob, txhua yam zoo.

Txuas tus tsim tawm thib ob hauv Git

Cia peb simulate txoj haujlwm ntawm tus tsim tawm thib ob.

Ntawm tus neeg siv khoom

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

Thiab tib lub sijhawm, ntawm server ...

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

- khoob dua, txhua yam ua haujlwm.

Rho tawm qhov project Git thiab rub tawm qhov project los ntawm Git server

Zoo, koj tuaj yeem rov ua kom paub tseeb tias tag nrho cov kev hloov pauv tau raug cawm dim.

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

- txhawm rau tshem tawm qhov project Git, tsuas yog tshem tawm cov npe tag nrho. Cia peb tso nrog qhov yuam kev uas tau tsim, vim nws tsis tuaj yeem tshem tawm cov npe tam sim no siv cov lus txib no, tab sis qhov no yog raws nraim tus cwj pwm peb xav tau.

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"

Sib koom nkag hauv Git

Tam sim no cia peb paub tseeb tias txawm tias dhau los ntawm Git tus tsim tawm thib ob tsis tuaj yeem nkag mus rau Proj1 qhov project, uas nws tsis ua haujlwm.

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.

Tam sim no peb tso cai nkag mus

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

thiab tom qab ntawd txhua yam ua haujlwm.

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

Yog xav paub ntxiv,

Tsis tas li ntawd, yog tias muaj teeb meem nrog lub neej ntawd tso cai thaum tsim cov ntaub ntawv thiab cov npe, hauv CentOS koj tuaj yeem siv cov lus txib

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

Tsis tas li ntawd nyob rau hauv tsab xov xwm koj yuav stumble raws li tej yam me me pab tau:

  • Yuav ua li cas los tsim ib tsob ntoo directory hauv Linux
  • yuav ua li cas dhau ntau qhov chaw nyob hauv sed los ntawm ib qho kab mus rau qhov kawg ntawm cov ntaub ntawv, uas yog, hloov pauv hauv sed hauv txhua kab tsuas yog thawj kab
  • Yuav ua li cas hloov qhov kev tshawb nrhiav hauv Linux nrhiav
  • Yuav ua li cas hla ntau kab rau hauv lub voj siv ib-liner hauv Linux plhaub
  • Yuav ua li cas khiav ib qho quotes hauv bash
  • yuav ua li cas rho tawm ib phau ntawv nrog tag nrho nws cov ntsiab lus hauv windows hais kom ua kab
  • Yuav ua li cas siv bash mv los hloov npe cov ntaub ntawv yam tsis rov sau dua

Ua tsaug koj rau koj mloog.

Tau qhov twg los: www.hab.com

Ntxiv ib saib