Github使用教程詳解

                                                       git-tutorial

   官方網站:http://git-scm.comphp

 

Git是目前世界上最早進的分佈式版本控制系統(沒有之一)。html

Git有什麼特色?簡單來講就是:高端大氣上檔次!html5

 

1、Git安裝python

在Linux上安裝Git

首先,你能夠試着輸入git,看看系統有沒有安裝Git:linux

$ git The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git 

像上面的命令,有不少Linux會友好地告訴你Git沒有安裝,還會告訴你如何安裝Git。git

若是你碰巧用Debian或Ubuntu Linux,經過一條sudo apt-get install git就能夠直接完成Git的安裝,很是簡單。github

 

老一點的Debian或Ubuntu Linux,要把命令改成sudo apt-get install git-core,由於之前有個軟件也叫GIT(GNU Interactive Tools),結果Git就只能叫git-core了。因爲Git名氣實在太大,後來就把GNU Interactive Tools改爲gnuitgit-core正式改成gitsql

若是是其餘Linux版本,能夠直接經過源碼安裝。先從Git官網下載源碼,而後解壓,依次輸入:./configmakesudo make install這幾個命令安裝就行了。shell

在Mac OS X上安裝Git

若是你正在使用Mac作開發,有兩種安裝Git的方法。windows

一是安裝homebrew,而後經過homebrew安裝Git,具體方法請參考homebrew的文檔:http://brew.sh/

第二種方法更簡單,也是推薦的方法,就是直接從AppStore安裝Xcode,Xcode集成了Git,不過默認沒有安裝,你須要運行Xcode,選擇菜單「Xcode」->「Preferences」,在彈出窗口中找到「Downloads」,選擇「Command Line Tools」,點「Install」就能夠完成安裝了。

install-git-by-xcode

Xcode是Apple官方IDE,功能很是強大,是開發Mac和iOS App的必選裝備,並且是免費的!

在Windows上安裝Git

實話實說,Windows是最爛的開發平臺,若是不是開發Windows遊戲或者在IE裏調試頁面,通常不推薦用Windows。不過,既然已經上了微軟的賊船,也是有辦法安裝Git的。

Windows下要使用不少Linux/Unix的工具時,須要Cygwin這樣的模擬環境,Git也同樣。Cygwin的安裝和配置都比較複雜,就不建議你折騰了。不過,有高人已經把模擬環境和Git都打包好了,名叫msysgit,只須要下載一個單獨的exe安裝程序,其餘什麼也不用裝,絕對好用。

msysgit是Windows版的Git,從https://git-for-windows.github.io下載(網速慢的同窗請移步國內鏡像),而後按默認選項安裝便可。

安裝完成後,在開始菜單裏找到「Git」->「Git Bash」,蹦出一個相似命令行窗口的東西,就說明Git安裝成功!

install-git-on-windows

安裝完成後,還須要最後一步設置,在命令行輸入:

$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com" 

由於Git是分佈式版本控制系統,因此,每一個機器都必須自報家門:你的名字和Email地址。你也許會擔憂,若是有人故意冒充別人怎麼辦?這個沒必要擔憂,首先咱們相信你們都是善良無知的羣衆,其次,真的有冒充的也是有辦法可查的。

注意git config命令的--global參數,用了這個參數,表示你這臺機器上全部的Git倉庫都會使用這個配置,固然也能夠對某個倉庫指定不一樣的用戶名和Email地址。

 

2、建立版本庫

因此,建立一個版本庫很是簡單,首先,選擇一個合適的地方,建立一個空目錄:

$ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit 

pwd命令用於顯示當前目錄。在個人Mac上,這個倉庫位於/Users/michael/learngit

若是你使用Windows系統,爲了不遇到各類莫名其妙的問題,請確保目錄名(包括父目錄)不包含中文。

第二步,經過git init命令把這個目錄變成Git能夠管理的倉庫:

$ git init Initialized empty Git repository in /Users/michael/learngit/.git/ 

瞬間Git就把倉庫建好了,並且告訴你是一個空的倉庫(empty Git repository),細心的讀者能夠發現當前目錄下多了一個.git的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄裏面的文件,否則改亂了,就把Git倉庫給破壞了。

若是你沒有看到.git目錄,那是由於這個目錄默認是隱藏的,用ls -ah命令就能夠看見。

 

也不必定必須在空目錄下建立Git倉庫,選擇一個已經有東西的目錄也是能夠的。不過,不建議你使用本身正在開發的公司項目來學習Git,不然形成的一切後果概不負責。

把文件添加到版本庫

首先這裏再明確一下,全部的版本控制系統,其實只能跟蹤文本文件的改動,好比TXT文件,網頁,全部的程序代碼等等,Git也不例外。版本控制系統能夠告訴你每次的改動,好比在第5行加了一個單詞「Linux」,在第8行刪了一個單詞「Windows」。而圖片、視頻這些二進制文件,雖然也能由版本控制系統管理,但無法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是隻知道圖片從100KB改爲了120KB,但到底改了啥,版本控制系統不知道,也無法知道。

不幸的是,Microsoft的Word格式是二進制格式,所以,版本控制系統是無法跟蹤Word文件的改動的,前面咱們舉的例子只是爲了演示,若是要真正使用版本控制系統,就要以純文本方式編寫文件。

由於文本是有編碼的,好比中文有經常使用的GBK編碼,日文有Shift_JIS編碼,若是沒有歷史遺留問題,強烈建議使用標準的UTF-8編碼,全部語言使用同一種編碼,既沒有衝突,又被全部平臺所支持。

使用Windows的童鞋要特別注意:

千萬不要使用Windows自帶的記事本編輯任何文本文件。緣由是Microsoft開發記事本的團隊使用了一個很是弱智的行爲來保存UTF-8編碼的文件,他們自做聰明地在每一個文件開頭添加了0xefbbbf(十六進制)的字符,你會遇到不少難以想象的問題,好比,網頁第一行可能會顯示一個「?」,明明正確的程序一編譯就報語法錯誤,等等,都是由記事本的弱智行爲帶來的。建議你下載Notepad++代替記事本,不但功能強大,並且免費!記得把Notepad++的默認編碼設置爲UTF-8 without BOM便可:

set-utf8-notepad++

言歸正傳,如今咱們編寫一個readme.txt文件,內容以下:

Git is a version control system. Git is free software. 

必定要放到learngit目錄下(子目錄也行),由於這是一個Git倉庫,放到其餘地方Git再厲害也找不到這個文件。

和把大象放到冰箱須要3步相比,把一個文件放到Git倉庫只須要兩步。

第一步,用命令git add告訴Git,把文件添加到倉庫:

$ git add readme.txt 

執行上面的命令,沒有任何顯示,這就對了,Unix的哲學是「沒有消息就是好消息」,說明添加成功。

第二步,用命令git commit告訴Git,把文件提交到倉庫:

$ git commit -m "wrote a readme file" [master (root-commit) cb926e7] wrote a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt 

 

簡單解釋一下git commit命令,-m後面輸入的是本次提交的說明,能夠輸入任意內容,固然最好是有意義的,這樣你就能從歷史記錄裏方便地找到改動記錄。

嫌麻煩不想輸入-m "xxx"行不行?確實有辦法能夠這麼幹,可是強烈不建議你這麼幹,由於輸入說明對本身對別人閱讀都很重要。實在不想輸入說明的童鞋請自行Google,我不告訴你這個參數。

git commit命令執行成功後會告訴你,1個文件被改動(咱們新添加的readme.txt文件),插入了兩行內容(readme.txt有兩行內容)。

爲何Git添加文件須要addcommit一共兩步呢?由於commit能夠一次提交不少文件,因此你能夠屢次add不一樣的文件,好比:

$ git add file1.txt $ git add file2.txt file3.txt $ git commit -m "add 3 files." 

小結

如今總結一下今天學的兩點內容:

初始化一個Git倉庫,使用git init命令。

添加文件到Git倉庫,分兩步:

  • 第一步,使用命令git add <file>,注意,可反覆屢次使用,添加多個文件;

  • 第二步,使用命令git commit,完成。

 

3、平常操做

  • 要隨時掌握工做區的狀態,使用git status命令。

  • 若是git status告訴你有文件被修改過,用git diff能夠查看修改內容。

                         版本回退:      

  • HEAD指向的版本就是當前版本,所以,Git容許咱們在版本的歷史之間穿梭,使用命令git reset --hard commit_id

  • 穿梭前,用git log能夠查看提交歷史,以便肯定要回退到哪一個版本。

  • 要重返將來,用git reflog查看命令歷史,以便肯定要回到將來的哪一個版本。

               工做區和暫存區

git-stage-after-commit

                管理修改

你能夠繼續git addgit commit,也能夠彆着急提交第一次修改,先git add第二次修改,再git commit,就至關於把兩次修改合併後一塊提交了:

第一次修改 -> git add -> 第二次修改 -> git add -> git commit

每次修改,若是不add到暫存區,那就不會加入到commit

                撤銷修改

場景1:當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout -- file

$ git checkout -- readme.txt $ git status # On branch master nothing to commit (working directory clean)

場景2:當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操做。

$ git reset HEAD readme.txt Unstaged changes after reset: M readme.txt

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次修改,不過前提是沒有推送到遠程庫。

$ git reset --hard 3628164 HEAD is now at 3628164 append GPL

                刪除文件

命令git rm用於刪除一個文件。若是一個文件已經被提交到版本庫,那麼你永遠不用擔憂誤刪,可是要當心,你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容

$ git rm test.txt rm 'test.txt' $ git commit -m "remove test.txt" [master d17efd8] remove test.txt 1 file changed, 1 deletion(-) delete mode 100644 test.txt

4、遠程倉庫

第1步:建立SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,若是有,再看看這個目錄下有沒有id_rsaid_rsa.pub這兩個文件,若是已經有了,可直接跳到下一步。若是沒有,打開Shell(Windows下打開Git Bash),建立SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

你須要把郵件地址換成你本身的郵件地址,而後一路回車,使用默認值便可,因爲這個Key也不是用於軍事目的,因此也無需設置密碼。

若是一切順利的話,能夠在用戶主目錄裏找到.ssh目錄,裏面有id_rsaid_rsa.pub兩個文件,這兩個就是SSH Key的祕鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,能夠放心地告訴任何人。

第2步:登錄GitHub,打開「Account settings」,「SSH Keys」頁面:

而後,點「Add SSH Key」,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容:

github-addkey-1

點「Add Key」,你就應該看到已經添加的Key:

github-addkey-2

爲何GitHub須要SSH Key呢?由於GitHub須要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協議,因此,GitHub只要知道了你的公鑰,就能夠確認只有你本身才能推送。

    添加遠程庫

首先,登錄GitHub,而後,在右上角找到「Create a new repo」按鈕,建立一個新的倉庫:

github-create-repo-1

在Repository name填入learngit,其餘保持默認設置,點擊「Create repository」按鈕,就成功地建立了一個新的Git倉庫:

github-create-repo-2

目前,在GitHub上的這個learngit倉庫仍是空的,GitHub告訴咱們,能夠從這個倉庫克隆出新的倉庫,也能夠把一個已有的本地倉庫與之關聯,而後,把本地倉庫的內容推送到GitHub倉庫。

如今,咱們根據GitHub的提示,在本地的learngit倉庫下運行命令:

$ git remote add origin git@github.com:michaelliao/learngit.git 

請千萬注意,把上面的michaelliao替換成你本身的GitHub帳戶名,不然,你在本地關聯的就是個人遠程庫,關聯沒有問題,可是你之後推送是推不上去的,由於你的SSH Key公鑰不在個人帳戶列表中。

添加後,遠程庫的名字就是origin,這是Git默認的叫法,也能夠改爲別的,可是origin這個名字一看就知道是遠程庫。

下一步,就能夠把本地庫的全部內容推送到遠程庫上:

$ git push -u origin master Counting objects: 19, done. Delta compression using up to 4 threads. Compressing objects: 100% (19/19), done. Writing objects: 100% (19/19), 13.73 KiB, done. Total 23 (delta 6), reused 0 (delta 0) To git@github.com:michaelliao/learngit.git * [new branch] master -> master Branch master set up to track remote branch master from origin. 

把本地庫的內容推送到遠程,用git push命令,其實是把當前分支master推送到遠程。

因爲遠程庫是空的,咱們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。

 

 

 

推送成功後,能夠馬上在GitHub頁面中看到遠程庫的內容已經和本地如出一轍:

github-repo

從如今起,只要本地做了提交,就能夠經過命令:

$ git push origin master 

把本地master分支的最新修改推送至GitHub,如今,你就擁有了真正的分佈式版本庫!

        SSH警告

當你第一次使用Git的clone或者push命令鏈接GitHub時,會獲得一個警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established. RSA key fingerprint is xx.xx.xx.xx.xx. Are you sure you want to continue connecting (yes/no)?

這是由於Git使用SSH鏈接,而SSH鏈接在第一次驗證GitHub服務器的Key時,須要你確認GitHub的Key的指紋信息是否真的來自GitHub的服務器,輸入yes回車便可。

Git會輸出一個警告,告訴你已經把GitHub的Key添加到本機的一個信任列表裏了:

Warning: Permanently added 'github.com' (RSA) to the list of known hosts. 

這個警告只會出現一次,後面的操做就不會有任何警告了。

若是你實在擔憂有人冒充GitHub服務器,輸入yes前能夠對照GitHub的RSA Key的指紋信息是否與SSH鏈接給出的一致。

        小結

      要關聯一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git

      關聯後,使用命令git push -u origin master第一次推送master分支的全部內容;

      此後,每次本地提交後,只要有必要,就可使用命令git push origin master推送最新修改;

             克隆遠程庫

要克隆一個倉庫,首先必須知道倉庫的地址,而後使用git clone命令克隆。

Git支持多種協議,包括https,但經過ssh支持的原生git協議速度最快。

$ git clone git@github.com:michaelliao/gitskills.git Cloning into 'gitskills'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. $ cd gitskills $ ls README.md

5、分支管理

  Git的分支是不同凡響的,不管建立、切換和刪除分支,Git在1秒鐘以內就能完成!不管你的版本庫是1個文件仍是1萬個文件。

 

  Git鼓勵大量使用分支:

  查看分支:git branch

  建立分支:git branch <name>

  切換分支:git checkout <name>

  建立+切換分支:git checkout -b <name>

  合併某分支到當前分支:git merge <name>

  刪除分支:git branch -d <name>

  當Git沒法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。用git log --graph命令能夠看到分支合併圖。

  咱們切換回master

  $ git checkout master   Switched to branch 'master' 

  準備合併dev分支,請注意--no-ff參數,表示禁用Fast forward

  $ git merge --no-ff -m "merge with no-ff" dev   Merge made by the 'recursive' strategy.    readme.txt | 1 +    1 file changed, 1 insertion(+) 

  由於本次合併要建立一個新的commit,因此加上-m參數,把commit描述寫進去。

  合併後,咱們用git log看看分支歷史:

  $ git log --graph --pretty=oneline --abbrev-commit   * 7825a50 merge with no-ff   |\   | * 6224937 add merge   |/   * 59bc1cb conflict fixed   ... 

  能夠看到,不使用Fast forward模式,merge後就像這樣:

  git-no-ff-mode

 

分支管理策略

一般,合併分支時,若是可能,Git會用Fast forward模式,但這種模式下,刪除分支後,會丟掉分支信息。

若是要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就能夠看出分支信息。

下面咱們實戰一下--no-ff方式的git merge

首先,仍然建立並切換dev分支:

$ git checkout -b dev Switched to a new branch 'dev' 

修改readme.txt文件,並提交一個新的commit:

$ git add readme.txt $ git commit -m "add merge" [dev 6224937] add merge 1 file changed, 1 insertion(+) 

如今,咱們切換回master

$ git checkout master Switched to branch 'master' 

準備合併dev分支,請注意--no-ff參數,表示禁用Fast forward

$ git merge --no-ff -m "merge with no-ff" dev Merge made by the 'recursive' strategy. readme.txt | 1 + 1 file changed, 1 insertion(+) 

由於本次合併要建立一個新的commit,因此加上-m參數,把commit描述寫進去。

合併後,咱們用git log看看分支歷史:

$ git log --graph --pretty=oneline --abbrev-commit * 7825a50 merge with no-ff |\ | * 6224937 add merge |/ * 59bc1cb conflict fixed ... 

能夠看到,不使用Fast forward模式,merge後就像這樣:

git-no-ff-mode


分支策略

在實際開發中,咱們應該按照幾個基本原則進行分支管理:

首先,master分支應該是很是穩定的,也就是僅用來發布新版本,平時不能在上面幹活;

那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,好比1.0版本發佈時,再把dev分支合併到master上,在master分支發佈1.0版本;

你和你的小夥伴們每一個人都在dev分支上幹活,每一個人都有本身的分支,時不時地往dev分支上合併就能夠了。

Bug分支

首先肯定要在哪一個分支上修復bug,假定須要在master分支上修復,就從master建立臨時分支:

$ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 6 commits. $ git checkout -b issue-101 Switched to a new branch 'issue-101' 

如今修復bug,須要把「Git is free software ...」改成「Git is a free software ...」,而後提交:

$ git add readme.txt $ git commit -m "fix bug 101" [issue-101 cc17032] fix bug 101 1 file changed, 1 insertion(+), 1 deletion(-) 

修復完成後,切換到master分支,並完成合並,最後刪除issue-101分支:

$ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 2 commits. $ git merge --no-ff -m "merged bug fix 101" issue-101 Merge made by the 'recursive' strategy. readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) $ git branch -d issue-101 Deleted branch issue-101 (was cc17032).

Feature分支

開發一個新feature,最好新建一個分支;

若是要丟棄一個沒有被合併過的分支,能夠經過git branch -D <name>強行刪除。

$ git branch -d feature-vulcan error: The branch 'feature-vulcan' is not fully merged. If you are sure you want to delete it, run 'git branch -D feature-vulcan'. 

銷燬失敗。Git友情提醒,feature-vulcan分支尚未被合併,若是刪除,將丟失掉修改,若是要強行刪除,須要使用命令git branch -D feature-vulcan

如今咱們強行刪除:

$ git branch -D feature-vulcan Deleted branch feature-vulcan (was 756d4af).

多人合做
  • 查看遠程庫信息,使用git remote -v

  • 本地新建的分支若是不推送到遠程,對其餘人就是不可見的;

  • 從本地推送分支,使用git push origin branch-name,若是推送失敗,先用git pull抓取遠程的新提交;

  • 在本地建立和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;

  • 創建本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name

  • 從遠程抓取分支,使用git pull,若是有衝突,要先處理衝突。

 

6、標籤管理

  • 命令git tag <name>用於新建一個標籤,默認爲HEAD,也能夠指定一個commit id;

  • git tag -a <tagname> -m "blablabla..."能夠指定標籤信息;

  • git tag -s <tagname> -m "blablabla..."能夠用PGP簽名標籤;

  • 命令git tag能夠查看全部標籤。

  • 命令git push origin <tagname>能夠推送一個本地標籤;

  • 命令git push origin --tags能夠推送所有未推送過的本地標籤;

  • 命令git tag -d <tagname>能夠刪除一個本地標籤;

  • 命令git push origin :refs/tags/<tagname>能夠刪除一個遠程標籤。

使用Github:
      git clone git@github.com:XXXXX/YYYYYY.git
7、搭建Git服務器

搭建Git服務器須要準備一臺運行Linux的機器,強烈推薦用Ubuntu或Debian,這樣,經過幾條簡單的apt命令就能夠完成安裝。

假設你已經有sudo權限的用戶帳號,下面,正式開始安裝。

第一步,安裝git

$ sudo apt-get install git 

第二步,建立一個git用戶,用來運行git服務:

$ sudo adduser git 

第三步,建立證書登陸:

收集全部須要登陸的用戶的公鑰,就是他們本身的id_rsa.pub文件,把全部公鑰導入到/home/git/.ssh/authorized_keys文件裏,一行一個。

第四步,初始化Git倉庫:

先選定一個目錄做爲Git倉庫,假定是/srv/sample.git,在/srv目錄下輸入命令:

$ sudo git init --bare sample.git 

Git就會建立一個裸倉庫,裸倉庫沒有工做區,由於服務器上的Git倉庫純粹是爲了共享,因此不讓用戶直接登陸到服務器上去改工做區,而且服務器上的Git倉庫一般都以.git結尾。而後,把owner改成git

$ sudo chown -R git:git sample.git 

第五步,禁用shell登陸:

出於安全考慮,第二步建立的git用戶不容許登陸shell,這能夠經過編輯/etc/passwd文件完成。找到相似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash 

改成:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell 

這樣,git用戶能夠正常經過ssh使用git,但沒法登陸shell,由於咱們爲git用戶指定的git-shell每次一登陸就自動退出。

第六步,克隆遠程倉庫:

如今,能夠經過git clone命令克隆遠程倉庫了,在各自的電腦上運行:

$ git clone git@server:/srv/sample.git Cloning into 'sample'... warning: You appear to have cloned an empty repository. 

剩下的推送就簡單了。

管理公鑰

若是團隊很小,把每一個人的公鑰收集起來放到服務器的/home/git/.ssh/authorized_keys文件裏就是可行的。若是團隊有幾百號人,就無法這麼玩了,這時,能夠用Gitosis來管理公鑰。

這裏咱們不介紹怎麼玩Gitosis了,幾百號人的團隊基本都在500強了,相信找個高水平的Linux管理員問題不大。

管理權限

有不少不但視源代碼如生命,並且視員工爲竊賊的公司,會在版本控制系統裏設置一套完善的權限控制,每一個人是否有讀寫權限會精確到每一個分支甚至每一個目錄下。由於Git是爲Linux源代碼託管而開發的,因此Git也繼承了開源社區的精神,不支持權限控制。不過,由於Git支持鉤子(hook),因此,能夠在服務器端編寫一系列腳原本控制提交等操做,達到權限控制的目的。Gitolite就是這個工具。

配置文件

配置Git的時候,加上--global是針對當前用戶起做用的,若是不加,那隻針對當前的倉庫起做用。

配置文件放哪了?每一個倉庫的Git配置文件都放在.git/config文件中:

$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true [remote "origin"] url = git@github.com:michaelliao/learngit.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master [alias] last = log -1 

別名就在[alias]後面,要刪除別名,直接把對應的行刪掉便可。

而當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中:

$ cat .gitconfig [alias] co = checkout ci = commit br = branch st = status [user] name = Your Name email = your@email.com 

配置別名也能夠直接修改這個文件,若是改錯了,能夠刪掉文件從新經過命令配置。

讓Git顯示顏色,會讓命令輸出看起來更醒目:

$ git config --global color.ui true
$ git config --global alias.st status


忽略某些文件時,須要編寫.gitignore

.gitignore文件自己要放到版本庫裏,而且能夠對.gitignore作版本管理!

GitHub已經爲咱們準備了各類配置文件,只須要組合一下就可使用了。全部配置文件能夠直接在線瀏覽:https://github.com/github/gitignore

忽略文件的原則是:

  1. 忽略操做系統自動生成的文件,好比縮略圖等;
  2. 忽略編譯生成的中間文件、可執行文件等,也就是若是一個文件是經過另外一個文件自動生成的,那自動生成的文件就不必放進版本庫,好比Java編譯產生的.class文件;
  3. 忽略你本身的帶有敏感信息的配置文件,好比存放口令的配置文件。

 例子:

假設你在Windows下進行Python開發,Windows會自動在有圖片的目錄下生成隱藏的縮略圖文件,若是有自定義目錄,目錄下就會有Desktop.ini文件,所以你須要忽略Windows自動生成的垃圾文件:

# Windows: Thumbs.db ehthumbs.db Desktop.ini 

而後,繼續忽略Python編譯產生的.pyc.pyodist等文件或目錄:

# Python: *.py[cod] *.so *.egg *.egg-info dist build 

加上你本身定義的文件,最終獲得一個完整的.gitignore文件,內容以下:

# Windows: Thumbs.db ehthumbs.db Desktop.ini # Python: *.py[cod] *.so *.egg *.egg-info dist build # My configurations: db.ini deploy_key_rsa 

最後一步就是把.gitignore也提交到Git,就完成了!固然檢驗.gitignore的標準是git status命令是否是說working directory clean

使用Windows的童鞋注意了,若是你在資源管理器裏新建一個.gitignore文件,它會很是弱智地提示你必須輸入文件名,可是在文本編輯器裏「保存」或者「另存爲」就能夠把文件保存爲.gitignore了。

有些時候,你想添加一個文件到Git,但發現添加不了,緣由是這個文件被.gitignore忽略了:

$ git add App.class The following paths are ignored by one of your .gitignore files: App.class Use -f if you really want to add them. 

若是你確實想添加該文件,能夠用-f強制添加到Git:

$ git add -f App.class 

或者你發現,多是.gitignore寫得有問題,須要找出來到底哪一個規則寫錯了,能夠用git check-ignore命令檢查:

$ git check-ignore -v App.class .gitignore:3:*.class App.class 

Git會告訴咱們,.gitignore的第3行規則忽略了該文件,因而咱們就能夠知道應該修訂哪一個規則。

相關文章
相關標籤/搜索