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
单用户这样简单使用是没问题的,
多用户还要修改仓库的文件属性,不然无法push的。
如果想要更丰富的权限控制,用gitosis。
多用戶修改文件屬性? 只要用戶是在 Group 裡面, 就都可以 push 囉~ 🙂
不過 gitosis 似乎管理的方式會更好, 可以做權限管理.
感恩~ 我再研究看看 gitosis. Orz.
我是 Git 新手。
非常感謝您寫這篇文章。受教!
可是有的地方我覺得補齊一下,會比較好。
例如:
「由 Git Repository 取得資料」可以寫得完整一點
「由 Git Repository (Git Server)取得資料到 Client(Your work PC)」
或是註明一下前面幾個步驟是在 Git Server 實做
後面幾個步驟是在 Client (Your Work PC) 實做
可能比較進階的玩家根本不用這些廢話,可是生手讀的時候,比較愚笨的(例如我)可能會轉不過來。
還有直接在 Client git clone 一個空的 project 的話,會碰到:
fatal: no matching remote head
好像可以補充一下,我 google 到這篇文章有提到:
>> git clone is the command you use to clone and start working with a remote repository.
>> Only problem is, this command does not work if the remote repository is empty.
reference:http://rwmj.wordpress.com/2009/03/06/git-fatal-no-matching-remote-head/
anyway, thanks a lot!
非常感謝您的建議, 第一點已經補上了, 第二點我再研究一下該怎麼寫~ 感恩... Orz..