編程之路始於Git

--作者:燕十三(flyingcys)

-- blog:http://blog.csdn.net/flyingcys

--QQ:294102238

git是目前世界上使用最廣泛的分佈式版本控制系統,由大名鼎鼎的Linus花了兩週時間寫成,同時在2008年使用給git作爲唯一版本庫格式託管平臺gitHub網站上線,已有衆多知名開源項目遷移至github

git是分佈式版本控制系統,與之對應的是集中式版本控制。分佈式和集中式最大的不同,分佈式並不是提取最新版本的文件快照,而是把代碼倉庫完整的克隆下來。每一次克隆操作都是對代碼倉庫的完整備份。所以,如果代碼倉庫的服務器發生故障,都可以用任何一個本地鏡像倉庫恢復,整個項目的歷史記錄都不會丟失。同時Git擁有完善的分支管理系統,可以指定與多個遠程代碼倉庫交互協作開發。

git已經成爲軟件開發者必須會的技能之一,正確熟練的使用git對團隊合作、提高工作效率都是有很大幫助的。很多公司包括硬件工程師都必須要熟練使用git,何況軟件工程師呢!

基於git的託管平臺除了github還有很多,國內免費也有很多,如碼雲中國(https://gitee.com);Codinghttps://coding.net),國內的git平臺下載速度都比較快,也支持一定數量的免費私有項目。

同時git擁有GitHub for DesktopSource Tree等衆多優秀且功能強大的圖形化客戶端工具。不過本篇主要講解git命令行操作,因爲只有在命令行模式下才能瞭解學習git的所有命令,這樣操作GUI工具也不會存在困難。同時我推薦在熟練使用git後可通過命令行與GUI配合使用的方式提高工作效率。

git項目分爲三個工作區域:工作目錄、暫存區域、本地倉庫及git倉庫。其中:

  • Workspace:工作目錄,存放從git倉庫的壓縮數據庫中提取出來的文件,存放在本地磁盤上可修改。
  • Index:暫存區域,存放的是一個文件,保存了下次將要提交的文件列表信息。
  • Repository:本地倉庫,
  • Remote:遠程倉庫,是Git用來保存項目的元數據和對象數據的地方。

git基本工作流程:

1. 在工作目錄中修改文件

2. 暫時文件,將文件的快照放入暫存區域。

3. 提交更新,找到暫時區域的文件,將快照永久性的存儲到git倉庫目錄

 

 

一、Git安裝與配置

1) 安裝:

Ubuntu系統默認沒有安裝Git,可通過sudo apt-get install git安裝。

Windows下有很多支持Git的圖形化工具,推薦安裝SourceTree

2) git配置:

git的配置文件爲.gitconfig,它可以在用戶主目錄下,用於全局配置;也可以在項目的目錄下,用於項目配置。所有操作如果添加了--global就是對全局配置文件操作;不加--global同時在項目目錄下操作就是操作項目配置文件。

  1. 查看git配置信息:git config [--global] --list
  2. 編輯git配置文件:git config -e [--global]
  3. 修改git默認編輯器:git config [--global] core.editor vi
  4. 長期存儲密碼:git config [-- global] credential.helper store
  5. 查看所有賬戶git config --get-all user.name
  6. 設置用戶名:git config [--global] user.name
  7. 設置郵箱:git config [--global] user.email

二、基本操作

1. git init

初始化本地倉庫,在當前目錄下生成.git目錄,該目錄爲倉庫,而當前目錄爲工作空間。

2. 查看信息

  • 查看本地文件夾所有修改的文件

git status

  • 查看當前分支的版本歷史

git log

  • 查看暫存區與工作區的差異

git diff

3. git add

  • 添加指定文件到暫存區:

git add <file1> <file2> ...

  • 添加指定目錄到暫存區:

git add <dir>

  • 添加當前目錄下的所有文件:

git add .

4. git rm

  • 刪除工作區文件,且將這次刪除放入暫存區

git rm <file1> <file2> ...

  • 停止跟蹤指定文件,但該文件會保留在工作區

git rm --cached <file>

5. git commit

  • 提交暫存區的文件到本地倉庫

git commit -m “commit log”

  • 提交暫存區的指定文件到本地倉庫

git commit <file1> <file2> ... -m “commit log”

  • 提交工作區自上次commit之後的變化至倉庫區,無需git add

git commit -a

  • 提交時顯示所有修改信息

git commit -v

6. git clone

  • 從遠程主機克隆一個版本庫,該命令會在本地主機生成一個目錄,與遠程主機的版本庫同名。

git clone <版本庫網站>

    • 示例:git clone https://github.com/espressif/ESP8266_RTOS_SDK
  • 如需指定不同的目錄名,可以將目錄名作爲git clone命令的第二個參數。

git clone <版本庫網址> <本地目錄名>

    • 示例:git clone https://github.com/espressif/ESP8266_RTOS_SDK esp8266
  • 在clone版本庫的時候,使用的遠程主機自動被命名爲origin,如需使用其他主機名需使用-o選項。

git clone -o <主機名> <版本庫地址>

    • 示例:git clone -o esp https://github.com/espressif/ESP8266_RTOS_SDK
  • 克隆指定分支:

git clone -b <分支名> <版本庫地址>

    • 示例:git clone -b 1.4.x https://github.com/espressif/ESP8266_RTOS_SDK
  • 如果git倉庫有子模塊,可通過克隆命令一次拉取全部子模塊。

git clone --recursive <版本庫地址>

    • 示例:ESP32SDK內有很多第三方開源組件作爲子模塊,如果不拉取全部,將導致有些功能無法正常編譯。git clone --recursive https://github.com/espressif/esp-idf

7. git remote

git要求每個遠程主機都必須指定一個主機名,git remote命令就用於管理主機名。

  • 列出已經存在的所有遠程主機:

git remote

  • 查看遠程主機的網址:

git remote -v

    • 示例:當前有1臺主機,主機名爲origin

git remote -v

origin  https://github.com/espressif/ESP8266_RTOS_SDK (fetch)

origin  https://github.com/espressif/ESP8266_RTOS_SDK (push)

  • 添加遠程主機:

git remote add <主機名> <網址>

    • 示例:git remote add origin https://github.com/espressif/ESP8266_RTOS_SDK
  • 刪除遠程主機:

git remote rm <主機名>

    • 示例:git remote rm origin
  • 更改遠程主機名:

git remote rename

    • 示例:git remote rename origin esp

8. git pull

git pull用於拉取遠程主機某個分支的更新,再與本地的指定分支合併。

l git push <遠程主機名> <本地分支名><本地分支名>

示例:拉取origin主機的dev分支,與本地的master分支合併。git pull origin dev:master如遠程分支是與當前分支合併,則冒號後面的部分可以省略。

git會自動在本地分支與遠程分支之間建立一種追蹤關注。在git clone的時候,所有本地分支默認與遠程主機的同名分支建立追蹤關係,也就是本地的master分支自動追蹤origin/master分支。

l 如當前分支與遠程分支存在追蹤關係,可省略遠程分支名

示例:git pull origin

l 如當前分支只有一個追蹤分支,可省略遠程主機名

示例:git pull

9. git push

git push用於將本地分支更新,推送至遠程主機,操作與git pull類同。

l git push <遠程主機名> <本地分支名><遠程分支名>

如果當前分支與多個主機存在追蹤關係,可以使用-u選項指定一個默認主機,這樣後面就不需要加任何參數直接使用git pushgit push -u origin master。將本地的master分支推送到origin主機,同事指定origin爲默認主機。

l 強制推送當前分支到遠程倉庫,即使有衝突;該指令要慎用。

git push <遠程主機名> --force

l 推送所有分支到遠程倉庫

git push <遠程主機名> --all

10. git branch

分支管理在git裏是很有用的的一個功能。

l 列出所有本地分支

git branch

l 列出所有遠程分支

git branch -r

l 列出所有本地和遠程分支

git branch -a

l 新建分支,但不切換至新建的分支

git branch <branch name>

l 新建分支,同時切換至新建的分支

git checkout -b <brach name>

l 拉取遠程分支並創建本地分支

git check -b <local branch name> origin/<remote branch name>

l 切換到指定分支

git checkout <branch name>

l 刪除分支

git branch -d <branch name>

l 強制刪除分支

git branch -D <branch name>

l 刪除遠程分支

git push --delete origin <branch name>

l 合併指定分支到當前分支

git merge <branch name>

 

11. 文件恢復、重置

分別使用git checkout git reset指令,使用這些操作後,很多修改的文件將被取消,需慎用。

l 恢復暫存區的指定文件到工作區

git checkout <file>

恢復指定commit的指定文件到工作區

git checkout <commit id> <file>

l 恢復暫存區的所有文件到工作區

git checkout .

重置暫存區的指定文件,與上一次commit保持一致,但工作區不變

git reset <commit id>

重置暫存區與工作區,與上一次commit保持一致

git reset --hard

1. git tag

列出所有tag

git tag

新建一個tag

git tag <tag name>

刪除本地tag

git tag -d <tag name>

刪除遠程tag

git push origin :refs/tags/<tag name>

查看tag信息

git show <tag name>

提交指定tag

git push origin <tag name>

提交所有tag

git push origin --tags

 

 

一、實戰流程:

1. 新建倉庫

1) 初始化本地倉庫:git init

2) 添加文件至暫存區:

l 添加指定文件:git add README.md

l 添加所有文件:git add .

3) 提交至本地倉庫:

git commit -m “first commit”

4) 添加遠程主機:

git remote add origin https://github.com/espressif/ESP8266_RTOS_SDK

5) 提交至遠程主機originmaster分支下:git push -u origin master,並建立跟蹤關係。以後提交更新可以直接使用git push

2. 已存在倉庫

1) 克隆:git clone https://github.com/espressif/ESP8266_RTOS_SDK

2) 查看本地文件更新狀態:git status

3) 查看更新日誌:git log

4) 拉取更新:git pull

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章