Fandaminana ny fidirana amin'ny mpampiasa maro amin'ny mpizara GIT

Rehefa mametraka sy manamboatra mpizara Git dia mipetraka ny fanontaniana momba ny fandaminana ny fidirana ho an'ny mpampiasa maromaro amin'ny tetikasa maromaro. Nikaroka momba ilay olana aho ary nahita vahaolana nahafeno ny fepetra takiko rehetra: tsotra, azo antoka, azo antoka.

Ny faniriako dia:

  • ny mpampiasa tsirairay dia mifandray amin'ny kaontiny manokana
  • Mpampiasa maromaro no afaka miasa amin'ny tetikasa iray
  • ny mpampiasa iray ihany dia afaka miasa amin'ny tetikasa maro
  • ny mpampiasa tsirairay dia tsy mahazo miditra afa-tsy amin'ireo tetikasa iasany
  • Tokony ho azo atao ny mifandray amin'ny alàlan'ny baikon'ny baiko, fa tsy amin'ny alàlan'ny karazana interface tsara amin'ny Internet

Mety tsara koa izany:

  • manome alalana vakiana fotsiny ho an'ny olona mifehy
  • Tantano moramora ny zon'ny mpampiasa amin'ny Git

Overview ny safidy azo atao amin'ny fidirana amin'ny mpizara GIT

Voalohany indrindra, mila mahafantatra izay hofidinao ianao, ka ity misy topimaso haingana momba ny protocols Git.

  • ssh - kaonty mpampiasa noforonina manokana no ampiasaina hidirana amin'ny mpizara.
    • Mahagaga fa ny Git dia tsy manilika amin'ny soso-keviny ny fampiasana kaonty iray hidirana amin'ny tahiry rehetra. Tsy mahafeno ny fepetra takiko mihitsy izany.
    • Afaka mampiasa kaonty maromaro ianao, fa ahoana no ahafahanao mametra ny fidiran'ny mpampiasa amin'ny lahatahiry sasany ihany?
      • Ny fanakatonana ny lahatahiry an-trano dia tsy mety, satria sarotra ny mandamina ny fidirana an-tsoratra any ho an'ny mpampiasa hafa
      • Sarotra ihany koa ny fampiasana symlinks avy amin'ny lahatahiry an-tranonao satria tsy adikan'i Git ho rohy izy ireo
      • Azo atao ny mametra ny fidirana amin'ny mpandika teny, saingy tsy misy antoka tanteraka fa hahomby foana izany
        • Amin'ny ankapobeny dia azonao atao ny mampifandray ny mpandika teny anao manokana ho an'ny mpampiasa toy izany, saingy
          • voalohany, efa karazana fanapahan-kevitra sarotra izany,
          • ary faharoa, izany dia azo esorina.

    Saingy tsy olana angamba ny ahafahan'ny mpampiasa manatanteraka baiko?.. Amin'ny ankapobeny dia tsy azo tsinontsinoavina io fomba io raha fantatrao tsara ny fomba fampiasana azy. Hiverina amin'ity fomba ity isika any aoriana, fa amin'izao fotoana izao isika dia handinika fohifohy ireo safidy hafa, mety hisy zavatra tsotra kokoa.

  • Ny protocol git local dia azo ampiasaina miaraka amin'ny sshfs, mpampiasa maro no azo ampiasaina, fa mitovy amin'ny tranga teo aloha.
  • http - vakiana fotsiny
  • git dia vakiana fotsiny
  • https - sarotra apetraka, mila logiciel fanampiny ianao, karazana tontonana fanaraha-maso mba handaminana ny fidirana amin'ny mpampiasa ... toa azo atao izany, saingy sarotra ny zava-drehetra.

Mampiasa ny protocol ssh mba handaminana ny fidirana amin'ny mpampiasa maro amin'ny mpizara Git

Andao hiverina amin'ny protocol ssh.

Satria mampiasa fidirana ssh ho an'ny git ianao dia mila miantoka ny fiarovana ny angon-drakitra mpizara. Ny mpampiasa mifandray amin'ny alàlan'ny ssh dia mampiasa ny fidirana ao amin'ny server Linux, mba hahafahan'izy ireo mifandray amin'ny mpanjifa ssh ary miditra amin'ny baikon'ny mpizara.
Tsy misy fiarovana tanteraka amin'ny fidirana toy izany.

Saingy tsy tokony ho liana amin'ny rakitra Linux ny mpampiasa. Ny fampahalalana manan-danja dia voatahiry ao amin'ny tahiry git ihany. Noho izany, azo atao ny tsy hamerana ny fidirana amin'ny alàlan'ny baiko, fa mampiasa fitaovana Linux handrara ny mpampiasa tsy hijery tetikasa, tsy tafiditra ao anatin'izany ireo izay andraisany anjara.
Ny safidy mazava dia ny fampiasana ny rafitra fahazoan-dàlana Linux.

Araka ny efa voalaza dia azo atao ny mampiasa kaonty tokana ho an'ny fidirana ssh. Ity fanitsiana ity dia tsy azo antoka ho an'ny mpampiasa maromaro, na dia tafiditra ao anatin'ny lisitry ny safidy git natolotra aza.

Mba hampiharana ireo fepetra voalaza teo am-piandohan'ny lahatsoratra dia noforonina miaraka amin'ny fanendrena ny zo sy ny tompony ity firafitry ny lahatahiry manaraka ity:

1) lahatahiry tetikasa

dir1(proj1:proj1,0770)
dir2(proj2:proj2,0770)
dir3(proj3:proj3,0770)
...
izay
dir1, dir2, dir3 - lahatahiry tetikasa: tetikasa 1, tetikasa 2, tetikasa 3.

proj1:proj1, proj2:proj2, proj3:proj3 dia noforonina manokana ireo mpampiasa Linux izay voatendry ho tompon'ny lahatahiry tetikasa mifanaraka amin'izany.

Ny fahazoan-dàlana ho an'ny lahatahiry rehetra dia napetraka amin'ny 0770 - fidirana feno ho an'ny tompony sy ny vondrona misy azy ary fandrarana tanteraka ho an'ny olon-drehetra.

2) kaonty developer

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

Ny hevi-dehibe dia nomena vondrona fanampiny an'ny mpampiasa rafitra tompon'ny tetikasa mifanaraka amin'izany ny mpamorona. Izany dia ataon'ny mpandrindra mpizara Linux miaraka amin'ny baiko iray.

Amin'ity ohatra ity, ny "Developer 1" dia miasa amin'ny tetikasa proj1 sy proj2, ary ny "Developer 2" dia miasa amin'ny tetikasa proj2 sy proj3.

Raha misy amin'ireo Developers mifandray amin'ny alàlan'ny ssh amin'ny alàlan'ny baikon'ny baiko, dia tsy ho ampy ny zon'izy ireo na dia hijery ny votoatin'ny lahatahiry tetikasa izay tsy andraisany anjara aza. Tsy afaka manova izany ny tenany.

Satria ny fototry an'io fitsipika io dia ny fiarovana fototra amin'ny zon'ny Linux, azo itokisana io tetika io. Ankoatra izany, dia tena mora ny fitantanana ny tetika.

Andao hizara.

Mamorona tahiry Git amin'ny mpizara Linux

Manamarina izahay.

[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

Sasatra mitendry tanana aho...

[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

Resy lahatra izahay fa tsy azo atao ny miditra amin'ny fitehirizan'ny olon-kafa avy amin'ny baikon'ny baiko ary mijery ny ao anatiny aza.

[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

Miara-miasa amin'ny mpamorona maro amin'ny tetikasa iray ao amin'ny Git

Mbola fanontaniana iray ihany, raha mampiditra rakitra vaovao ny developer iray, dia tsy afaka manova izany ny developer hafa, satria izy mihitsy no tompony (ohatra, dev1), fa tsy tompon'ny mpampiasa ny tetikasa (ohatra, proj1). Satria manana tahiry amin'ny lafiny server isika, voalohany indrindra, mila mahafantatra ny fomba firafitry ny lahatahiry ".git" ary raha misy rakitra vaovao noforonina.

Mamorona tahiry Git eo an-toerana ary manosika mankany amin'ny mpizara Git

Andao hiroso amin'ny milina mpanjifa.

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>

Amin'izay fotoana izay ihany koa dia misy rakitra vaovao noforonina ao amin'ny mpizara, ary an'ny mpampiasa izay nanao ny fanosehana

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

Rehefa mampakatra fanovana amin'ny mpizara Git ianao, dia misy rakitra sy lahatahiry fanampiny noforonina, ary ny tompony no tena mpampiasa manao ilay fampiakarana. Saingy ny vondrona misy ireo rakitra sy lahatahiry ireo dia mifanitsy amin'ny vondrona lehibe amin'ity mpampiasa ity, izany hoe ny vondrona dev1 ho an'ny mpampiasa dev1 ary ny vondrona dev2 ho an'ny mpampiasa dev2 (tsy hanampy ny fanovana ny vondrona lehibe amin'ny mpampiasa developer, satria ahoana no ahafahanao miasa amin'ny tetikasa marobe?). Amin'ity tranga ity, ny mpampiasa dev2 dia tsy afaka manova ny rakitra noforonin'ny mpampiasa dev1, izay mety hitarika fahatapahan'ny fiasa.

Linux chown - manova ny tompon'ny rakitra amin'ny mpampiasa mahazatra

Tsy afaka manova ny tompony ny tompon'ny rakitra iray. Saingy afaka manova ny vondron'ny rakitra iray izay azy izy, ary avy eo io rakitra io dia azo ovain'ny mpampiasa hafa izay ao amin'ny vondrona iray ihany. Izany no ilaintsika.

Mampiasa Git hook

Ny lahatahiry miasa ho an'ny hook no lahatahiry fototry ny tetikasa. hook dia executable izay mandeha eo ambanin'ny mpampiasa manao ny fanosehana. Amin'ny fahafantarana izany dia afaka mampihatra ny drafitray izahay.

[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

na fotsiny

vi hooks/post-update

Andao hiverina amin'ny milina mpanjifa.

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

Ao amin'ny mpizara Git dia manamarina ny fiasan'ny script post-update taorian'ny commit

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

- banga, tsara ny zava-drehetra.

Mampifandray mpamorona faharoa ao amin'ny Git

Andao hanao simulation ny asan'ny developer faharoa.

Amin'ny mpanjifa

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

Ary miaraka amin'izay koa, eo amin'ny server...

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

— foana indray, mandeha ny zava-drehetra.

Famafana tetikasa Git sy fampidinana ny tetikasa avy amin'ny mpizara Git

Eny ary, azonao atao indray ny maka antoka fa voatahiry ny fanovana rehetra.

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

- raha hamafa tetikasa Git, esory tsotra izao ny lahatahiry. Andeha hojerentsika ny hadisoana aterak'izany, satria tsy azo atao ny mamafa ny lahatahiry amin'izao fotoana izao amin'ny fampiasana an'io baiko io, fa izany indrindra no fihetsika ilaintsika.

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"

Mizara fidirana amin'ny Git

Andeha hojerentsika izao fa na dia amin'ny alàlan'ny Git aza ny mpamorona faharoa dia tsy afaka miditra amin'ny tetikasa Proj1, izay tsy iasany.

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.

Avelantsika hidirana izao

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

ary rehefa afaka izany, dia mandeha ny zava-drehetra.

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

Fampahalalana fanampiny

Fanampin'izay, raha misy olana amin'ny fahazoan-dàlana default rehefa mamorona rakitra sy lahatahiry, ao amin'ny CentOS dia azonao atao ny mampiasa ny baiko.

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

Ao amin'ny lahatsoratra ihany koa dia mety ho tafintohina amin'ny zavatra kely mahasoa ianao:

  • ny fomba hananganana hazo lahatahiry amin'ny Linux
  • ny fomba handefasana adiresy isan-karazany amin'ny sed avy amin'ny andalana iray mankany amin'ny faran'ny rakitra, izany hoe manolo ny sed amin'ny andalana rehetra afa-tsy ny andalana voalohany
  • Ahoana ny fomba hamadihana ny fepetra fikarohana amin'ny Linux find
  • Ahoana ny fandefasana andalana maromaro ao anaty tadivavarana amin'ny alàlan'ny tsipika tokana amin'ny shell Linux
  • Ahoana ny fomba handosirana teny tokana amin'ny bash
  • Ahoana ny famafana lahatahiry miaraka amin'ny atiny rehetra ao amin'ny baiko baiko windows
  • Ahoana ny fampiasana bash mv hanovana anarana rakitra nefa tsy manoratra azy indray

Misaotra anao noho ny tsara.

Source: www.habr.com

Add a comment