Git 是分散式的版本控制系統, 但是在此 分散式管理 之後再談, 先把 集中管理的部份 完成(試著把 SVN 做的事情取代掉).
Git 相關介紹
- 官方網站 Git - Fast Version Control System
- Git Wikipedia (英文)
- Git Wikipedia (中文)
Git 集中管理有 git://, http[s]://, ssh://, rsync:// 等方式, 在此就先從 ssh:// 開始.
Git 安裝
- apt-get install git-core # in Debian / Ubuntu Linux
前置作業
因為此篇是使用 SSH, 所以下述開始前, 需要先將 SSH key 產生好, 並於 Server / Client 放置完成. 可參考:
相關資料準備
- Server: example.com
- Linux 帳號的群組: www-data (確認 /etc/group 的 www-data 有你的帳號, ex: www-data:your_account)
- Project name: project_name
- Git Repository: /var/cache/git
有下述兩種架設方法:
- 從 "建立 Git Repository" 開始
- 從 "單機架設 Git Server" 開始
此兩種架設方法都可行, 只是方式不同而已.
方法1
建立 Git Repository
- mkdir -p /var/cache/git/project_name.git
- cd /var/cache/git/project_name.git
- git --bare init
- chown root:www-data -R .
- chmod g+rwx -R .
由 Git Repository(Git Server)取得資料 到Client(您工作的電腦)
- git clone ssh://example.com/var/cache/git/project_name.git
- cd project_name
- touch index.html
- git add index.html
- git commit -m 'init'
- git push origin master # local 預設 clone 是 master, push 到 origin(remote server)
- touch test.html
- git add test.html
- git commit -m 'add test.html'
- git push # 第二次後, 只需要 push 即可, 不需加 origin master.
Counting objects: 3, done.
Writing objects: 100% (3/3), 210 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://example.com/var/cache/git/project_name.git
* [new branch] master -> master
測試
- mkdir /tmp/a /tmp/b
- cd /tmp/a
- git clone ssh://example.com/var/cache/git/project_name.git
- cd /tmp/b
- git clone ssh://example.com/var/cache/git/project_name.git
- echo "hello" > hello.html # 於 b 新增一個檔案, 下述新增並 push
- git add hello.html
- git commit -m 'add hello.html' # local commit.
- git push # 推到 Server 上.
- cd /tmp/a # 於 a pull 拉下來後, 應該會看到 hello.html
- git pull # 會看到 hello.html
方法2
單機架設 Git Server
上述需要 REMOTE_SERVER(GIT_SERVER) 和 一台 Client 機器, 如果一台 REMOTE_SERVER 要直接架設, 可以用下述步驟:(取自: Setting Up a Git Server)
此做法是 先在 REMOTE SERVER 建立 Git repository, 再於 Client 建立 Local 的 Git repository, 最後再將 Local 的 Git repository 指到 REMOTE SERVER 去.
REMOTE SERVER
- ssh user@REMOTE_SERVER
- mkdir project_name.git
- cd project_name.git
- git --bare init
於 REMOTE SERVER 或 任何一個地方
- mkdir project
- cd project
- git init
- touch README
- git add README
- git commit -m 'first commit'
- git remote add origin user@REMOTE_SERVER:project_name.git # commit 完成 push 前, 將 REMOTE_SERVER 位置指過去.
- git push origin master