Hoʻonohonoho i ka loaʻa ʻana o nā mea hoʻohana lehulehu i ka server GIT

Ke hoʻouka a hoʻonohonoho ʻana i kahi kikowaena Git, ua kū mai ka nīnau e pili ana i ka hoʻonohonoho ʻana i ke komo ʻana no nā mea hoʻohana i kekahi mau papahana. Ua noiʻi au i ka pilikia a loaʻa iaʻu kahi hopena i kū i kaʻu mau koi āpau: maʻalahi, palekana, hilinaʻi.

ʻO kaʻu mau makemake:

  • Hoʻopili kēlā me kēia mea hoʻohana me kā lākou moʻokāki ponoʻī
  • Hiki i nā mea hoʻohana ke hana i hoʻokahi papahana
  • hiki i ka mea hoʻohana hoʻokahi ke hana ma nā papahana he nui
  • hiki i kēlā me kēia mea hoʻohana ke komo wale i kēlā mau papahana āna e hana ai
  • Hiki ke hoʻohui ʻia ma o ka laina kauoha, ʻaʻole wale ma o kekahi ʻano o ka pūnaewele pūnaewele

He mea maikaʻi nō hoʻi:

  • hāʻawi i nā ʻae heluhelu wale nō i ka hoʻomalu ʻana i nā kānaka
  • E mālama pono i nā kuleana o ka mea hoʻohana ma Git

ʻO ka nānā ʻana i nā koho hiki ke komo i ka server GIT

ʻO ka mea mua, pono ʻoe e ʻike i ka mea e koho ai, no laila eia kahi ʻike wikiwiki o nā protocols Git.

  • ssh - hoʻohana ʻia kahi moʻokāki mea hoʻohana kūikawā e komo i ka kikowaena.
    • He mea kupanaha ʻaʻole i kāpae ʻo Git mai kāna mau ʻōlelo aʻoaʻo i ka hoʻohana ʻana i hoʻokahi moʻokāki e kiʻi ai i nā waihona āpau. ʻAʻole kūpono kēia i kaʻu mau koi.
    • Hiki iā ʻoe ke hoʻohana i nā moʻokāki he nui, akā pehea ʻoe e kaupalena ai i ke komo ʻana o ka mea hoʻohana i kekahi mau papa kuhikuhi wale nō?
      • ʻAʻole kūpono ka pani ʻana i ka papa kuhikuhi home, no ka mea paʻakikī ke hoʻonohonoho i ke komo kākau ma laila no nā mea hoʻohana ʻē aʻe
      • He paʻakikī ka hoʻohana ʻana i nā symlinks mai kāu papa kuhikuhi home no ka mea ʻaʻole unuhi ʻo Git iā lākou he loulou
      • Hiki ke hoʻopaʻa i ke komo ʻana i ka unuhi ʻōlelo, akā ʻaʻohe hōʻoia piha e hana mau ia
        • Hiki iā ʻoe ke hoʻohui i kāu unuhi ʻōlelo kauoha no ia mea hoʻohana, akā
          • ʻO ka mea mua, he ʻano hoʻoholo paʻakikī kēia,
          • a ʻo ka lua, hiki ke ʻalo ʻia kēia.

    Akā, ʻaʻole paha he pilikia e hiki ai i ka mea hoʻohana ke hoʻokō i nā kauoha? E hoʻi mākou i kēia ʻano ma hope aku, akā i kēia manawa e noʻonoʻo mākou i nā koho ʻē aʻe, aia paha kekahi mea maʻalahi.

  • Hiki ke hoʻohana ʻia ka protocol local git i ka hui pū ʻana me sshfs, hiki ke hoʻohana ʻia nā mea hoʻohana he nui, akā ʻano like me ka hihia mua.
  • http - heluhelu-wale
  • He heluhelu-wale ka git
  • https - paʻakikī e hoʻouka, pono ʻoe i nā polokalamu hou aku, kekahi ʻano o ka papa mana e hoʻonohonoho i ka mea hoʻohana i ke komo ʻana ... hiki ke nānā aku, akā paʻakikī nā mea āpau.

Ke hoʻohana nei i ka protocol ssh e hoʻonohonoho i nā mea hoʻohana lehulehu i ka server Git

E hoʻi kāua i ka protocol ssh.

No kou hoʻohana ʻana i ke komo ssh no git, pono ʻoe e hōʻoia i ka palekana o ka ʻikepili kikowaena. Hoʻohana ka mea hoʻohana i hoʻopili ma o ssh i kā lākou inoa ponoʻī ma ke kikowaena Linux, no laila hiki iā lākou ke hoʻopili ma o ka mea kūʻai aku ssh a komo i ka laina kauoha o ka server.
ʻAʻohe pale piha e pili ana i kēlā ʻano komo.

Akā ʻaʻole makemake ka mea hoʻohana i nā faila Linux. Mālama ʻia nā ʻike koʻikoʻi ma ka waihona git wale nō. No laila, ʻaʻole hiki ke kaupalena i ke komo ʻana ma o ka laina kauoha, akā me ka hoʻohana ʻana i nā mea hana Linux e pāpā ai i ka mea hoʻohana mai ka nānā ʻana i nā papahana, me ka ʻole o nā mea āna e komo ai.
ʻO ka koho maʻalahi e hoʻohana i ka ʻōnaehana ʻae Linux.

E like me ka mea i haʻi mua ʻia, hiki ke hoʻohana i hoʻokahi moʻokāki no ke komo ssh. ʻAʻole palekana kēia hoʻonohonoho no nā mea hoʻohana, ʻoiai ua hoʻokomo ʻia i ka papa inoa o nā koho git i manaʻo ʻia.

No ka hoʻokō ʻana i nā koi i hāʻawi ʻia ma ka hoʻomaka ʻana o ka ʻatikala, ua hana ʻia ka papa kuhikuhi ma lalo nei me ka hāʻawi ʻana i nā kuleana a me nā mea nona:

1) papa kuhikuhi papahana

dir1(proj1:proj1,0770)
dir2(proj2:proj2,0770)
dir3(proj3:proj3,0770)
...
kahi
dir1, dir2, dir3 - papa kuhikuhi papahana: papahana 1, papahana 2, papahana 3.

proj1:proj1, proj2:proj2, proj3:proj3 ua hana kūikawā ʻia nā mea hoʻohana Linux i hoʻonoho ʻia ma ke ʻano nona nā papa kuhikuhi papahana pili.

ua hoʻonohonoho ʻia nā ʻae no nā papa kuhikuhi āpau i 0770 - ke komo piha no ka mea nona a me kāna hui a me kahi pāpā piha no nā mea ʻē aʻe.

2) nā moʻokāki hoʻomohala

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

ʻO ka mea nui, ua hāʻawi ʻia nā mea hoʻomohala i kahi hui hou o ka mea hoʻohana pūnaewele nona ka papahana pili. Hana ʻia kēia e ka luna kikowaena Linux me hoʻokahi kauoha.

Ma kēia laʻana, ke hana nei ʻo "Developer 1" i nā papahana proj1 a me proj2, a ke hana nei ʻo "Developer 2" i nā papahana proj2 a me proj3.

Inā pili kekahi o nā mea hoʻomohala ma o ssh ma o ka laina kauoha, a laila ʻaʻole lawa kā lākou kuleana a hiki i ka nānā ʻana i nā ʻike o nā papa kuhikuhi papahana kahi i komo ʻole ai lākou. ʻAʻole hiki iā ia ke hoʻololi iā ia iho.

No ka mea ʻo ke kumu o kēia kumumanaʻo ka palekana kumu o nā kuleana Linux, hilinaʻi kēia kumumanaʻo. Eia kekahi, maʻalahi loa ka hoʻoponopono ʻana i ka papahana.

E neʻe kākou i ka hoʻomaʻamaʻa.

Ke hana nei i nā waihona waihona Git ma kahi kikowaena Linux

Nānā mākou.

[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 luhi au i ka paʻi lima ʻana...

[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

Manaʻo mākou ʻaʻole hiki ke komo i nā waihona o nā poʻe ʻē aʻe mai ka laina kauoha a ʻike pū i kā lākou ʻike.

[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

ʻO ka hui pū ʻana ma Git o kekahi mau mea hoʻomohala ma hoʻokahi papahana

Hoʻokahi nīnau i koe, inā hoʻokomo kekahi mea hoʻomohala i kahi faila hou, a laila ʻaʻole hiki i nā mea hoʻomohala ʻē aʻe ke hoʻololi iā ia, no ka mea ʻo ia ka mea nona (e laʻa, dev1), ʻaʻole ka mea hoʻohana o ka papahana (e laʻa, proj1). No ka mea he waihona ʻaoʻao server mākou, ʻo ka mea mua, pono mākou e ʻike pehea i hoʻonohonoho ʻia ai ka papa kuhikuhi ".git" a inā paha i hana ʻia nā faila hou.

Ke hana ʻana i kahi waihona Git kūloko a me ka hoʻouka ʻana i ke kikowaena Git

E neʻe kākou i ka mīkini mea kūʻai aku.

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 ka manawa like, hana ʻia nā faila hou ma ke kikowaena, a no ka mea hoʻohana i hana i ka pana

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

Ke hoʻouka nei ʻoe i nā loli i ka server Git, hana ʻia nā faila a me nā papa kuhikuhi, a ʻo kā lākou mea nona ka mea hoʻohana i ka hoʻouka ʻana. Akā ʻo ka hui o kēia mau faila a me nā papa kuhikuhi e pili pū me ka hui nui o kēia mea hoʻohana, ʻo ia hoʻi, ka hui dev1 no ka mea hoʻohana dev1 a me ka pūʻulu dev2 no ka mea hoʻohana dev2 (e hoʻololi i ka hui nui o ka mea hoʻohana hoʻomohala ʻaʻole e kōkua. no ka mea pehea e hiki ai iā ʻoe ke hana ma nā papahana he nui?). I kēia hihia, ʻaʻole hiki i ka mea hoʻohana dev2 ke hoʻololi i nā faila i hana ʻia e ka mea hoʻohana dev1, hiki ke alakaʻi i ka haki ʻana i ka hana.

Linux chown - hoʻololi i ka mea nona ka faila e ka mea hoʻohana maʻamau

ʻAʻole hiki i ka mea nona ka faila ke hoʻololi i kona kuleana. Akā hiki iā ia ke hoʻololi i ka pūʻulu o kahi faila nona, a laila hiki ke hoʻololi ʻia kēia faila e nā mea hoʻohana ʻē aʻe i loko o ka hui like. ʻO ia kā mākou e pono ai.

Ke hoʻohana nei i ka hook Git

ʻO ka papa kuhikuhi hana no ka hook ka papa kuhikuhi kumu o ka papahana. ʻO ka hook kahi mea hoʻokō e holo ana ma lalo o ka mea hoʻohana e hana ana i ka pana. I ka ʻike ʻana i kēia, hiki iā mākou ke hoʻokō i kā mākou mau hoʻolālā.

[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

wale nō paha

vi hooks/post-update

E hoʻi kāua i ka mīkini mea kūʻai aku.

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

Ma ka kikowaena Git, nānā mākou i ka hana o ka hook post-update script ma hope o ka hana

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

- nele, maikaʻi nā mea a pau.

Hoʻohui i kahi mea hoʻomohala ʻelua iā Git

E hoʻohālike kākou i ka hana a ka mea hoʻomohala ʻelua.

Ma ka mea kūʻai aku

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

A i ka manawa like, ma ke kikowaena ...

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

- nele hou, hana nā mea a pau.

Holoi i kahi papahana Git a hoʻoiho i ka papahana mai ka kikowaena Git

ʻAe, hiki iā ʻoe ke hōʻoia hou ua mālama ʻia nā loli a pau.

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

- e holoi i kahi papahana Git, e hoʻomaʻemaʻe wale i ka papa kuhikuhi. E hoʻopaʻa i ka hewa i hana ʻia, ʻoiai ʻaʻole hiki ke holoi i ka papa kuhikuhi o kēia manawa me ka hoʻohana ʻana i kēia kauoha, akā ʻo ia ke ʻano o kā mākou pono.

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"

Kaʻana like ʻana ma Git

I kēia manawa, e hōʻoia ʻoe ma o Git ʻaʻole hiki i ka mea hoʻomohala ʻelua ke komo i ka papahana Proj1, kahi āna e hana ʻole 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.

I kēia manawa, ʻae mākou i ke komo

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

a ma hope o ia hana nā mea a pau.

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

No ka 'ike hou aku,

Eia kekahi, inā he pilikia me nā ʻae paʻamau i ka wā e hana ai i nā faila a me nā papa kuhikuhi, ma CentOS hiki iā ʻoe ke hoʻohana i ke kauoha.

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

Ma ka ʻatikala hoʻi e hina paha ʻoe i nā mea liʻiliʻi pono:

  • pehea e kūkulu ai i kahi lāʻau papa kuhikuhi ma Linux
  • pehea e hoʻoholo ai i nā helu helu ma ka sed mai kahi laina a hiki i ka hope o ka faila, ʻo ia hoʻi, e hana i kahi pani i ka sed ma nā laina āpau koe ka laina mua.
  • Pehea e hoʻohuli ai i ke kūlana huli ma Linux loaʻa
  • Pehea e hoʻohele ai i nā laina he nui i loko o kahi loop me ka hoʻohana ʻana i kahi laina hoʻokahi i ka shell Linux
  • pehea e pakele ai i nā huaʻōlelo hoʻokahi ma bash
  • pehea e holoi ai i kahi papa kuhikuhi me kāna mau mea āpau ma ka laina kauoha windows
  • Pehea e hoʻohana ai i ka bash mv e inoa hou i kahi faila me ka ʻole e kākau hou

Mahalo oe no kou noonoo.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka