優點:
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。
使用指令: git clone --bare my_project my_project.git
使用後在目錄中會有Git目錄數據的副本my_project.git。
以下指令等同於上述指令,但文件部分會存在些許細微差別。
使用指令:cp -Rf my_project/.git my_project.git
將倉儲複製到下來設置新的倉儲:
假設/srv/git存在於該服務器上,並已設置一個名為git.example.com的SSH服務器,而希望將所有Git存儲庫存儲在該/srv/git目錄下。
接著對有這目錄及SSH的權限的用戶便可以clone,也有推送訪問權限。
使用指令:git clone user@git.example.com:/srv/git/my_project.git
如果git init使用該--shared選項執行命令,Git將自動將寫入權限正確添加到倉儲。
使用指令:
cd /srv/git/my_project.git
git init --bare --shared
-----------------------------------------------------------------------------------------------------------
個人的SSH公鑰:
輸入指令後有出現文件為id_dsa(id_rsa)為自己私人的密鑰,而文件後方多了.pub則為公鑰。
如下:
~/.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
分散式的Git
分散式工作流程
分散式工作流程分為三種
集中式工作流程、整合式管理員工作流程、企業型工作流程
集中式工作流程:
如前者有人推送,後者必須合併前者的版本,不然會無法推送至儲存庫,是因為避免前者的資料被覆蓋。
整合式管理員工作流程:
倉儲維護人=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-對專案進行貢獻
個人:進入分支後的歷史圖(示意圖)

團體:整合分支圖(示意圖)
