天天看點

Git基本概念及操作(4)

前面講述的大部分操作都是針對本地伺服器。實際使用中,因為我們通常都是分布的世界各地進行協同開發,是以一個中間的同步伺服器是必不可少的。同步伺服器架設比較簡單,隻需要一個簡單的檔案伺服器就行了。通常用戶端通路這台檔案伺服器可以通過直接檔案讀寫file://,HTTP,SSH,git等四種方式,除了HTTP隻能讀取外,其它三種需要在服務端上安裝GIT服務程式。下面分别講述:

1)伺服器部署,需要首先說明的是伺服器不儲存工作目錄中的檔案,隻儲存.git目錄下所有檔案,是以首先要将這個檔案導出來。

git clone –bare ../mygit/ mygit.git

然後将生成的mygit.git目錄檔案拷到伺服器目錄下,如下所示:

[root@wrlinux3 bongos]# cd mygit

[root@wrlinux3 mygit]# ls

main.c  README  testdir

[root@wrlinux3 mygit]# git clone --bare ../mygit/ mygit.git

Cloning into bare repository 'mygit.git'...

done.

main.c  mygit.git  README  testdir

[root@wrlinux3 mygit]#

2)賬号管理,GIT沒有自己的賬号管理系統,如果采用SSH通路,通用的是伺服器上的賬号系統,隻要這個賬号對GIT目錄有寫權限,它就自己有讀寫權限。賬号管理目前有幾中通用的方法,一種是為每個使用者建立一個賬号,設定獨立的權限。第二種是一個通用的賬号,然後通過SSH KEY進行授權。第三種是LDAP.其中第二種是應用最多的。如GITHUB。第二種方式首先要建立id_rsa.pub.如下所示:

[root@wrlinux3 mygit]# cd ~/.ssh/

[root@wrlinux3 .ssh]# ls

known_hosts

[root@wrlinux3 .ssh]# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

ec:b6:c9:9d:ac:0f:8f:eb:7c:1c:20:f5:ff:b3:35:06 [email protected]

The key's randomart image is:

+--[ RSA 2048]----+

|                 |

|        .        |

|       . .       |

|      ... .      |

|       .S. . E   |

|       .  . . .  |

|        +. . . o.|

|       + Oo.  +..|

|       .X=*   .o |

+-----------------+

[root@wrlinux3 .ssh]# cat id_rsa

id_rsa      id_rsa.pub 

[root@wrlinux3 .ssh]# cat id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyumP9ubMyAcpx30cDntEYUqUnj/R4w2t5fXS30bf1+FvCEtPA69SZx00LfOKLp45uAls8hQ+1HwvFSgZSbOXZdB59OJQT3GC/KRyy3TT8tKlJyJKOq7FfS0ukW+oAQ/SBJyAGL0EaM7igcKUF77/xf50PN9yLKEJ0pggdSoYnyCTYoQKWQaUyQ5yNyu+dADT5IpdMii1OQ0Wx/C4W59dbvpKzUBvX0UbNjCh5UPVrVUBKT+0vHKsdY3Kca6Cl73FCLG9C405fAJJ77/kLR690QSQ+0kICmCktWCZUUaQoedrwG8s+M31zu5hR1e9Div/e5WTigmYsu63dhw17AgzZw== [email protected]

[root@wrlinux3 .ssh]#

在服務端建立authorized.key

$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys

$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys

$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys

[root@wrlinux3 mygit]# mkdir myservgit

main.c  mygit.git  myservgit  README  testdir

[root@wrlinux3 mygit]# cd myservgit/

[root@wrlinux3 myservgit]# ls

[root@wrlinux3 myservgit]# cp -r -f ../

.git/      main.c     mygit.git/ myservgit/ README     testdir/  

[root@wrlinux3 myservgit]# cp -r -f ../mygit.git/ .

mygit.git

[root@wrlinux3 myservgit]# cd ..

[root@wrlinux3 mygit]# mkdir mycligit

[root@wrlinux3 mygit]# cd mycligit

[root@wrlinux3 mycligit]# ls

[root@wrlinux3 mycligit]# git clone /work/bongos/mygit/myservgit/mygit.git/

Cloning into 'mygit'...

mygit

[root@wrlinux3 mycligit]# cd ..

main.c  mycligit  mygit.git  myservgit  README  testdir

[root@wrlinux3 mygit]# mkdir mycligit2

[root@wrlinux3 mygit]# cd mycligit2/

[root@wrlinux3 mycligit2]# ls

[root@wrlinux3 mycligit2]# git clone file:///work/bongos/mygit/myservgit/mygit.git/

remote: Counting objects: 39, done.

remote: Compressing objects: 100% (34/34), done.

remote: Total 39 (delta 4), reused 0 (delta 0)

Receiving objects: 100% (39/39), done.

Resolving deltas: 100% (4/4), done.

[root@wrlinux3 mycligit2]# cd ..

main.c  mycligit  mycligit2  mygit.git  myservgit  README  testdir

[root@wrlinux3 mygit]# mkdir mycligit3

[root@wrlinux3 mygit]# cd mycligit3/

[root@wrlinux3 mycligit3]# git clone ssh://root@localhost:mygit

ssh: Could not resolve hostname : Name or service not known

fatal: The remote end hung up unexpectedly

[root@wrlinux3 mycligit3]# ps -ef|grep ssh

root      1579     1  0 Apr17 ?        00:00:00 /usr/sbin/sshd

root      9317     1  0 Apr19 ?        00:00:00 /usr/bin/ck-xinit-session /usr/bin/ssh-agent /etc/X11/xinit/Xclients

root      9423  9422  0 Apr19 ?        00:00:01 /usr/bin/ssh-agent /etc/X11/xinit/Xclients

500       9477     1  0 Apr19 ?        00:00:00 /usr/bin/ck-xinit-session /usr/bin/ssh-agent /etc/X11/xinit/Xclients

500       9550  9549  0 Apr19 ?        00:00:01 /usr/bin/ssh-agent /etc/X11/xinit/Xclients

root     32142 10366  0 16:13 pts/5    00:00:00 grep ssh

[root@wrlinux3 mycligit3]# ls

[root@wrlinux3 mycligit3]# cd ..

main.c  mycligit  mycligit2  mycligit3  mygit.git  myservgit  README  testdir

[root@wrlinux3 mycligit3]# git clone [email protected]:/work/bongos/mygit/myservgit/mygit.git/

The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.

RSA key fingerprint is d5:df:d5:98:16:af:2f:a8:91:58:f3:56:a4:68:1e:f0.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts.

[email protected]'s password:

Permission denied, please try again.

[root@wrlinux3 mycligit3]# LS

bash: LS: command not found

[root@wrlinux3 mycligit3]#

如果賬号過多,可以采用Gitosis進行管理

3)對外釋出,可以采用Apache.GitWeb,這些安裝時可以參考相關文檔進行配置。

4)托管服務,常見托管伺服器有github(www.github.com)和http://gitorious.org/

6)遠端分支與本地分支的關系,這一部分前面并沒有詳述。實際上遠端伺服器的分支與本地分支并不存在必然的關系,需要手工映射或者同步才能将本地庫與遠端庫關聯起來。如下所示:

從上圖可以看出GIT clone會建立出一個對應遠端origin/master的本地master分支,但git feter隻會同步本地的origin/master指針,不會同步master local,需要手動merger,當然可以使用git pull origin master。下面列出除了拉資料的幾個常見操作:

【1】推資料到服務端 git push orign serverfix 也可以這樣寫git push origin serverfix:serverfix

【2】删除遠端分支 git push origin :serverfix

【3】跟蹤分支,實際就是映射遠端分支的本地分支 git checkout –track origin/serverfix 或git checkout –b sf origin/serverfix

繼續閱讀