利用RCS指令可控制任一版本資料,其工作原理是在硬碟上保存一堆特殊格式的補丁集合,通過套用功能,便可以重新產生出每個版本的檔案內容。
Git控制方法分成集中化與分散式版本控制系統
集中化版本控制系統
好處:
1.清楚了解分組內各成員所做進度
2.管理員統一控制所有開發者權限
3.各用戶端統一使用統一版本系統,好管理
壞處:
1.中央伺服器發生故障,各開發者便無法協同合作
2.統一集中資料會有遺失資料風險
分散式版本控制系統
因集中化控制的不便,進而衍化出分散式控制系統
優點:
1.任一協同伺服器故障,事後都能以任一用戶端鏡像還原
2.能與許多遠端倉儲互動,使不同地方群組能在不一樣的地方完成同一專案協同合作
3.階層式的分工合作
-------------------------------------------------------------------------------------------------------------
Git完整性
1.Git 中所有的物件在儲存前都會被計算校驗碼(checksum)並以校驗碼參照物件。
2.計算較驗碼機制稱為 SHA-1 雜湊演算法。 一個校驗碼是由 40 個 16 進位的字母(0–9 和 a–f)所組成,Git 會根據檔案的內容和資料夾的結構來計算。
3. Git 的資料庫內,每個檔案都是用其內容的校驗碼來儲存,而不是使用檔名。
Git狀態
1.已提交(committed):
檔案己安全地存在你的本地端資料庫。
2.已修改(modified):
檔案已被修改但尚未提交到本地端資料庫。
3.已預存(staged):
已預存代表這檔案將會被存到下次你提交的快照中。
Git工作流程
1.你在你工作目錄修改檔案。
2.預存檔案,將檔案的快照新增到預存區。
3.做提交的動作,這會讓存在預存區的檔案快照永久地儲存在 Git 目錄中。
取得倉儲
命令格式:git clone [url]
1.https://
2.git://
3.user@server:path/to/repo.git
檢查檔案狀態
命令格式:git status
用來偵測哪些檔案處在什麼樣的狀態下的主要工具
使用git status -s
或 git status --short會得到一種較精簡的修改
新增檔案
命令格式:git add.
用以追蹤新的檔案、預存檔案使用
提交修改
命令格式:git commit
用於
開發一個網站。
建立一個分支以實現一個新故事。
在這個分支上進行開發。
用於分支(branch)與合併(merge)工作流程
建立分支
使用指令:git branch
此會在目前提交上新建一個指標
切換分支
使用指令:git checkout
切換到一個已經存在的分支
分支歷史
使用指令:git log
查出提交歷史,顯示分支指標所在與歷史如何被分離開來。
通訊協定種類:
優點:
1.可將倉儲副本傳送到各開發者具共享權限的位置,
並同於設置其他共享目錄一樣設置存取、編輯的權限。
2.運用git指令,使共同開發者更方便推送到遠端,同時也方便存取使用。
缺點:
1.共享存取通常更難以從多個位置進行設定和存取。
2.若使用個人電腦的話,則需安裝遠端系統,否則會連基本網路存取都還要來得困難與慢上許多。
3.每個共同編寫者都具有對“遠端”目錄的訪問權限,無法限制或阻擋使用者更改或刪除內部Git文件或破壞遠端倉儲。
SSH通訊協定(Secure Shell)
優點:
1.SSH相較容易設置,且保護程式較多。
2.透過SSH存取資安是安全的,所有數據傳輸都經過加密和身份驗證。
3.像HTTP/S、Git與Local protocols一樣,讓數據在傳輸前盡量接近。
缺點:
1.無法通過它對倉儲進行匿名存取。
2.如果想允許匿名存取並且仍使用SSH,則需設定SSH以利推送,但其內容可能會被其他人獲取。
Git協定
優點:
1.目前最快的網絡傳輸協議。
2.若為共同倉儲或為不需身份驗證進行讀取,則需設定Git保護程式。
3.Git倉儲可供所有人clone。
缺點:
1.缺乏身份驗證。
2.通常為唯一存取權限(即推送、寫入等),若開啟推送存取權限,則擁有此URL的任何人都可推送到倉儲內。
HTTP
可分為兩種,分別為新制與舊制。
新制:
與SSH或Git協定的運行方式非常相似,它可以設置為像git://協議一樣匿名服務,也可以通過SSH協議等身份驗證和加密來推送。
舊制:
直接將Git倉儲提供設置為來自Web服務器的普通文件。優點於設置的簡單性。但此外,任何皆可訪問倉儲Web服務器的人都可以存取此倉儲。
以下優缺點於新制HTTP
優點:
1.能夠使用用戶名和密碼進行身份驗證。
2.通過HTTPS以讀取方式提供倉儲。
缺點:
與某些服務器上的SSH相比,在HTTP/S上使用Git可能會有點棘手。
--------------------------------------------------------------------------------------------
在伺服器上佈署Git:
要clone倉儲以新增倉儲,使用該--bare選項運行clone命令。將指令尾端輸入.git。
~/.ssh為目錄
cd ~/.ssh
ls
authorized_keys2
id_dsa
known_hosts
config
id_dsa.pub
*若無金鑰時,可輸入下列指令來創建。
指令:ssh-keygen
接著會需要確保密鑰(.ssh/id_rsa)的位置,需輸入兩次密碼,不需要則可空白。
如用戶需要複製有公鑰文件的內容,輸入下列指令。
~/.ssh/id_rsa為公鑰位置
cat ~/.ssh/id_rsa.pub
-----------------------------------------------------------------------------------------------------
伺服器的設定:
如需設定SSH存取的服務端,則需使用下列方式來進行身分驗證。
<<git為用戶名、 .ssh為目錄、authorized_keys為驗證>>
指令:
sudo adduser git
su git
cd
mkdir .ssh && chmod 700 .ssh
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
如需要新增開發人員的SSH公鑰,並將其保存到臨時文件中。
指令如下:
<<範例為john為開發人員的SSH公鑰>>
cat /tmp/id_rsa.john.pub
在一個沒有工作目錄的情況下設置一個空儲存庫。
cd /opt/git
mkdir project.git
cd project.git
git init --bare
將文件推送至遠端倉儲。
<<myproject為文件>>
-----------------------------------------------------------------------------------------
Git常駐程式
若不想將所有人都新增SSH金鑰時,以維護近端的方式運行下列指令:
*此方法設定方便而快速,但因沒有密鑰的身分驗證,所以任何人都可以存取裡面的內容*
git daemon --reuseaddr --base-path=/opt/git/ /opt/git/
--reuseaddr是允許服務器重新啟動而無需等待舊連接超時
--base-path是允許人們克隆項目而不指定整個路徑
>>最後的路徑則需宣告Git維護程序在哪查找所要導出的倉儲<<
若防火牆正執行,還需在正在設置它的資料夾上的檔案9418處打一個洞。
但建議將此維護方法作為擁有倉儲的唯讀權限的用戶使用。
在Ubuntu計算機上,您可以使用Upstart的腳本,並在文件中放入腳本。
*文件為/etc/init/local-git-daemon.conf*
腳本:
start on startup
stop on shutdown
exec /usr/bin/git daemon \
--user=git --group=git \
--reuseaddr \
--base-path=/opt/git/ \
/opt/git/
respawn
要在不重新啟動的情況下運行計算機時
initctl start local-git-daemon
允許未驗證的用戶存取指定的倉儲。
cd /path/to/project.git
touch git-daemon-export-ok
分散式工作流程
分散式工作流程分為三種
集中式工作流程、整合式管理員工作流程、企業型工作流程
集中式工作流程:
如前者有人推送,後者必須合併前者的版本,不然會無法推送至儲存庫,是因為避免前者的資料被覆蓋。
整合式管理員工作流程:
倉儲維護人=A、開發人員=B
A推送到公共倉儲。
B clone該倉儲並進行改動,並推上他們的版本。
B向A發送一封電子郵件,要求A提取更改。
A將B的repo添加為遠端,合併原先的資料,推送到主倉儲。
企業型工作流程:
老闆=A、副手=B、開發人員=C
正常的C會在他們主題的分支上工作,並在重新定義他們在master上的工作。而master分支是獨裁者的分支。
B將C的主題分支合併到B的master分支中。
A將B的master分支合併到A的master分支中。
A將他們推master送到倉儲,以便其他C可以對其進行重新定義。
------------------------------------------------------------------------------------
分散式的Git-對專案進行貢獻
個人:進入分支後的歷史圖(示意圖)
團體:整合分支圖(示意圖)