前言
Git是一個非常著名的分布式版本控制系統,而廣大開發者更是習慣在最大的遠程倉庫GitHub上提交自己的代碼。但是有時候,一些小項目不值得放到GitHub上去,或是由於隱私問題不好在GitHub的公共倉庫上提交,自己也不願意出錢購買私有倉庫。在這種情況下,如何在一台自己的Linux服務器上搭建Git服務,並且和客戶端(特別是Windows客戶端)完美協同工作呢?
系統配置
服務器:Ubuntu 16.04
客戶端:Windows主機(Windows 7以上)
安裝Git和SSH
在服務器上運行apt安裝git和openssh-server即可,非常方便。
$ sudo apt install git openssh-server
客戶端由於是windows,沒有原生ssh,因此需要下載git for windows和putty。安裝過程略。
生成密鑰對
安裝完成之后,在客戶端的命令行中運行如下命令生成SSH密鑰對:
C:\> ssh-keygen -t rsa
按照提示操作即可,為了簡便起見不用設置ssh密鑰的密碼。
執行上述命令之后可以在C:\Users\用戶名.ssh目錄下找到id_rsa.pri和id_rsa.pub兩個文件。分別是你的私鑰和公鑰。
在服務器上同樣運行這個命令,則可以在/home/用戶名/.ssh中也找到這兩個文件,但是我們並不關心服務器上這兩個文件的內容,除非服務器需要ssh連接客戶端。
將客戶端公鑰復制到服務器
在服務器上新建authorized_keys文件。
$ cd .ssh
$ touch authorized_keys
然后將客戶端公鑰文件id_rsa.pub文件的內容復制到authorized_keys文件中去。如果有多個客戶端,則需要將每個客戶端的公鑰都復制到authorized_keys中,一行一個。
對於windows客戶端,可以通過putty自帶的pscp命令將id_rsa.pub文件復制到服務器,再ssh進入服務器操作(當然如果有服務器的直接操作權限那就更好啦)
新建git倉庫
在服務器上新建你要作為git倉庫的文件夾,例如:
$ mkdir myrepo
這里的myrepo應當根據實際要求替換成你自己的倉庫名。
然后執行下列命令:
$ cd myrepo
$ git --bare init myrepo.git
這樣就建立好了自己的倉庫。
修改SSHD配置
網上很多教程到上面一步就結束了,但是它們都漏了很重要的一步。就是修改sshd的配置。
$ sudo vim /etc/ssh/sshd_config
確保以下幾處配置:
StrictModes no #由yes改為no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys #這里要取消注釋
這樣做的目的是使以后你推送到遠程倉庫時不需要再輸入密碼。
客戶端配置
克隆遠程倉庫
使用git clone命令克隆遠程倉庫:
> git clone username@host:/myrepo/myrepo.git
即可完成遠程倉庫的克隆。這里的username應替換成你遠程倉庫主機的用戶名,host一般是遠程倉庫的IP地址,或者你可以將遠程計算機名添加入客戶端的host文件。
工作並推送到遠程倉庫
完成工作並提交更改以后,可以使用git push命令將你的修改推送到遠程倉庫。
> git push origin master
這里的master也可以是其他分支,涉及到git的詳細操作教程,本文這里不展開。
修改遠程倉庫地址的方法
有的時候遠程倉庫地址並不是一個靜態IP地址,可能會隨着DHCP協議重新分配,那么當遠程倉庫的IP地址發生了變化后怎么在客戶端修改遠程倉庫的地址呢?只要進入你克隆的目錄下,找到.git/config文件,將其中的遠程倉庫地址修改為新的地址即可。
服務器上倉庫的重建
非常簡單,只要你在別的地方有克隆過版本庫,在config文件中修改新的倉庫地址,然后push所有的分支即可完成倉庫重建。
總結
本文描述了在linux下配置git服務器和ssh服務,以及如何使用Windows系統連接到自建的git服務器並完成克隆、推送等一系列操作的方法。修正了一些網上教程的缺漏。在筆者的環境下(一台服務器、一台客戶端)配置成功。希望本文對各位想在自己的服務器上搭建git服務進行版本控制的朋友有所幫助。
