僅學習Git的一些入門操做比較容易,平時更多地使用GitHub,不過今天我想自個搭個服務練練手。當看完一些材料合做了一些驗證以後,才發現其實所謂的服務和以前的svn徹底不同了。過程記錄以下:html
LinuxServer端安裝gitgit
我把服務打在Linux機器上,這臺破機器沒有apt-get,沒有yum,只好本身下載源碼,本身編譯 服務器
$ wget http://distfiles.macports.org/git/git-2.5.3.tar.gz $ tar xzvf git-latest.tar.gz $ cd git-{date} $ autoconf $ ./configure --with-curl=/usr/local $ make $ make install
還好一路順利:ssh
$ git --version git version 2.5.3
Server端ssh配置 curl
1)若是client端沒有建立ssh rsa公鑰,則先建立:分佈式
$ cd ~ $ ssh-keygen -t rsa # 默認存放路徑在~/.ssh/id_rsa.pub
2)若是client端已建立,並存在~/.ssh/id_rsa.pub,則將其拷貝到server端:svn
$ ssh <username>@<server_ip>:.ssh/authorized_keys id_rsa.pub 100% 416 0.4KB/s 00:00
3)修改Server端的sshd_config:學習
$ ssh <username>@<server_ip> $ cd /etc # 有的機器在/etc/ssh下面 $ sudo chmod 666 sshd_config $ vi sshd_config #PermitRootLogin yes 改成 PermitRootLogin no # 下面幾項把前面的 #註釋 去掉 #RSAAuthentication yes #PubkeyAuthentication yes #AuthorizedKeysFile .ssh/authorized_keys #PasswordAuthentication no #PermitEmptyPasswords no #UsePAM yes 改成 UsePAM no
測試是否有效測試
1)在Server端建立空的repositoryurl
$ cd repo
$ git init -—bare # -—bare flag 只是用來存儲pushes,不會當作本地repository來使用的。
2)在Client端建立repository 並push
$ mkdir localrepo $ cd localrepo $ git init $ touch README $ git add . $ git commit -m 「add README」 $ git remote add origin <username>@<server_ip>:/repo $ git push origin master
3)在Client端clone剛剛建立的repository
$ git clone <username>@<server_ip>:/repo localrepo2
發現剛剛提交的代碼樹被clone下來,說明搭建成功
因爲git是分佈式的,沒有主從之分,因此我理解所謂搭建git服務,其實就是確保有權限訪問「服務器」上的git文件。這與該文件是在遠程仍是本地是無關的。好比上面的例子中,若是我把服務器放在本地,同樣是能夠的。
驗證服務器搭建在本地
1)在本地建立空的repository
$ mkdir ~/repo $ cd ~/repo $ git init —bare
2)在本地建立repository 並push
$ mkdir ~/localrepo $ cd ~/localrepo $ git init $ touch README $ git add . $ git commit -m 「add README」 $ git remote add origin ~/repo $ git push origin master
3)在本地clone剛剛建立的repository
$ git clone ~/repo ~/localrepo2
查看~/localrepo2,果真README被克隆過來了。
參考資料: