git是什么
Git是一個分布式版本控制軟件,原來是linux內核開發者林納斯·托瓦茲(Linus Torvalds)為了更好地管理linux內核開發而創立的。自誕生于 2005 年以來,Git 日臻成熟完善,在高度易用的同時,仍然保留著初期設定的目標。 速度,分布式,強大的分支。
提到git,不得不回顧下版本管理的歷史:
1. 本地版本管理系統 VCS(Version Control Systems)
類似于復制整個目錄,加上備份時間加以區別。簡單但是容易出錯,弄錯文件會導致數據丟失沒法回退。
2. 集中化版本管理系統 CVCS(Centralized Version Control Systems)
成熟方案:諸如 CVS,Subversion 以及 Perforce 等
特點:都有一個單一的集中管理的服務器,保存所有文件的修訂版本,而協同工作的人們都通過客戶端連到這臺服務器,取出最新的文件或者提交更新。
缺點是中央服務器的單點故障,會導致無法協同工作,而且還是會存在數據丟失的情況。
3. 分布式管理系統 DVCS(Distributed Version Control System)
成熟的方案:諸如 Git,Mercurial,Bazaar 還有 Darcs 等
客戶端并不只提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下來。每一次的提取操作,實際上都是一次對代碼倉庫的完整備份。解決來CVCS的缺陷。
git設計思想
git不同于我們之前一直在用的subversion這類工具。它們之間的版本概念是不一樣的,svn的版本是對文件粒度的,git的版本則是倉庫粒度的,也就是說,git版本管理的最小單位是倉庫。
分布式:git中的絕大多數操作(push,pull,fetch,clone除外)都是本地操作,離線狀態下也可完成。svn所有的操作都需要網絡。
數據完整性:在保持到git之前,都會進進行內容的檢驗和計算,作為數據的唯一標示和索引。一旦你修改來文件貨目錄后,git都能立刻覺察。
數據的狀態: 已提交,已修改,已暫存。已提交表示該文件已經被安全地保存在本地數據庫中了;已修改表示修改了某個文件,但還沒有提交保存;已暫存表示把已修改的文件放在下次提交時要保存的清單中。
git上手指南
1. 安裝git: (osx版,windows版,linux版)
2. 初次運行前的配置:
Git 提供了一個叫做 git config 的工具,專門用來配置或讀取相應的工作環境變量這些變量可以存放在以下三個不同的地方:
* /etc/gitconfig 文件:系統中對所有用戶都普遍適用的配置。若使用 git config 時用–system 選項,讀寫的就是這個文件。
* ~/.gitconfig 文件:用戶目錄下的配置文件只適用于該用戶。若使用 git config 時用–global 選項,讀寫的就是這個文件。
* 當前項目的 git 目錄中的配置文件(也就是工作目錄中的 .git/config 文件):這里的配置僅僅針對當前項目有效。每一個級別的配置都會覆蓋上層的相同配置,所以.git/config 里的配置會覆蓋/etc/gitconfig 中的同名變量。
如下,修改用戶信息:
第一個要配置的是你個人的用戶名稱和電子郵件地址。這兩條配置很重要,每次 Git 提交時都會引用這兩條信息,說明是誰提交了更新,所以會隨更新內容一起被永久納入歷史記錄:
$ git config –global user.name “yuxiong.wangyx”
$ git config –global user.email yxiong.wang@gmail.com
要檢查已有的配置信息,可以使用 git config –list 命令.
3. 創建新倉庫
創建一個新文件夾,打開,然后執行
git init
裝就可以創建新的git倉庫
4. 克隆一個本地倉庫
執行:git clone url [新建目錄名]
比如,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,可以用下面的命令:
$ git clone git://github.com/schacon/grit.git mygrit
5. 工作流
參考上面的圖可以看出,基本的 Git 工作流程如下所示:
1. 在工作目錄中修改某些文件。
2. 對這些修改了的文件作快照,并保存到暫存區域。
3. 提交更新,將保存在暫存區域的文件快照轉儲到 git 目錄中
6. 添加,提交
git工作流的第一步:
git add
git add *
然后,提交改動:
git commit -m “備注”
這個時候,代碼經過了staged,流到了modified區。但是數據還是存在本地,沒有到你的遠程倉庫。
7. 推送改動
執行:git push origin master (master可替換成任何你想推送的分支)
8. 分支
在你創建倉庫的時候,master 是“默認的”。在其他分支上進行開發,完成后再將它們合并到主分支上。
創建一個叫做“feature_1”的分支,并切換過去:
git checkout -b feature_1
切換回主分支:
git checkout master
再把新建的分支刪掉:
git branch -d feature_1
將分支推送到遠端倉庫,不然該分支其他人是看不見的:
git push origin feature_1
9. 更新與合并
更新你的本地倉庫至最新改動:
git pull
合并其他分支到你的當前分支:
git merge
10. 替換本地改動
需要回滾,替換本地改動:
git checkout –
此命令會使用 HEAD 中的最新內容替換掉你的工作目錄中的文件。已添加到緩存區的改動,以及新文件,都不受影響。
原文轉自:http://www.wangyuxiong.com/archives/52140