www国产亚洲精品久久小说,在线 | 一区二区三区四区,综合成人亚洲网友偷自拍,中文字幕人妻第一区,最近中文字幕mv

微思網(wǎng)絡
全國免費電話:400-881-4699
當前位置:首頁>微思動態(tài) > >詳情
全國熱線電話 400-881-4699

在線留言

【干貨】Linux下Git的配置實例

發(fā)布作者:微思網(wǎng)絡   發(fā)布時間:2016-12-19   瀏覽量:0

做IT狗有沒有對Linux情有獨鐘,是用過Linux后再無法接受其他數(shù)據(jù)庫,主要是我這個人專一吧。從10年開始從事IT來經(jīng)歷過大大小小不少事,一開始是在廈門Linux培訓機構學的,入門級別也就是考了一個REHAT的證書,算是正式迷上了Linux,好了廢話不多說,馬上開始干活分享:


安裝Git

Linux


$ sudo yum install git

或者

 

$ sudo apt-get install git

   

Mac


直接在Terminal執(zhí)行git命令。


配置文件


第一次安裝, 千萬別要忘了配置你的git的使用者名字和郵箱. 這個道理很簡單, 每一次的提交時需要記錄提交者的, 如果沒有提交者, 那么bug出現(xiàn)找誰來背鍋??

查看config

Git 自帶一個 git config 的工具來幫助設置控制 Git 外觀和行為的配置變量。


/etc/gitconfig 文件: 包含系統(tǒng)上每一個用戶及他們倉庫的通用配置。

 

$ git config --system --list

 

~/.gitconfig 或 ~/.config/git/config 文件:只針對當前用戶。

 

$ git config --global --list

   

當前使用倉庫的 Git 目錄中的 config 文件(就是 .git/config):針對該倉庫。


每一個級別覆蓋上一級別的配置,所以.git/config的配置變量會覆蓋/etc/gitconfig中的配置變量。


當然, 也可以查看某一項配置信息.形式:git config [--global|--system]


查看最終的配置屬性值

$ git config user.name

 

查看當前系統(tǒng)的屬性值

$ git config --global user.name

   

設置用戶信息

$ git config --global user.name "name"

$ git config --global user.email xxx@163.com


使用--global選項, 當以后在該系統(tǒng)上做的任何操作都會使用此屬性. 如果你需要在某一個特定的項目使用其他名字和郵箱, 那么可以通過設置項目中的config文件, 這樣config中的屬性會覆蓋掉global的全局屬性, 并且當在其他項目中并不會造成影響. 使用方式只需要去掉--global參數(shù)即可修改項目中的.git/config文件


$ git config user.name "name"

   

獲取幫助手冊


形式: git help  或者 git --help

比如查看config手冊


$ git help config

   

Git別名


例如: 生成別名之后可以在日后用簡短的表示來使用


$ git config --global alias.br branch

$ git config --global alias.ci commit

$ git config --global alias.st status

   

.gitignore文件


對于自動生成的文件, 日志, 編譯的臨時文件等. 可以對其進行配置, 讓git不追蹤這些文件


規(guī)范如下:


1、所有空行或者以 # 開頭的行都會被 Git 忽略。

2、可以使用標準的 glob 模式匹配。

3、匹配模式可以以(/)開頭防止遞歸。

4、匹配模式可以以(/)結尾指定目錄。

5、要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(!)取反


glob模式是指shell所使用的簡化了的正則表達式.


6、* :匹配零個或多個任意字符

7、[abc] :只匹配括號內(nèi)的任意一個字符

8、[0-9] :使用短劃線表示范圍, 可以匹配0到9之間的任何字符.

9、? :匹配任意一個字符

10、**:匹配任意的中間目錄,例如a/**/z可以匹配a/z,a/b/z,a/b/c/z等


如下給出一個樣板:


# 忽略所有以 .c結尾的文件

*.c

# 但是 stream.c 會被git追蹤

!stream.c


# 只忽略當前文件夾下的TODO文件, 不包括其他文件夾下的TODO例如: subdir/TODO

/TODO

# 忽略所有在build文件夾下的文件

build/

# 忽略 doc/notes.txt, 但不包括多層下.txt例如: doc/server/arch.txt

doc/*.txt 

# 忽略所有在doc目錄下的.pdf文件

doc/**/*.pdf

   

倉庫的基礎操作

初始化倉庫


$ git init

   

添加文件到暫存區(qū)


# 添加全部暫存區(qū)和歷史區(qū)不存在的或者有更改的 `.c`結尾的文件

$ git add *.c

 

# 添加全部暫存區(qū)和歷史區(qū)不存在的或者有更改的文件

$ git add .  

 

# 指定文件添加

$ git add test.c

   

status倉庫


$ git status

# 如果需要顯示一種緊湊式格式

$ git status --short      # 等價于 $ git status -s

   

緊湊式中字母的表示含義如下:


1、?? :表示新添加的未追蹤的文件

2、M :M出現(xiàn)在右邊,表示該文件被修改但是還沒有放入暫存區(qū)

3、M :M出現(xiàn)在左邊,表示文件被修改已經(jīng)放入了暫存區(qū)

4、MM :出現(xiàn)兩個,代表此文件在工作區(qū)修改已經(jīng)放入了暫存區(qū), 但之后有進行了修改,沒有添加到暫存區(qū)

diff倉庫

如果你想知道文件具體修改的內(nèi)容, 那么diff會很有用


# 查看以追蹤但尚未暫存的文件更新了哪些部分, 不添加額外參數(shù)

$ git diff


# 對使用了add添加到了暫存區(qū)的內(nèi)容, 使用--staged參數(shù)或者--cached

$ git diff --staged

   

提交更新


# 常規(guī)做法

$ git commit -m "commit message"

 

# 如果不使用-m參數(shù)添加提交信息, git會使用默認的編譯器如vi進行提交描述編寫.

# 可通過$ git config --global core.edit 設定喜歡的編譯器

 

# 跳過暫存區(qū)操作, 直接從工作區(qū)提交到歷史區(qū)

$ git commit -a -m ""          #等價于: $ git commit -am ""

   

移除文件


如果在工作區(qū)間對一個文件進行刪除, 需要先進行add,然后才可以提交. 使用git rm可以直接在工作區(qū)間刪除文件, 并提交到暫存區(qū).


$ git rm fileName

 

# 如果文件修改,并添加了暫存區(qū), 需要使用-f參數(shù)來強制刪除(force)

$ git rm -f fileName

 

# 可以使用glob模式,如下

$ git rm log/*.log         # 刪除log目錄下所有名稱是.log結尾文件

$ git rm *~                # 刪除以~結尾的所有文件

   

移動文件


同樣使用git rm會方便很多, 并且如果相對文件重命名也可以如此


$ git mv file_from file_to

   

當執(zhí)行了這條語句之后, 只需要在下一次commit即可, 不需要考慮額外操作. 等價于如下:


$ mv file_from file_to

$ git rm file_from

$ git rm file_to

   

查看歷史提交

如果是最基本的git log, 那么會按提交時間列出所有更新, 包括提交的SHA-1校驗和, 作者名稱,郵箱,提交時間,提交說明. 下面說說常用選項.


# -p:僅顯示最近x次的提交  格式 $ git log -p -x

$ git log -p -2             # 查看最近的兩次提交內(nèi)容

 

# --stat:簡略的顯示每次提交的內(nèi)容更改, 如哪些文件變更,多少刪除,多少添加等

$ git log --stat

 

# --pretty: 指定默認不同格式展示信息

$ git log --pretty=oneline              #每次提交用一行顯示

 

$ git log --pretty=format:"%h - %an, %ar : %s"  

# 效果:1a99c42 - 蘇, 19 hours ago : 無意義提交

   

關于format對應的常用占位符的寫法和意義


圖形展示分支的合并歷史


$ git log --graph --oneline   #oneline只是讓輸出看起來比較舒服

   

git log的一些其他操作


查找一個字符串的出現(xiàn)和刪除的提交


# 使用限制符-S后面緊跟要查詢的字符串

$ git log -Smethod_name

 

# 或者針對一個文件進行更改的提交查詢, 只需要在后面追加文件名稱即可

$ git log fileName

   

哈哈,即使如果你不小心寫個隱藏bug不管幾個月之后,如果老大要想找出問題是寫引發(fā)的其實很簡單.例如這樣$ git log -p fileName 想甩鍋?算了吧,還是認錯以后多注意吧.


還有一些限制log輸出的選項



一個實際的例子,如果要查看 Git 倉庫中,2016 年 11 月1號到7號,作者叫蘇的提交文件,可以用下面的查詢命令:


git log --pretty="%h - %s" --author=蘇 --since="2016-11-01"

--before="2016-11-07"

   

撤銷操作


amend重新提交


當我們commit之后突然發(fā)現(xiàn)漏掉了一個文件, 這個時候不可能對一個文件再進行commit一次, 這樣做就顯得很多余, 而如果版本回退之前再添加也比較麻煩. 這個時候就可以使用這個amend命令.如下:


$ git commit -m "版本1.5開發(fā)代碼"

# 正當你松了一口氣的時候發(fā)現(xiàn)配置文件忘記修改了, 你趕緊修改,并適合用add到暫存區(qū)

$ git add project.property

$ git commit --amend        

# 你會神奇的發(fā)現(xiàn)你沒有增加任何多余的操作就把漏掉的文件補齊到最后一次提交中

   

取消暫存的文件


就是對文件進行了git add操作. 這個時候可以reset


# 讓暫存區(qū)的文件變成文件修改但是沒有添加暫存區(qū)的狀態(tài)

$ git reset HEAD fileName

  

撤銷對文件的修改


場景: 當文件修改了, 但是還沒有進行git add的時候還只是在工作區(qū)間, 還原成最后一次提交的內(nèi)容


$ git checkout -- filename

   

要注意使用, 使用之前確定是否要拋棄已經(jīng)添加的內(nèi)容. 因為這個動作可能讓你最新添加的內(nèi)容徹底丟失. 因為沒有進行commit, 一般來說進行了commit的內(nèi)容都是可以恢復的.


標簽


Git可以給歷史中的某一個提交打上標簽, 以示重要. 比如每次正式版本的上線等.


列出標簽


$ git tag

# 如果你只關心某一部分的標簽, 例如只對v2.x的標簽感興趣,你可以這樣做

$ git tag -l 'v2.*'

   

創(chuàng)建標簽


標簽分為兩種一種是附加標簽另一種是輕量標簽.


1、附加標簽: 會保存打標簽者的信息, 時間和附加信息. 最后更隨打標簽的提交

2、輕量標簽: 只是在一個提交上做一個標記. 存儲在一個專門保存標簽的文件,指向提交的hash值


先來看附加標簽:

$ git tag -a v1.0 -m '附加信息'

   

輕量標簽

$ git tag v1.0

   

后期打標簽, 就是對已經(jīng)提交某次提交進行追加標簽設置


# 可以先使用git log --oneline獲取提交歷史的hash值

$ git log --oneline

 

# 然后把hash值賦值到標簽語句之后

$ git tag -a v1.1 a6b4c97

   

共享標簽


默認情況下, git push不會把標簽傳遞到遠程服務器. 需要顯示的推送標簽共享到服務器,例如: git push origin [tagname]


$ git push origin v1.4

# 如果想把本地上所有在遠程服務器上的不存在標簽刪除掉,可以這樣

$ git push origin --tags

   

檢出標簽


git中不能真正的檢出一個標簽, 但是可以在標簽處創(chuàng)建一個新的分支.如下


$ git checkout -b checkbranch2 v2.0

   

查看標簽對應的信息


使用git show 可以查看對應標簽的詳細信息, 如果git show這樣的命令只是顯示上次提交的內(nèi)容


$ git show v1.4

   

分支操作


分支的創(chuàng)建


分支的創(chuàng)建, 其實本質(zhì)就是創(chuàng)建一個可以移動的指針,這個指針名就是新的分支名


$ git branch dev


# 上面的只是創(chuàng)建了一個分支. 并沒有切換, 可以使用一條命令創(chuàng)建并且換到新分支

$ git checkout -b dev

 

# 可以通過`git log`命令查看各個分支所指向的對象

$ git log --oneline --decorate

 

# 如果你想查看圖形式的分叉歷史,可以這樣:

$ git log --oneline --decorate --graph --all

   

分支的切換


所謂的分支切換就是HEAD指針的指向的改變

$ git checkout dev

   

分支合并


利用git merge , 這條命令會把當前所在分支與目標分支的內(nèi)容合并, 可以這樣理解, 如果當你試圖向目標分支合并時, 如果當前分支可以順著一個分支走下去, 那么本質(zhì)上其實只是當前指針的向前移動, 由于這種情況下的合并并沒有需要解決的分期, 所以git會稱這個是fast-forward快速前進.


git merge dev

   

刪除分支


當一個功能分支開發(fā)完畢之后, 并進行了合并, 通常這個分支也就被刪除,以保證倉庫中的干凈.


# 刪除dev分支

$ git branch -d dev

 

# 如果dev分支還有未提交的內(nèi)容,為了保證你的數(shù)據(jù)安全git默認是不允許刪除,可以使用`-D`強制刪除

$ git branch -D dev

   

分支管理


git branch命令不只是可以創(chuàng)建于刪除分支. 如果不添加任何參數(shù), 那么會得到所有分支的一個列表


$ git branch        # 其中一個分支前面的*代表,目前檢出的分支就是HEAD指針所指向的分支

 

# 追加-v參數(shù) 可以展示每一個分支最后一次提交

$ git branch -v

 

# --merged:查看那些分支已經(jīng)合并到當前分支

$ git branch --merged        # 一般這個列表展示的除了*號的其他分支, 都可以刪除

 

# --no-merged:查看所有包含未合并工作的分支

$ git branch --no-merged

   

變基


和合并merge相似的效果都是合并分支, 但是使用變基rebase可以讓提交歷史變得更簡潔. 如下:


圖片1是merge合并效果, 圖片2是rebase合并效果. 明顯變基會讓提交歷史看起來更加干凈. 使用如下:


# rebase  [需要移動變基底的分支]

$ git rebase master experiment

 

# 此時目標分支后面會追加另一個分支的提交. 此時只需要切換到master分支,合并分支即可.

$ git checkout master

$ git merge experiment

   

rebase原理就是, 從目標分支和要變基的分支向上查找出共同祖先節(jié)點就是c2, 然后把要變基的分支到c2節(jié)點的所有提交,提取出相應的修改生成一個副本, 并追加到目標分創(chuàng)建相對應的提交. 此時變基的分支指向目標分支master的后面某一次提交. 此時只要使用修改master指向指針使用merge即可.


遠程分支


# 獲得遠程的倉庫列表

$ git ls-remote origin

 

# 如果想獲得更多的信息

$ git remote show origin

 

# 查看遠程分支和本地分支

$ git branch -a

   

拉取遠程分支


假設遠程如果有一個dev分支, 你使用fetch進行抓取. 這個時候, 本地不會自動生成一個可編輯的副本, 換句話說就是這種情況下, 不會有一個新的dev本地分支, 只有一個不可以修改的origin/dev指針. 這個時候可以運行git merge origin/dev命令, 將這些遠程dev分支的工作合并到當前分支. 如果想要在自己本地的dev分支上工作, 可以將其建立在遠程分支之上.


$ git checkout -b dev origin/dev

   

創(chuàng)建遠程分支


如果你的本地有一個新建的dev分支, 并且你進行了提交, 此時你想把這個分支也提交到遠程的dev分支, 但是遠程還沒有創(chuàng)建dev, 這個時候可以使用如下命令: git push


$ git push origin dev

   

刪除遠程分支


# 刪除遠程dev分支

$ git push origin --delete dev

   

跟蹤分支


從一個遠程跟蹤分支檢出一個本地分支會自動創(chuàng)建一個叫做 跟蹤分支(有時候也叫做 “上游分支”)。 跟蹤分支是與遠程分支有直接關系的本地分支。 如果在一個跟蹤分支上輸入git pull,Git 能自動地識別去哪個服務器上抓取、合并到哪個分支。


當克隆一個倉庫時,它通常會自動地創(chuàng)建一個跟蹤 origin/master 的 master 分支。 然而,如果你愿意的話可以設置其他的跟蹤分支 – 其他遠程倉庫上的跟蹤分支,或者不跟蹤 master 分支。 最簡單的就是之前看到的例子,運行 git checkout -b [branch] [remotename]/[branch]。 這是一個十分常用的操作所以 Git 提供了 --track 快捷方式:


$ git checkout --track origin/dev

# 如果想要自定義本地分支名字

$ git checkout -b 任意分支名字 origin/dev

   

設置已有的本地分支跟蹤一個剛剛拉取下來的遠程分支,或者想要修改正在跟蹤的上游分支,你可以在任意時間使用 -u 或 –set-upstream-to 選項運行 git branch 來顯式地設置。


# 設置HEAD指向的分支的上游為遠程dev分支

$ git branch -u origin/dev

   

查看設置的所有跟蹤分支


$ git branch -vv

   

遠程倉庫操作


克隆倉庫


$ git clone

# 如果你想創(chuàng)建自己的倉庫名, 就是本地根文件夾的名稱, 那么可以如下追加名稱

$ git clone  [dirName]

   

查看遠程倉庫


# 默認查看遠程倉庫的方式

$ git remote


# 查看遠程倉庫的讀寫權限. 如果可以看到(push)說明提交的推送

$ git remote -v


如果需要查看某一個倉庫更多的信息時, 使用git remote show ...


$ git remote show origin

   

添加遠程倉庫


# 格式: git remote add [shortName]   同時可以指定一個倉庫的引用名稱,例如

$ git remote add rp git@github.com:suzeyu1992/GitOperateDemo.git

 

# 此時你想對新加的遠程進行拉取動作, 只需要使用之前的引用名稱就可以

$ git fetch rp

   

遠程倉庫的拉取推送

拉取


大家常用的可能是git pull這個指令. 這個指令的通常會從服務器上抓取數(shù)據(jù)自動嘗試合并到當前所在分支.而我們可以也可以利用git fetch進行本地分支所追蹤的遠程分支沒有提交. 然后我們可以手動的進行合并.


推送


git push [remote-name] [branch-name] 例如:


$ git push origin master

   

只有當對服務器有寫入權限, 并且之前沒有人提交, 這條命令才會生效.


上面的這兩個推送也好拉取也好. 如果所在分支設置了遠程服務器分支的追蹤, 那么可以省略掉后面的倉庫名和分支名. 如果沒有設置那么必須顯示的指定.


遠程倉庫移除重命名


對遠程倉庫的名稱進行修改


$ git remote rename oldName newName

   

想要移除一個遠程倉庫,例如服務器搬走了,不再使用一個特定鏡像,或者一個貢獻者不再貢獻


$ git remote rm 倉庫名


沒學會的同學可以多看幾遍,融會貫通。沒有基礎的同學自學可能會吃力點,建議跟我一樣起步去找一家廈門Linux培訓機構,這樣進步會快一點,希望這篇文章能給你們帶來幫助,謝謝!


?
返回頂部