由於公司有版本控管的需求,所以藉此機會來學習 Git。Git 本身是一個分散式的架構,Git 的 repository 會在各用戶端機器上保存完整的複本,由於 Server 和 Client 都擁有一份相同的 repository,即使 Server 毀損了,也可以從用戶端的 repository 複製一份回來。
由於 Git 是基於本機資料庫的概念,所以在 commit 或進行版本 check 都非常快速
本篇將會從無到有的建立共享 Git repository,並示範如何建立的開發者環境
建立 Git Server
首先挑選一台要存放共享 Git repository 的 Server 來當作主要 Data Server
Step.1
建立 git 使用者,這將會用於 ssh 連線時所用的帳號
$ yum install git $ adduser git
Step.2 建立不含有工作目錄的 repository
$ mkdir /home/git/new_dev $ cd /home/git/new_dev $ git init --bare Initialized empty Git repository in /home/git/ $ ls branches config description HEAD hooks info objects refs
在這邊就完成了 Git share repository 的空資料庫建立。
Git 開發者環境建立
Step.1 建立 ssh key 以便讓開發者不需要在輸入密碼推送 git 資料
$ ssh-keygen 確認產生的公鑰 $ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAu1vq9loQ6shuoPwCbtB9sKjoLP ..... 將公鑰放入 Git Server 的 ~/.ssh/authorized_keys $ scp ~/.ssh/id_rsa.pub git@gitserver:~/.ssh/git_key $ cat ~/.ssh/git_key ~/.ssh/authorized_keys
Step.2 初始化本機 repository 並 clone git server 上的 repository
以 CentOS 為例
$ yum install git 建立 git 使用者識別資訊 $ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com 初始化含有工作目錄的 repository $ mkdir -p /home/git/new_dev $ cd /home/git/new_dev $ git init Initialized empty Git repository in /home/git/ 因為含有工作目錄,所以 git repository 就會被丟到 .git 裡面去。 $ ls -la .git 遠端 clone git server 上面的資料 $ git remote add origin git@gitserver:/home/git/new_dev
到這個步驟,在開發者與 Git Server 上已經都有一份一模一樣的 Git repository
再來測試 Git push 來證明執行正常
於開發者環境端進行測試開發 a.txt
建立 a.txt $ cd /home/git/new_dev $ touch a.txt 為這次開發進行 commit $ git commit -m 'install git commit test' 推到遠端 Git Server 並且設定支線為 master $ git push origin master
於 Git Server 驗證開發者的 commit
$ cd /home/git/new_dev $ git log
你必須要可以看到開發者 commit 的訊息及時間,並且清楚看到執行的狀況。
Should never try to
$ scp ~/.ssh/id_rsa.pub git@gitserver:~/.ssh/authorized_keys
It will overwrite your authorized_keys quietly.
better to scp ~/.ssh/id_rsa.pub git@gitserver:~/.ssh/xxx
cat ~/.ssh/xxx >> ~/.ssh/authorized_keys
Thank you for suggestion, this is a safer practice