Nhazi nke ọtụtụ ndị ọrụ ịnweta sava GIT

Mgbe ị na-etinye ma na-ahazi sava Git, ajụjụ na-ebilite gbasara ịhazi ohere maka ọtụtụ ndị ọrụ na ọtụtụ ọrụ. Achọpụtara m okwu a wee chọta ngwọta nke zutere ihe niile m chọrọ: dị mfe, nchekwa, ntụkwasị obi.

Ọchịchọ m bụ:

  • onye ọrụ ọ bụla jikọọ na akaụntụ nke ha
  • Ọtụtụ ndị ọrụ nwere ike ịrụ ọrụ n'otu ọrụ
  • Otu onye ọrụ nwere ike ịrụ ọrụ na otutu oru ngo
  • onye ọrụ ọ bụla nwere ohere naanị ọrụ ndị ọ na-arụ ọrụ
  • Ọ ga-ekwe omume ijikọ site na ahịrị iwu, ọ bụghị naanị site n'ụdị interface weebụ

Ọ ga-adịkwa mma:

  • nye ndị na-achịkwa ikike ịgụ naanị
  • Jiri nwayọ jikwaa ikike ịnweta onye ọrụ na Git

Nchịkọta nhọrọ enwere ike ịnweta sava GIT

Nke mbụ, ịkwesịrị ịma ihe ị ga-ahọrọ, yabụ nke a bụ ntụle ngwa ngwa nke ụkpụrụ Git.

  • ssh - a na-eji akaụntụ njirimara emepụtara nke ọma iji nweta ihe nkesa ahụ.
    • Ọ dị ịtụnanya na Git anaghị ewepu na ndụmọdụ ya iji otu akaụntụ nweta ebe nchekwa niile. Nke a ezuteghị ihe m chọrọ ma ọlị.
    • Ị nwere ike iji ọtụtụ akaụntụ, mana kedu ka ị ga-esi gbochie ohere onye ọrụ na naanị ụfọdụ akwụkwọ ndekọ aha?
      • Imechi n'ime ndekọ ndekọ ụlọ adịghị mma, n'ihi na ọ na-esiri ike ịhazi ohere ide ihe maka ndị ọrụ ndị ọzọ
      • Iji symlinks sitere na ndekọ ụlọ gị dịkwa ike n'ihi na Git anaghị akọwa ha dị ka njikọ
      • Ọ ga-ekwe omume igbochi ịnweta onye ntụgharị okwu, mana enweghị nkwa zuru oke na ọ ga-arụ ọrụ mgbe niile
        • Ị nwere ike jikọọ onye ntụgharị okwu iwu nke gị maka ndị ọrụ dị otú ahụ, mana
          • mbụ, nke a abụrụlarị ụdị mkpebi siri ike,
          • na nke abụọ, nke a nwere ike ịgbagha ya.

    Ma eleghị anya, ọ bụghị nsogbu na onye ọrụ ga-enwe ike ịme iwu ọ bụla? .. N'ozuzu, a pụghị ịchịkwa usoro a ma ọ bụrụ na ị chọpụta kpọmkwem otu esi eji ya. Anyị ga-alaghachi na usoro a ma emechaa, ma ugbu a, anyị ga-atụle nkenke usoro ndị ọzọ, ma eleghị anya, a ga-enwe ihe dị mfe.

  • Enwere ike iji protocol mpaghara git yana sshfs, enwere ike iji ọtụtụ ndị ọrụ, mana ọ bụ otu ihe ahụ dị ka ikpe gara aga.
  • http - naanị ọgụgụ
  • git bụ naanị ọgụgụ
  • https - siri ike ịwụnye, ịchọrọ sọftụwia ọzọ, ụfọdụ ụdị njikwa njikwa iji hazie ohere onye ọrụ… ọ dị ka ọ ga-ekwe omume, mana n'ụzọ ụfọdụ ihe niile siri ike.

Iji ssh protocol iji hazie ohere ọtụtụ onye ọrụ na sava Git

Ka anyị laghachi na protocol ssh.

Ebe ị na-eji ohere ssh maka git, ịkwesịrị ijide n'aka na nchekwa data nkesa. Onye ọrụ na-ejikọta site na ssh na-eji nbanye nke ha na sava Linux, ka ha nwee ike jikọọ site na onye ahịa ssh wee nweta ahịrị iwu nkesa.
Enweghị nchebe zuru oke megide ohere dị otú ahụ.

Mana onye ọrụ ekwesịghị inwe mmasị na faịlụ Linux. A na-echekwa ozi dị mkpa naanị na ebe nchekwa git. Ya mere, ọ ga-ekwe omume ịghara igbochi ịnweta site na ahịrị iwu, mana iji ngwaọrụ Linux gbochie onye ọrụ ilele ọrụ, ewezuga ndị ọ na-ekere òkè na ya.
Nhọrọ doro anya bụ iji sistemụ ikike Linux.

Dịka ekwuru, ọ ga-ekwe omume iji naanị otu akaụntụ maka ịnweta ssh. Nhazi a adịghị mma maka ọtụtụ ndị ọrụ, n'agbanyeghị na etinyere ya na listi nhọrọ git akwadoro.

Iji mejuputa ihe achọrọ na mmalite nke isiokwu a, a na-emepụta usoro ndekọ aha na-esote ya na ọrụ nke ikike na ndị nwe ya:

1) akwụkwọ ndekọ aha

dir1 (proj1:proj1,0770)
dir2 (proj2:proj2,0770)
dir3 (proj3:proj3,0770)
...
ebe
dir1, dir2, dir3 - akwụkwọ ndekọ aha: oru ngo 1, oru ngo 2, oru ngo 3.

proj1:proj1, proj2:proj2, proj3:proj3 bụ ndị ọrụ Linux emepụtara nke ọma bụ ndị ekenyere dị ka ndị nwe akwụkwọ ndekọ aha ọrụ kwekọrọ.

Edobere ikike maka akwụkwọ ndekọ aha niile na 0770 - ohere zuru oke maka onye nwe ya na ndị otu ya yana mmachibido iwu maka onye ọ bụla.

2) akaụntụ mmepe

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

Isi ihe dị na ya bụ na a na-ekenye ndị mmepe otu mgbakwunye nke onye ọrụ sistemụ nwere ọrụ kwekọrọ. Nke a bụ onye nchịkwa Linux nke na-eji otu iwu eme ya.

N'ihe atụ a, "Developer 1" na-arụ ọrụ na proj1 na proj2, na "Developer 2" na-arụ ọrụ na proj2 na proj3.

Ọ bụrụ na ndị mmepe ọ bụla jikọọ site na ssh site na ahịrị iwu, mgbe ahụ ikike ha agaghị ezuru ọbụna ilele ọdịnaya nke akwụkwọ ndekọ aha ọrụ nke ha anaghị eso. Ọ nweghị ike ịgbanwe nke a n'onwe ya.

Ebe ndabere nke ụkpụrụ a bụ isi nchekwa nke ikike Linux, atụmatụ a bụ nke a pụrụ ịdabere na ya. Tụkwasị na nke ahụ, atụmatụ ahụ dị nnọọ mfe iji nye ya.

Ka anyị gaa n'ihu n'omume.

Ịmepụta ebe nchekwa Git na sava Linux

Anyị na-enyocha.

[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

Ike ji aka pịnye ike...

[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

Anyị kwenyesiri ike na ọ gaghị ekwe omume ịnweta ebe nchekwa ndị ọzọ site na ahịrị iwu na ọbụna lelee ọdịnaya ha.

[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

Soro ọtụtụ ndị nrụpụta rụkọọ ọrụ n'otu ọrụ ahụ na Git

Otu ajụjụ ka dị, ọ bụrụ na onye nrụpụta ewebata faịlụ ọhụrụ, mgbe ahụ ndị mmepe ndị ọzọ enweghị ike ịgbanwe ya, n'ihi na ya onwe ya bụ onye nwe ya (dịka ọmụmaatụ, dev1), ọ bụghị onye nwe ọrụ ahụ (dịka ọmụmaatụ, proj1). Ebe ọ bụ na anyị nwere ebe nchekwa ihe nkesa-n'akụkụ, nke mbụ, anyị kwesịrị ịma ka esi ahazi ndekọ ".git" yana ma e mepụtara faịlụ ọhụrụ.

Ịmepụta ebe nchekwa Git dị na mpaghara na ịkwanye na sava Git

Ka anyị gaa n'ihu na igwe ndị ahịa.

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>

N'otu oge ahụ, a na-emepụta faịlụ ọhụrụ na ihe nkesa, na ha bụ nke onye ọrụ nke mere ntinye ahụ

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

Mgbe ị na-ebugo mgbanwe na sava Git, a na-emepụta faịlụ na akwụkwọ ndekọ aha, na onye nwe ha bụ onye ọrụ na-ebugo ya. Mana otu faịlụ na akwụkwọ ndekọ aha kwekọrọ na ndị isi otu onye ọrụ a, ya bụ, otu dev1 maka onye ọrụ dev1 na otu dev2 maka onye ọrụ dev2 (ịgbanwe isi otu onye nrụpụta agaghị enyere aka, n'ihi na mgbe ahụ, olee otú ị ga-esi rụọ ọrụ na otutu oru ngo?). N'okwu a, onye ọrụ dev2 agaghị enwe ike ịgbanwe faịlụ nke onye ọrụ dev1 mepụtara, nke nwere ike iduga ndakpọ na ọrụ.

Linux chown - na-agbanwe onye nwe faịlụ site na onye ọrụ oge niile

Onye nwe faịlụ enweghị ike ịgbanwe nwe ya. Ma ọ nwere ike ịgbanwe otu faịlụ nke ya, mgbe ahụ, ndị ọrụ ndị ọzọ nọ n'otu otu nwere ike gbanwee faịlụ a. Nke ahụ bụ ihe anyị chọrọ.

Iji Git nko

Akwụkwọ ndekọ aha maka nko bụ akwụkwọ ndekọ mgbọrọgwụ nke ọrụ ahụ. nko bụ executable na-agba ọsọ n'okpuru onye ọrụ na-eme push. N'ịmara nke a, anyị nwere ike ime atụmatụ anyị.

[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

ma ọ bụ naanị

vi hooks/post-update

Ka anyị laghachi na igwe ahịa.

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

Na ihe nkesa Git, anyị na-elele ọrụ nke ndetu mmelite mmelite nko ka emechara

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

- efu, ihe niile dị mma.

Jikọọ onye nrụpụta nke abụọ na Git

Ka anyị ṅomie ọrụ nke onye nrụpụta nke abụọ.

Na onye ahịa

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 n'otu oge ahụ, na ihe nkesa ...

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

- efu ọzọ, ihe niile na-arụ ọrụ.

Ihichapụ ọrụ Git na nbudata ọrụ ahụ na sava Git

Ọfọn, ị nwere ike hụkwa na echekwabara mgbanwe niile.

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

- ka ihichapụ ọrụ Git, kpochapụ akwụkwọ ndekọ aha kpamkpam. Ka anyị nagide njehie nke emepụtara, ebe ọ bụ na ọ gaghị ekwe omume ihichapụ ndekọ ugbu a site na iji iwu a, mana nke a bụ kpọmkwem omume anyị chọrọ.

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"

Ịkekọrịta ohere na Git

Ugbu a, ka anyị hụ na ọbụna site na Git onye nrụpụta nke abụọ enweghị ike ịnweta ọrụ Proj1, nke ọ naghị arụ ọrụ.

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.

Ugbu a, anyị na-ekwe ohere

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

na mgbe ahụ ihe niile na-arụ ọrụ.

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

Maka ozi ọzọ,

Na mgbakwunye, ọ bụrụ na enwere nsogbu na ikike ndabara mgbe ị na-eke faịlụ na akwụkwọ ndekọ aha, na CentOS ị nwere ike iji iwu ahụ.

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

Ọzọkwa na isiokwu ị nwere ike ịsụ ngọngọ na obere ihe bara uru:

  • otu esi arụ osisi ndekọ aha na Linux
  • otu esi agafe ọtụtụ adreesị na sed site na otu ahịrị ruo na njedebe nke faịlụ ahụ, ya bụ, mee mgbanwe na sed n'ahịrị niile ma e wezụga ahịrị mbụ.
  • Otu esi atụgharị ọnọdụ ọchụchọ na Linux chọta
  • Otu esi etinye ọtụtụ ahịrị n'ime loop site na iji otu-liner na shei Linux
  • Otu esi agbanarị ngụ otu na bash
  • otu esi ehichapụ ndekọ na ọdịnaya ya niile na ahịrị iwu windows
  • Otu esi eji bash mv nyegharịa faịlụ aha na-edegharịghị ya ọzọ

Daalụ maka mmasị gị.

isi: www.habr.com

Tinye a comment