目前公司使用gitlab搭建了git伺服器,在此記錄一下工作中經常要用的指令。
git介紹最權威的當然還是官網,下面調重點來說:
理念
git的理念是速度、完全分布式,git的速度速度得益于其獨創的以檔案快照的形式儲存不同版本之間的檔案,完全分布是因為git在每個client端都儲存着和server端同樣的資料,這樣git可以很快的比較版本之間的差異,在沒有網絡的情況下也能正常工作,這麼做一個最大的好處是,避免了server當機的問題,因為每個client都儲存這全部資訊,恢複比較容易。
git中檔案的三種狀态
對于任何一個檔案,在 git 内都隻有三種狀态:已送出(committed),已修改(modified)和已暫存(staged)。
已送出:是說該檔案已經被儲存到本地倉庫中
已修改:是說該檔案被修改了,但是還沒有被儲存的本地倉庫中
已暫存:是說該檔案在下次送出時,會被儲存到本地倉庫中(送出的git指令後面在指令講解部分會提到)
是以我們在本地操作時經常是在這三種情況下轉換:下面一張圖說明這三種狀态的轉換

woking directory存放的是已修改的檔案,也就是工作目錄
staging area存放的是已暫存的檔案,也就是暫存區域
git directory存放的是已送出的檔案,也就是本地倉庫
每個項目都有一個git目錄(如果 git clone 出來的話,就是其中 .git 的目錄;如果 git clone --bare 的話,建立的目錄本身就是 git 目錄),它是 git 用來儲存中繼資料和對象資料庫的地方。該目錄非常重要,每次克隆鏡像倉庫的時候,實際拷貝的就是這個目錄裡面的資料。可以看出這也就是本地倉庫。
工作目錄就是從項目的git目錄中取出某個版本的所有檔案和目錄用以後續工作的目錄。
暫存區域其實是個簡單的檔案,一般都放在git目錄中,有時也會稱之為索引檔案
安裝git
ubuntu等類debian系統一行指令搞定
sudo apt-get install git
初始化
git和其他linux系統的軟體一樣,配置檔案分為全局的,和每個使用者級别的。
系統級别的是/etc/gitconfig檔案,git config 時用 --system 選項,讀寫的就是這個檔案。
使用者級别的是~/.gitconfig檔案,git config 時用 --global 選項,讀寫的就是這個檔案。
除了這兩個之外,git還可以為每個單獨的項目提供特有的配置,在項目的git目錄下的config檔案
距離項目近的配置檔案會覆寫上一級配置檔案
一般來說必須要配置的是user.name和user.email這兩個屬性,可以使用下面的指令
git config --global user.name "john doe"
git config --global user.email [email protected]
由于使用了--global參數,是以設定的配置是使用者級别的
檢視設定的參數可以使用git config --list 指令,也可以查具體的屬性值git config user.name
git的所有指令都可以通過git help <cmd>來檢視用法。
到這裡,你就已經完成了git所具備的基礎知識了。
下面将要介紹的是完成上述理念所使用的具體指令
------add 2014-5-8 --
上面這些都是花架子,不能實用,下面重點說說最近一直比較迷糊的概念git push與git pull相關代碼:
要想push代碼,首先要先有個遠端repository,這個指令中origin相當于本地的指針,指向github上的[email protected]/jiacai2050/ssss.git
之後再執行
這樣就是本地的目前所在分支上的修改push到了origin倉庫的master分支
多人協作時的大概流程:(角色jiacai2050:普通開發者, leader:項目組長)
假設現在在leader的github中有個ssss的項目,現在jiacai2050想開發個add_log功能,流程如下
1.開個本地分支,這樣才有寫權限
2.
添加一個新分支,用于添加新功能
3.做一些修改後,執行
這樣就将本地的add_log分支(假設你目前就是在add_log分支上)推向github上fork的倉庫中,并且新建立一個add_log分支
然後就可以發個pull request
leader看到這個pull request後,想要merge 這個請求的大概流程:
之後再
這樣,leader就完成了合并操作。
以上流程參照http://happycasts.net/episodes/60?autoplay=true,歡迎大家去看這個視訊,真的是淺顯易懂,這個老師的聲音也有好磁性的說。