閱讀996 返回首頁    go 技術社區[雲棲]


git 使用初步

目前公司使用gitlab搭建了git服務器,在此記錄一下工作中經常要用的命令。

git介紹最權威的當然還是官網,下麵調重點來說:

參考鏈接https://git-scm.com/book/zh/%E8%B5%B7%E6%AD%A5-Git-%E5%9F%BA%E7%A1%80

  • 理念

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
其他係統參照:https://git-scm.com/book/zh/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-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 johndoe@example.com
由於使用了--global參數,所以設置的配置是用戶級別的
查看設置的參數可以使用git config --list 命令,也可以查具體的屬性值git config user.name
git的所有命令都可以通過git help <cmd>來查看用法。

到這裏,你就已經完成了git所具備的基礎知識了。
下麵將要介紹的是完成上述理念所使用的具體命令
具體參照:https://git-scm.com/book/zh/Git-%E5%9F%BA%E7%A1%80-%E8%AE%B0%E5%BD%95%E6%AF%8F%E6%AC%A1%E6%9B%B4%E6%96%B0%E5%88%B0%E4%BB%93%E5%BA%93

------add 2014-5-8 --
上麵這些都是花架子,不能實用,下麵重點說說最近一直比較迷煳的概念git push與git pull相關代碼:
git remote add origin git@github.com/jiacai2050/ssss.git
要想push代碼,首先要先有個遠程repository,這個命令中origin相當於本地的指針,指向github上的git@github.com/jiacai2050/ssss.git
之後再執行
git push origin master
這樣就是本地的當前所在分支上的修改push到了origin倉庫的master分支

多人協作時的大概流程:(角色jiacai2050:普通開發者, leader:項目組長)
假設現在在leader的github中有個ssss的項目,現在jiacai2050想開發個add_log功能,流程如下
1.開個本地分支,這樣才有寫權限
2.
git checkout -b  add_log #添加新功能
添加一個新分支,用於添加新功能
3.做一些修改後,執行
git push origin add_log 
這樣就將本地的add_log分支(假設你目前就是在add_log分支上)推向github上fork的倉庫中,並且新創建一個add_log分支
然後就可以發個pull request

leader看到這個pull request後,想要merge 這個請求的大概流程:
git remote add jiacai2050 git@github.com/jiacai2050/ssss.git #創建一個指向我的指針
之後再
git fetch jiacai2050 #把jiacai2050的代碼拉下來
git branch -b test #再創建一個新的test分支,用於測試,這裏不直接使用master分支是為了保持master的安全性

git checkout -b test
git merge jiacai2050/ssss
#切換到test分支後,把jiacai2050的ssss合並過來,進行測試

git checkout master
git merge test
#測試通過後在回到master分支上,

#到現在為止,test特殊分支沒有用了,刪除
git branch -D test
#然後再推到github的倉庫中
git push origin master

這樣,leader就完成了合並操作。
 
#到現在為止,jiacai2050的貢獻就算是做完了。刪除我的add_log分支
git remove -D add_log
git push origin :add_log #刪除jiacai2050的github上的add_log分支
如果jiacai2050還想做修改,之後可以這麼做
git remote add upstream   git@github.com/others/ssss.git #在本地建立一個指向leader倉庫的指針
git checkout master 
git pull upstream #拉回最新的修改,這個需要經常做

git checkout -b new_idea #重複add_log的操作即可

以上流程參照https://happycasts.net/episodes/60?autoplay=true,歡迎大家去看這個視頻,真的是淺顯易懂,這個老師的聲音也有好磁性的說。
 

最後更新:2017-04-03 12:54:50

  上一篇:go 適應各種開發,測試,線上,線下環境的Spring配置方式
  下一篇:go C#之委托(函數參數傳遞)