Ƙungiya na samun dama ga masu amfani da yawa zuwa uwar garken GIT

Lokacin shigarwa da daidaita uwar garken Git, tambayar ta taso game da tsara dama ga masu amfani da yawa zuwa ayyuka da yawa. Na yi bincike kan batun kuma na sami mafita wanda ya cika duk buƙatuna: mai sauƙi, mai aminci, abin dogaro.

Burina shine:

  • kowane mai amfani yana haɗi tare da asusun kansa
  • Masu amfani da yawa na iya aiki akan aiki ɗaya
  • mai amfani guda ɗaya zai iya aiki akan ayyuka da yawa
  • kowane mai amfani yana da damar kawai ga waɗannan ayyukan da yake aiki akan su
  • Ya kamata ya yiwu a haɗa ta hanyar layin umarni, kuma ba kawai ta hanyar wani nau'i na yanar gizo ba

Hakanan zai yi kyau:

  • ba da izinin karanta-kawai ga masu sarrafa mutane
  • A sauƙaƙe sarrafa haƙƙin samun damar mai amfani a cikin Git

Bayanin yuwuwar zaɓuɓɓuka don samun damar uwar garken GIT

Da farko, kuna buƙatar sanin abin da za ku zaɓa daga ciki, don haka ga taƙaitaccen bayanin ka'idojin Git.

  • ssh - ana amfani da asusun mai amfani na musamman don samun damar uwar garken.
    • Yana da ban mamaki cewa Git ba ya ware daga shawarwarinsa amfani da asusun guda ɗaya don samun damar duk ma'ajiyar. Wannan bai cika buƙatu na ba kwata-kwata.
    • Kuna iya amfani da asusu da yawa, amma ta yaya za ku iya iyakance damar mai amfani zuwa wasu kundayen adireshi kawai?
      • Rufewa cikin kundin adireshi na gida bai dace ba, saboda yana da wahala a tsara damar rubutawa a can don sauran masu amfani
      • Yin amfani da alamomin alamomi daga kundin adireshin gidanku shima yana da wahala saboda Git baya fassara su azaman hanyoyin haɗin gwiwa
      • Yana yiwuwa a ƙuntata damar yin amfani da mai fassarar, amma babu cikakken tabbacin cewa koyaushe zai yi aiki
        • Gabaɗaya za ku iya haɗa fassarar umarnin ku don irin waɗannan masu amfani, amma
          • da farko, wannan riga wani nau'i ne mai wahala yanke shawara,
          • na biyu kuma, ana iya ƙetare wannan.

    Amma watakila ba matsala ba ne mai amfani zai iya aiwatar da kowane umarni?.. Gabaɗaya, ba za a iya kawar da wannan hanyar ba idan kun gano ainihin yadda ake amfani da shi. Za mu koma wannan hanyar daga baya, amma a yanzu za mu yi la'akari da sauran hanyoyin, watakila za a sami wani abu mafi sauƙi.

  • Ana iya amfani da ka'idar gida ta git a haɗe tare da sshfs, ana iya amfani da masu amfani da yawa, amma ainihin iri ɗaya ne da shari'ar da ta gabata.
  • http - karanta-kawai
  • git karanta-kawai
  • https - wahalar shigarwa, kuna buƙatar ƙarin software, wasu nau'ikan kwamiti don tsara damar mai amfani… yana kama da yuwuwar, amma ko ta yaya komai yana da rikitarwa.

Yin amfani da ka'idar ssh don tsara damar masu amfani da yawa zuwa uwar garken Git

Bari mu koma ga ssh yarjejeniya.

Tun da kuna amfani da damar ssh don git, kuna buƙatar tabbatar da amincin bayanan uwar garken. Mai amfani da ke haɗa ta ssh yana amfani da nasu shiga akan uwar garken Linux, don haka za su iya haɗawa ta abokin ciniki na ssh kuma su sami damar layin umarni na uwar garke.
Babu cikakkiyar kariya daga irin wannan damar.

Amma kada mai amfani ya yi sha'awar fayilolin Linux. Ana adana mahimman bayanai a cikin ma'ajiyar git kawai. Saboda haka, ba zai yiwu a hana shiga ta hanyar layin umarni ba, amma amfani da kayan aikin Linux don hana mai amfani daga kallon ayyukan, ban da waɗanda yake shiga.
Zabin bayyane shine a yi amfani da tsarin izini na Linux.

Kamar yadda aka ambata, yana yiwuwa a yi amfani da asusu ɗaya kawai don samun damar ssh. Wannan tsarin ba shi da aminci ga masu amfani da yawa, kodayake an haɗa shi cikin jerin zaɓin git da aka ba da shawarar.

Don aiwatar da buƙatun da aka bayar a farkon labarin, an ƙirƙiri tsarin jagora mai zuwa tare da ba da haƙƙin haƙƙin mallaka da masu shi:

1) kundayen ayyukan

dir1 (proj1:proj1,0770)
dir2 (proj2:proj2,0770)
dir3 (proj3:proj3,0770)
...
inda
dir1, dir2, dir3 - kundayen adireshi: aikin 1, aikin 2, aikin 3.

proj1:proj1, proj2:proj2, proj3:proj3 an ƙirƙira su ne musamman masu amfani da Linux waɗanda aka sanya su a matsayin ma'abuta kundayen adireshi masu dacewa.

An saita izini ga duk kundayen adireshi zuwa 0770 - cikakken damar mai shi da ƙungiyarsa da cikakken dakatarwa ga kowa.

2) masu haɓaka asusun

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

Makullin mahimmanci shine cewa an sanya masu haɓaka ƙarin rukuni na mai amfani da tsarin mai aikin da ya dace. Manajan uwar garken Linux yana yin wannan tare da umarni ɗaya.

A cikin wannan misali, "Developer 1" yana aiki akan ayyukan proj1 da proj2, kuma "Developer 2" yana aiki akan ayyukan proj2 da proj3.

Idan ɗaya daga cikin Masu Haɓakawa sun haɗa ta ssh ta layin umarni, to haƙƙinsu ba za su isa ba ko da don duba abubuwan da ke cikin kundayen ayyukan da ba sa shiga. Ba zai iya canza wannan da kansa ba.

Tunda tushen wannan ka'ida shine ainihin tsaro na haƙƙin Linux, wannan makircin abin dogaro ne. Bugu da ƙari, tsarin yana da sauƙin gudanarwa.

Bari mu ci gaba don yin aiki.

Ƙirƙirar ma'ajin Git akan sabar Linux

Mu duba.

[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

Na gaji da bugawa da hannu...

[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

Mun tabbata cewa ba shi yiwuwa a shiga wuraren ajiyar wasu mutane daga layin umarni har ma da duba abubuwan da ke ciki.

[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

Haɗa tare da masu haɓakawa da yawa akan aikin iri ɗaya a Git

Tambaya guda daya ta rage, idan mai haɓakawa ya gabatar da sabon fayil, to sauran masu haɓakawa ba za su iya canza shi ba, saboda shi da kansa shine mai shi (misali, dev1), kuma ba mai amfani da aikin ba (misali, proj1). Tun da muna da ma'ajiyar uwar garken, da farko, muna buƙatar sanin yadda aka tsara tsarin ".git" da kuma ko an ƙirƙiri sababbin fayiloli.

Ƙirƙirar wurin ajiyar Git na gida da turawa zuwa uwar garken Git

Bari mu matsa zuwa na'urar abokin ciniki.

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>

A lokaci guda, an ƙirƙiri sabbin fayiloli akan uwar garken, kuma suna cikin mai amfani wanda ya yi turawa

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

Lokacin da kuka loda canje-canje zuwa uwar garken Git, ana ƙirƙiri ƙarin fayiloli da kundayen adireshi, kuma mai su shine ainihin mai amfani da ke yin loda. Amma sai rukunin waɗannan fayiloli da kundayen adireshi kuma sun dace da babban rukunin masu amfani, wato, rukunin dev1 don mai amfani da dev1 da rukunin dev2 don mai amfani da dev2 (canza babban rukunin masu haɓakawa ba zai taimaka ba. saboda to ta yaya za ku yi aiki akan ayyuka da yawa?). A wannan yanayin, mai amfani dev2 ba zai iya canza fayilolin da mai amfani dev1 ya ƙirƙira ba, wanda zai iya haifar da lalacewa a cikin aiki.

Linux chown - canza mai fayil ta mai amfani na yau da kullun

Mai fayil ba zai iya canza ikonsa ba. Amma yana iya canza rukunin fayil ɗin da yake nasa, sannan sauran masu amfani da ke cikin rukuni ɗaya za su iya canza wannan fayil ɗin. Abin da muke bukata ke nan.

Yin amfani da ƙugiya Git

Littafin jagorar aiki don ƙugiya shine tushen littafin aikin. ƙugiya ne mai aiwatarwa wanda ke gudana ƙarƙashin mai amfani yana yin turawa. Sanin wannan, za mu iya aiwatar da tsare-tsarenmu.

[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

ko kuma kawai

vi hooks/post-update

Bari mu koma na'urar abokin ciniki.

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

A kan uwar garken Git, muna duba aikin rubutun ƙugiya bayan ƙaddamarwa

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

- komai, komai yana da kyau.

Haɗa mai haɓakawa na biyu a Git

Bari mu kwaikwayi aikin na biyu developer.

A kan abokin ciniki

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

Kuma a lokaci guda, akan uwar garken ...

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

- komai kuma, komai yana aiki.

Share aikin Git da zazzage aikin daga uwar garken Git

Da kyau, zaku iya sake tabbatar da cewa an adana duk canje-canje.

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

- don share aikin Git, kawai share littafin gaba ɗaya. Bari mu jimre da kuskuren da aka haifar, tun da ba shi yiwuwa a share kundin adireshi ta amfani da wannan umarni, amma wannan shine ainihin halin da muke bukata.

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"

Raba damar shiga cikin Git

Yanzu bari mu tabbatar cewa ko da ta hanyar Git mai haɓaka na biyu ba zai iya samun damar aikin Proj1 ba, wanda baya aiki.

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.

Yanzu mun ba da damar shiga

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

kuma bayan haka komai yana aiki.

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

Don ƙarin bayani,

Bugu da ƙari, idan akwai matsala tare da tsoffin izini lokacin ƙirƙirar fayiloli da kundayen adireshi, a cikin CentOS zaku iya amfani da umarnin.

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

Hakanan a cikin labarin zaku iya tuntuɓe kan ƙananan abubuwa masu amfani:

  • yadda ake gina bishiyar directory a Linux
  • yadda za a wuce kewayon adireshi a cikin sed daga wani layi zuwa ƙarshen fayil ɗin, wato, yin sauyawa a cikin sed a cikin dukkan layi sai layin farko.
  • Yadda ake juyar da yanayin bincike a cikin Linux Find
  • Yadda ake shigar da layuka da yawa cikin madauki ta amfani da layi ɗaya a cikin harsashi na Linux
  • Yadda ake tserewa magana guda a cikin bash
  • yadda ake share directory tare da duk abinda ke cikin sa a layin umarni na windows
  • Yadda ake amfani da bash mv don sake sunan fayil ba tare da sake rubuta shi ba

Gode ​​muku da hankali.

source: www.habr.com

Add a comment