Git服務器搭建


1、Git的簡介與優缺點

什么是git?

  Git是目前世界使用最廣泛的分布式版本控制系統,它是由林納斯·托瓦茲(Linus Torvalds)創作,最初的目的是為了更好地管理Linux內核開發而設計的。

與svn對比優缺點?

  1、與svn對比最核心區別就是Git是分布式,而svn是非分布式。這主要表現在使用Git時每一個開發人員電腦本地上存在一個Local Repository,這個Local Repository包含着遠程庫中的所有文件,因此,即使在沒網的時候也可以進行commit提交,查看歷史版本記錄,創建項目分支等操作,等網絡再次連接上Push到Server端。

  2、Git把內容按元數據方式存儲,而SVN是按文件方式存儲。表現為.git文件與.svn文件大小區別很大

  3、SVN存在一個自增的全局版本號;而Git每次提交,通過對文件的內容或目錄的結構計算出一個SHA-1 哈希值,得到一個40位的十六進制字符串,以此來作為版本號。

  4、Git的內容的完整性要優於SVN:Git的內容存儲使用的是SHA-1哈希算法。Linux kernel開創者和Git的開發者——Linus說,Git使用了SHA-1並非是為了安全性,而是為了數據的完整性;它可以保證,在很多年后,你重新checkout某個commit時,一定是它多年前的當時的狀態,完全一摸一樣,完全值得信任。

  5、Git下載下來后,在OffLine狀態下可以看到所有的Log,SVN不可以。

  6、SVN必須先Update才能Commit,忘記合並時就會出現一些錯誤,git還是比較少的出現這種情況。

  7、克隆一個新項目,Git只需克隆master分支;svn則需要復制所有的版本。Git省時。

  8、 版本庫(repository):SVN只能有一個指定中央版本庫。當這個中央版本庫有問題時,所有工作成員都一起癱瘓直到版本庫維修完畢或者新的版本庫設立完成。而 Git可以有無限個版本庫。或者,更正確的說法,每一個Git都是一個版本庫,區別是它們是否擁有活躍目錄(Git Working Tree)。如果主要版本庫(例如:置於GitHub的版本庫)發生了什麼事,工作成員仍然可以在自己的本地版本庫(local repository)提交,等待主要版本庫恢復即可。工作成員也可以提交到其他的版本庫!

  9、SVN創建分支會影響其他人;Git則可以在本地創建任意分支,只要我不合並及提交到主要版本庫,則不會影響任何人。
  10、提交(Commit)在SVN,當你提交你的完成品時,它將直接記錄到中央版本庫。當你發現你的完成品存在嚴重問題時,你已經無法阻止事情的發生了。如果網路中斷,你根本沒辦法提交!而Git的提交完全屬於本地版本庫的活動。而你只需“推”(git push)到主要版本庫即可。Git的“推”其實是在執行“同步”(Sync)。
  11、模式上會比SVN相對較復雜
 

 2、Git的安裝

  安裝環境:Linux  CentOS7

  我直接使用yum安裝,直接在linux中執行下面兩行命令

 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel    //安裝依賴
 yum install git        //安裝Git 也可以直接運行yum intall git  yum會自動安裝軟件依賴

  這樣子Git環境就安裝好了,接下老就是權限設置,哪些人可以訪問這個Git服務器呢?

 

3、用戶訪問設置

  3.1、秘鑰登陸類型

   1、首先創建一個用戶組以及用戶

1 groupadd git    //創建git用戶組
2 useradd git -g git   //創建git用戶,用來運行git服務

  2、收集所需登陸用戶的公鑰,並將公鑰導入到/home/git/.ssh/authorized_keys文件里,一行一個。  

  Linux中的公鑰在每個用戶的home目錄下(/home/用戶/.ssh),沒有則使用命令進行創建:ssh-keygen -t rsa

  Windowns中的公鑰創建:

  使用git,打開Git Bash。
  1. 安裝git,從程序目錄打開 "Git Bash" 
  2. 鍵入命令:ssh-keygen -t rsa -C "suifengin412@gmail.com"   //紅色字體可有可無
  3. 指定文件生成的目錄
  4. 在指定的目錄下產生兩個文件:id_rsa和id_rsa.pub

  進入git家目錄,將收集的公鑰(id_rsa.pub里面的內容),添加到authorized_keys文件中(一行一個)。

  沒有authorized_keys文件則創建:

 cd /home/git/
 mkdir .ssh
 chmod 700 .ssh vim .ssh/authorized_keys chmod 600 .ssh/authorized_keys

  注意:.ssh 目錄必須是700權限、authorized_keys文件必須是600權限

  3.2、密碼登陸類型

  1、創建登陸用戶並添加到git用戶組中

useradd -M git1        //-M 表示不創建家目錄
useradd -M git2    
passwd git1  //設置密碼
passwd git2
usermod -G git git1   //將新建的兩個用戶添加到git組中                 
usermod -G git git2 

  2、禁止新創建的用戶ssh登陸linux服務器

which git-shell       //查看git-shell所在路徑 (我的是:/usr/bin/git-shell)
vim /etc/passwd   //將用戶名稱:x:1000:1000::/home/用戶名稱:/bin/bash  將/bin/bash替換為git-shell所在路徑

注意:

  創建用戶的時候加-M,主要目的是不在home目錄下生成該用戶的擁有讀寫權限的家目錄。這是因為我們創建的這些用戶是用於git服務上面,並不想給用戶除了git訪問以外其他的權限;同理,需禁止用戶通過ssh登陸linux服務器。 

 

4、初始化git服務器

  我們就選取git目錄作為git的倉庫

chmod g-w /home/git    //這個是必要的
cd /home/git    //進入git家目錄
git init --bare test.git    //創建一個空倉庫,服務器上的Git倉庫通常都以.git結尾
chown -R git:git test.git/    //設置權限,因為我使用root來創建這個空倉庫,因此需要變相應的權限設置
chmod  -R 775 test.git/     //設置所屬組的所有權限,否則秘鑰類型push不成功

  注意:變更文件的所有者以及組權限非常重要,切記。

5、克隆倉庫

git clone git@git_ip:/home/gitrepo/runoob.git   //git_ip為Git所在服務器ip ,需要將其修改為你自己的 Git 服務ip。

 

6、參考資料

 1. 《話說Svn與Git的區別(以后別再問我了)》

 

(以上是自己的一些見解,若有不足或者錯誤的地方請各位指出)

 作者:那一葉隨風   http://www.cnblogs.com/phpstudy2015-6/

 原文地址:https://www.cnblogs.com/phpstudy2015-6/p/9153497.html

 聲明:本博客文章為原創,只代表本人在工作學習中某一時間內總結的觀點或結論。轉載時請在文章頁面明顯位置給出原文鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM