Git是分布式的,並沒有服務端跟客戶端之分,所謂的服務端安裝的其實也是git。Git支持四種協議,file,ssh,git,http。ssh是使用較多的,下面使用ssh搭建一個免密碼登錄的服務端。
1、提前安裝git跟sshserver;
2、 創建一個用戶,用來運行git服務;
新建一個用戶,叫gituser,然后切換到gituser的默認目錄,創建一個叫.ssh的文件夾,並在其中創建一個叫authorized_keys的文件,這個文件將用於存儲git開發者的ssh公鑰。
3、建立一個git倉庫;
切換到gituser默認目錄,建立一個testgit文件夾,在其中創建一個用於測試的git項目並進行初始化。
創建一個aaa.txt,內容隨便填寫,將該文件納入git管理
4、創建證書
切換到git開發者電腦。設置本地git用戶並創建公鑰和私鑰
Windows系統,在用戶主目錄下有id_rsa.pub跟id_rsa兩個文件:
這兩個就是一對秘鑰,id_rsa是私鑰,id_rsa.pub是公鑰。
5、添加公鑰到ssh
將本地生成的id_rsa.pub的內容追加到git服務器gituser用戶的~/.ssh/authorized_keys文件中。注意,不是把authorized_keys建成文件夾,把公鑰扔進去,是追加文件內容。
特別要注意:.ssh的權限必須是700,authorized_keys文件的權限必須是600,否則公鑰無法生效。
6、修改ssh服務端配置
vi /etc/ssh/sshd_config
7、從服務端clone項目
在開發者電腦端,執行以下命令:
可以看到我們成功把“服務器”上的git項目clone到了本地。
------------------------------------------------------------------------------------------------------------
其實,上面的操作有些繁瑣:在“服務端”建一個git項目,然后初始化,然后建一個可以免密碼登錄的用戶,然后用這個賬號把git項目拷貝了下來;簡單來說,我不免密碼登錄,也可以git clone那個項目,比如我用root用戶:
也就是說,只要“服務端”有git項目,有一個可以遠程登錄的ssh用戶,我們就可以直接git clone 那個項目,這個時候,“服務端”跟“客戶端”都只要git,沒有所謂的gitlab等服務端軟件,兩者之間只是通過ssh通信就可以實現git的clone,commit等操作,兩者地位是平等的。
可見git的確是無中心的分布式的。而github,gitlab之類的“服務端”其實是一個幫助我們管理用戶跟git通信方式的工具,在這一點上,gitlab跟visualsvn-server之類的軟件有本質的區別。
------------------------------------------------------------------------------------------------------------