git入門教程 簡單易懂
來源:程序員人生 發布時間:2014-11-03 08:36:35 閱讀次數:3041次
最流行的版本控制軟件:git
========================
git已是當前最流行的版本控制軟件之1了。全球的http://www.vxbq.cn都在使用它。它出自linus大神之手,現在被用于內
核的版本控制。在最流行的代碼托管軟件github,你幾近可以找到所有開源項目的代碼。
版塊控制軟件:我需要嗎?
-----------------------
的確對許多人――特別是非http://www.vxbq.cn,他們可能不會想到已出現了專門的版本控制的軟件。但其實多人對版本控
制其實都有類似的需求,舉個例子,Tom是社團的秘書處成員,他們常常需要做的事情就是寫活動文檔,然后不停地
改改到大家都覺得可以了。
不榮幸的話,Tom可能有個文件夾叫“openSUSE活動策劃",里面有這樣的1堆文件”openSUSE活動策劃", "活動策
劃1", "活動策劃2", "活動策劃3", "活動策劃4" ... "活動策劃20" (可憐的Tom,1份文檔改了很多于20次)
這類作法很有效,由于我們可能發現第5個版本的策劃有問題,我們準備在第3個版本上面重新來過。但是也看到,
這個作法有些很丑陋的地方:1份文件,我們留了20個備份,而且還要注意文件名。
如果可以這樣就行了:文件夾上只有1個“openSUSE活動策劃",但當我需要第5個版本的時候,我來1個”給我還
原到第5個版本吧!“,然后這時候候我們打開這個文件,它就是第5個版本的了。類似的,我們可以取出任意的版本
。
這就是版本控制。這類事情在程序里面產生的太多了,因而出現了各種版本控制軟件。事實上,有些項目已發展
到第1000+乃至更高的版本數了……
單線的工作流
------------
我們可以把我們的1個項目想象為1個倉庫,然后我們可以把我們的東西塞進倉庫里面,也能夠把想要的東西拿出
來。而git則是倉庫的管理員。下面是1個例子,希望有1個直觀的印象,不求完全的理解和掌握。
```bash
mkdir myproject // 假定myproject是工作目錄
cd myproject
git init // git <- (init) ,告知倉庫管理員,在當前目錄初始化
echo 'Eat the banana' > file // 編輯了1個文件
git add file // 加入倉庫
git commit -m 'add first file' // 提交更改
echo 'Eat the apply' > file // 修改了這個文件
git add file // 加入倉庫
git commit -m 'update first file' // 再提交更改
```
這時候候我們就有兩個commit了,我們來看看工作日志:
```bash
git log
# 以下是輸出
# commit ac1371173b4e630ddaebda3f9f5d948b36146c07
# Author: Norman Mo <LTaoist@@@>
# Date: Thu Jun 27 21:59:10 2013 +0800
#
# update first file
#
# commit 3c43cc913454f92bb4b80c56ba45e4ffaf556fc0
# Author: Norman Mo <LTaoist6@@@@>
# Date: Thu Jun 27 21:58:48 2013 +0800
#
# add first file
```
看到了,我們提交了兩次。我們來看看現在file里面是甚么:
```bash
cat file # 明顯輸出是 'Eat the apply'
# 現在,我們來拿回第1個版本的file文件
git checkout 3c43cc913454f92bb4b80c56ba45e4ffaf556fc0 -- file
cat file # 這時候候就是eat banana了
```
這類工作的方式是單人使用最多見的方式,寫1點代碼,提交1下到倉庫里面。寫1點,提交到倉庫里面。然后出
問題的時候就回退過去。git非常強大,基本上你想到的他都可以做到,提交到倉庫的數據基本不會丟失,像時間機
器1樣控制著代碼。
多人協作
--------
git非常強大,上面只是1個功能。斟酌Tom的秘書處有兩個人,他們在同時寫。其中Tom寫前6章,他的同伴寫第7~
12章。
這時候候可以斟酌用這類工作的方式:設立1個公共的倉庫。Tom保護自己的版本,他的同伴保護自己的版本。然后大
家定期把代碼合并到公共倉庫上面,然后定期把新的版本取回來合并再提交到公共倉庫。
如果他們用純文本,得益于1些文本分析的方法,幾近不需要校訂就能夠做到。
```
git commit -m 'finish ch5' // 假定此時Tom寫完了第5章
git push // Tom將代碼推送到遠程倉庫
```
```
git commit -m 'finish ch11' // 假定此時Tom的同伴完成了第11章
git pull // pull會將最新版本拉下來,合并,然后推送到遠程倉庫
```
實際上工作中,為了不混淆,會新開1個分支來開發新的特性,然后對分支進行合并。
代碼自動發布
-----------
另外一個很強大的功能是可以實現代碼的自動發布。事實上,很多云就有使用這個。具體來講,利用git的hooks,當
http://www.vxbq.cn/server/收到1個push,http://www.vxbq.cn/server/可以自動運行1些腳本。也能夠在客戶端使用hooks,當客戶端準備push的時候,客戶
端先運行1些腳本。
例如,我們希望在每次http://www.vxbq.cn/server/收到push以后,殺死全部的 `p` 進程,然后重開 `p` 進程。我們可以修改 `hooks/
post-receive` :
```
echo "Killing all p process..."
killall ⑼ p
echo "Restart p process..."
p
```
更多更多更多……
---------------
這份教程就到這里了,更多的自己馬上動手去試試吧!
在openSUSE的安裝方法:
```
sudo zypper in git
```
默許應當就裝了。
1般linux命令查看幫助都是 `--help` 選項:
```
git --help
```
另外,對1個子命令也是有help看的:
```
git init --help
```
這里有1個交互教程,在閱讀器上面跑的摹擬git的運行的,有興趣的試試:
<http://try.github.io/>
github的help文檔寫得很不錯,推薦1下:
<https://help.github.com/>
書籍有個遠近聞名的《Pro Git》,而且有中文版的,雖然我認為這本書太厚了。。。但似乎就這么1本書……
<http://git-scm.com/book/zh>
國內有個gitcafe,也是做git托管的,他們也有整理1份help:
<https://gitcafe.com/GitCafe/Help>
記得,上面只是1個演示,多試試push,多嘗試。有1天你會喜歡用這個有效的工具的。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈