分布式版本控制系統(tǒng)
1.Git,GitHub,GitLab的區(qū)別
Git是一個開源的分布式版本控制系統(tǒng),用于敏捷高效第處理任何或小或大的項目。是Linus Torvalds 為了幫助管理Linux內(nèi)核開發(fā)而開發(fā)的一個開放源碼的版本控制軟件。
Github是在線的基于Git的代碼托管服務(wù)。GitHub是2008年由Ruby on Rails編寫而成。
GitHub同時提供付費賬戶和免費賬戶。這兩種賬戶都可以創(chuàng)建公開的代碼倉庫,只有付費賬戶可以創(chuàng)建私有的代碼倉庫。Gitlab解決了這個問題,可以在上面創(chuàng)建免費的私人repo。
2.Git與SVN區(qū)別
GIT不僅僅是個版本控制系統(tǒng),它也是個內(nèi)容管理系統(tǒng)(CMS),工作管理系統(tǒng)等。
如果你是一個具有使用SVN背景的人,你需要做一定的思想轉(zhuǎn)換,來適應(yīng)GIT提供的一些概念和特征。
2.1 Git與SVN區(qū)別
- 1.GIT是分布式的,SVN不是:這是GIT和其它非分布式的版本控制系統(tǒng),例如SVN,CVS等,最核心的區(qū)別。
- 2.GIT把內(nèi)容按元數(shù)據(jù)方式存儲,而SVN是按文件:所有的資源控制系統(tǒng)都是把文件的元信息隱藏在一個類似.svn,.cvs等的文件夾里。
- 3.GIT分支和SVN的分支不同:分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。
- 4.GIT沒有一個全局的版本號,而SVN有:目前為止這是跟SVN相比GIT缺少的最大的一個特征。
- 5.GIT的內(nèi)容完整性要優(yōu)于SVN:GIT的內(nèi)容存儲使用的是SHA—1哈希算法。這能確保代碼內(nèi)容的完整性,確保在遇到磁盤故障和網(wǎng)絡(luò)問題時降低對版本庫的破壞。
3 部署Git服務(wù)
創(chuàng)建git倉庫
git-server上的操作:
[rooteqfedu.com-]#yum install gitgit-core gitweb-y
[rooteqfedu.com~]#useraddgit
[rooteqfedu. com -] passwd git
[rooteqfedu. com -] mkdir /git-root/
[rooteqfedu. com -] cd /git-root/
[rooteqfedu. com git-root]# git init --bare shell.git ##shell名字可以改
Initialized empty Git repository in /git-root/shell.git/
注意:
git init 和 git init --bare 的區(qū)別:
使用——bare選項時,不再生成.git目錄,而是只生成.git目錄下面的版本歷史記錄文件,這些版本歷史記錄文件也不再存放在.git目錄下面,而是直接存放在版本庫的根目錄下面.
用“git init”初始化的版本庫用戶也可以在該目錄下執(zhí)行所有g(shù)it方面的操作。但別的用戶在將更新push上來的時候容易出現(xiàn)沖突。
使用“git init——bare”方法創(chuàng)建一個所謂的裸倉庫,之所以叫裸倉庫是因為這個倉庫只保存git歷史提交的版本信息,而不允許用戶在上面進行各種git操作,如果你硬要操作的話,只會得到下面的錯誤("This operation must be run in a work tree")這個就是最好把 遠端倉庫初始化成bare倉庫的原因
[rooteqfedu com git-root]# chown -R git: git shell.git
[rooteqfedu. com git-root]# su -git
[giteqfedu. com -] ssh-keygen -t rsa
[giteqfedu. com -]s cd .ssh/
[giteqfedu. com ssh]s cp id_rsa. pub authorized_keys
[giteqfedu. com ssh]s vim authorized_key
[giteqfedu. com ssh]$ logout
git倉庫測試
git-client上的操作
[rooteqfedu.com~]#ssh-keygen
[rooteqfedu.com-]#ssh-copy-id git@192.168.1.178
[rooteqfedu.com-]#gitclone git@192.168.1.102:/git-root/shell.git
[rooteqfedu. com ~] 1s
rh shell
[rooteqfedu com -] cd shell/
[root@qfedu.comshell]#vimtest.sh
[rooteqfedu. com shell]# git add test.sh
[rooteqfedu com shell]# git config --global user.email "youeexample. com"
[rooteqfedu. com shell]# git config --global user. name "Your Name"
[rooteqfedu com shell]# git commit -m 'first commit'
[master (root-commit) 33c5fbf] first commit
1 file changed, 2 insertions(+)
create mode 100644 test1.sh
[rooteqfedu. com shell]# git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.1.178:/git-root/shell.git
* [new branch] master - master
4. Git工作流程
一般工作流程如下:
- ·克隆Git資源作為工作目錄。
- ·在克隆的資源上添加或修改文件。
- ·如果其他人修改了,你可以更新資源。
- ·在提交前查看修改。
- ·提交修改。
- ·在修改完成后,如果發(fā)現(xiàn)錯誤,可以撤回提交并再次修改并提交。
Git的工作流程示意圖:

5. git基本概念
- .工作區(qū):就是你在電腦里能看到的目錄。
- .暫存區(qū):英文 0 月 stage ,或 1 ndex 。一般存放在” git 目錄” ' T 的 index 文件( . gitlindex )中,所以我們把暫存區(qū)有時也叫作索引( index )。
- · 版本庫:工作區(qū)有一個隱藏目錄. git ,這個不算工作區(qū),而是 Git 的版本庫。工作區(qū)、版本庫中的暫存區(qū)和版本庫之間的關(guān)系的示怠圖:

- 。圖中左側(cè)為工作區(qū),右側(cè)為版本庫.在版本庫中標記為” index ”的區(qū)域是暫存區(qū)( stage , indeX 標記為” , master " ,的是 master 分支所代表的目錄樹。
- .圖中我們可以看出此時””日 〔 AO ”實際是指向 master 分支的一個””游標”。所以圖示的命令中出現(xiàn)日 〔 AO 的地方可以用 master 來替換。
- · 圖中的。 bjects 標識的區(qū)域為 Git 的對象庫,實際位于’ " . 91 口。 bjects ”目錄下,里面包含了創(chuàng)建的各種對象及內(nèi)容。
- · 當對工作區(qū)修改(或新增)的文件執(zhí)行” t add ”命令時,暫存區(qū)的目錄樹被更新,同時工作區(qū)修改(或新增)的文件內(nèi)容被寫入到對象庫中的一個新的對象中,而該對象的舊被記錄在暫存區(qū)的文件索引中。
- · 當執(zhí)行提交操作( git commit )時,暫存區(qū)的目錄樹寫到版本斑(對象庫)中, master 分支會做相應(yīng)的更新。即 master 指向的目錄樹就是提交時暫存區(qū)的目錄樹。
- · 當執(zhí)行” . git reset H EAD ' ”命令時,暫存區(qū)的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區(qū)不受影響。
- · 當執(zhí)行” , gi t rm 一 cached < file > ”命令時,會直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變。
- · 當執(zhí)行” , gi t checkout . " ’或者” t checkout 一; file > " ’命令時,會用暫存區(qū)全部或指定的文件替換工作區(qū)的文件。這個操作很危險,會清除工作區(qū)中未添加到暫存區(qū)的改動。
- .當執(zhí)行” " git checkout HEAD . ' ”或者” ' git checkout HEAD < file > ”命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件。這個命令也是極具危險性的,因為不但會清除工作區(qū)中未提交的改動,也會清除暫存區(qū)中未提交的改動。
6 git客戶端安裝使用
6.1 Git安裝配置

6.2 git配置

6.2.1 Git用戶信息

6.2.2 文本編輯器

6.2.3 差異分析工具

6.2.4 查看配置信息

6.3 Git使用
6.3.1 ssh鏈接

6.3.2 http鏈接










4、 沖突解決


7 Gitlab Server 部署
1、環(huán)境配置
關(guān)閉防火墻、SELinux
開啟郵件服務(wù)

















用戶生成公鑰














浙公網(wǎng)安備 33010602011771號