Git&GitHub 學習2:GitHub使用

1、GitHub 使用技巧

1. 突破GitHub單個大文件上傳限制

GitHub 上新建的倉庫容量大小限制在 1G,單個文件不能超過 100M,有 50M 的文件,就會警告了。 可經過如下命令查找超過 100M 的文件:find ./ -type f -size +102400k。 想要突破 GitHub 的限制,支持單個文件超出 100M,可使用 Git LFSjavascript

參考:突破github的100M單個大文件上傳限制 css

2. Git只Clone倉庫指定文件或文件夾

步驟總結以下:html

git init <repo> 	#新建倉庫並初始化
cd <repo> 	#切換到該倉庫目錄
git remote add origin <url>		#拉取remote的all objects信息,url爲倉庫地址
git config core.sparsecheckout true		#設置容許克隆子目錄,即開啓sparse clone
echo "參考論*" >> .git/info/sparse-checkout	#設置須要pull的目錄,*表示全部,!表示匹配相反的
git pull --depth=1 origin master	#將origin端指定目錄下的文件pull到本地
複製代碼

經過本人親自實踐,有幾點說的:java

  1. 像這步命令echo "參考論" >> .git/info/sparse-checkouth會在.git/info/目錄下生成sparse-checkout無後綴文件,打開看到內容能夠看到設置爲了參考論,即會下載匹配參考論的目錄下全部文件。也能夠修改成別的,好比修改諸如爲參考論文/files/101,匹配參考論文/files/101文件或文件夾?。python

  2. 經過實踐,發現其實無論如何設置下載指定的文件或文件夾,其實它都是有下載整個倉庫容量大小,正如知乎宮玖的回答 - 知乎,@依雲指出:git

    你必定沒有親自去嘗試這個功能。「checkout」!=「clone/fetch」。實際上整個倉庫仍是會所有拖回本地,只是檢出的時候不檢出別的目錄而已。github

  3. git pull --depth=1 origin master :depth 用於指定克隆深度,爲 1 即表示只克隆最近一次 commit,能夠不加,不然可能出現問題。補充: git clone 時使用了 --depth 後,如何再從新拉取所有的歷史web

PS:後來發現,其實直接打開想要下載的文件,在右上角能夠直接鼠標右鍵點擊Raw選擇連接另存爲便可下載。或是使用瀏覽器插件【GitZip for github 】能夠很是方便下載,推薦。chrome

參考:shell

3. 利用GitHub進行多人協做開發

(1) 開發而且提交代碼

首先要從 GitHub 上 clone 本身倉庫代碼到本地,你須要執行以下命令:

# 若是沒有配置ssh,能夠 git clone https://github.com/strivebo/git-practice.git
git clone git@github.com:strivebo/git-practice.git 
複製代碼

而後代碼下載到本地了,修改代碼,而後能夠提交代碼,命令以下:

git add .	# 表示提交全部改動,指定提交某個文件的改動,則可 git add hello.txt
git commit  -m '修改緣由,相關說明信息'
複製代碼

執行git commit以後,只是提交到了本機的倉庫,而不是 GitHub 上你帳號的倉庫。你須要執行 push 命令,把 commit 提交到服務器。

# git push #直接到遠程默認倉庫,或者下面這個:
git push orgin master #push到名爲orgin的遠程倉庫的指定分支master
複製代碼

這樣就完成了修改遠程倉庫代碼了。

(2) 多人協做開發

Q:假如想要進行多人協做開發。好比要對 xiaoming 的名爲 git-test 的倉庫貢獻本身寫的代碼,好比說添加新功能,怎麼操做呢?

A:首先你須要 fork 一份 xiaoming 的 git-test 倉庫到本身 GitHub 倉庫,這個時候這個倉庫就是你的了,再 clone 到本地磁盤,而後按上小節流程操做就能夠完成對本身 fork 來的遠程 git-test 倉庫的代碼修改工做。

而後能夠發起 pull request 給 xiaoming 請求合併代碼就行,隨即 xiaoming 本人就會看到你寫的代碼,若是他以爲不錯,沒問題,他就能夠進行合併了。(關於如何發起 pull request,請點擊本小節參考資料查閱,有截圖~)

但這裏的合做開發會有一個問題,如何與 xiaoming 的倉庫代碼保持同步?

由於在本身作開發的過程當中,不免會遇到「Fork」的項目已經有了新的更新,這時固然是但願本身倉庫中的代碼也能同步進行更新。但是,你本地倉庫所鏈接的遠程倉庫的是你本身的 GitHub 倉庫,而不是原做者的倉庫。 解決方法其實很簡單,爲你的本地倉庫再添加一個遠程倉庫源。 步驟以下:

①先查看當前項目所鏈接的遠程倉庫:git remote -v,通常狀況能夠看到目前鏈接了本身的遠程倉庫,截圖我就略了;

②而後添加源做者 xiaoming 的遠程倉庫鏈接:git remote add upstream git@github.com:xiaoming/git-test.git

這個命令什麼意思呢?就是對本地倉庫再關聯一個遠程鏈接,名稱爲 upstream,地址爲git@github.com:xiaoming/test.git(若是要取消該關聯,使用這個命令:git remote rm upstream

(1)從原倉庫獲取最新版本到本地
git fetch upstream master

(2)保證當前位於 master 分支上
git checkout master

(3)將最新版本整合到本地 master 分支上
git merge upstream/master

(4)將更新發送到本身的 GitHub 倉庫裏
git push origin master
複製代碼

或者①②③步能夠用: git pull upstream master 這條命令替代,不過這樣不太安全,由於你 fetch(獲取)以後能夠經過:git log --oneline --graph --decorate --all來查看更新的狀況,再決定是否 merge(整合)到一塊兒。

如上操做完畢,這樣本身 fork 過來的倉庫代碼就和原做者倉庫代碼保證一致了。

也可參考該文:github上fork了別人的項目後,再同步更新別人的提交,該文第二種方法即上面講的方式,命令以下:

git remote -v 
git remote add upstream git@github.com:xxx/xxx.git
git fetch upstream
git merge upstream/master
git push 
複製代碼

參考資料:

4. 同一臺電腦配置多個Git帳號

在平常使用 GitHub 做爲倉庫使用的時候,有時可能會遇到這樣的一些狀況:

1. 有兩個 github 帳號,一臺電腦怎麼同時鏈接這兩個帳號進行維護呢?
2. 本身用一個 github 帳號,平時用來更新本身的一些資料;公司使用的 gitlab(也是 git 的衍生產品)
複製代碼

SSH Key 的配置:

  1. Windows 下打開 Git Bash,建立 SSH Key,按提示輸入密碼,能夠不填密碼一路回車

    $ ssh-keygen -t rsa -C "註釋" 	#如:ssh-keygen -t rsa -C 「123456@qq.com」
    複製代碼
  2. 生成另一個帳號新的 SSH keys

    ssh-keygen -t rsa -C "註釋"	#如:ssh-keygen -t rsa -C "123456@sina.com"
    複製代碼

    平時咱們都是直接回車,默認生成 id_rsaid_rsa.pub。這裏特別須要注意,出現提示輸入文件名的時候(Enter file in which to save the key (\~/.ssh/id_rsa): id_rsa_new)要輸入與默認配置不同的文件名,好比:我這裏填的是 id_rsa_new

    其實也能夠一個命令操做,是使用 -f 參數指定文件名:ssh-keygen -t rsa -C "註釋" -f id_rsa_new"

  3. 配置 C:\Users\用戶名\.ssh\config 文件。在 .ssh文件夾下新建 config 文件(無後綴名),修改以下:

    #github
    Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa
    
    #github2
    Host second.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_new
    複製代碼

    注:令不一樣 Host 實際映射到同一HostName,但密鑰文件不一樣。Host 前綴可自定義。

    它們具體的含義以下:

    #Host myhost(這裏是自定義的host簡稱,之後鏈接遠程服務器就能夠用命令ssh myhost)[注意下面有縮進]
    #User 登陸用戶名(如:git)
    #HostName 主機名可用ip也能夠是域名(如:github.com或者bitbucket.org)
    #Port 服務器open-ssh端口(默認:22,默認時通常不寫此行)
    #IdentityFile 證書文件路徑(如~/.ssh/id_rsa_*)
    複製代碼
  4. 測試:

    $ ssh -T git@github.com
    Hi xiaoming! You've successfully authenticated, but GitHub does not provide shell access.
    
    $ ssh -T git@second.github.com
    Hi zhangsan!  You've successfully authenticated, but GitHub does not provide shell access.
    複製代碼

解決方案總結爲:

  1. 生成私鑰/公鑰,密鑰文件命名避免重複
  2. 設置不一樣 Host 對應同一 HostName 但密鑰不一樣
  3. 取消 git 全局用戶名/郵箱設置,爲每一個倉庫獨立設置用戶名/郵箱

如何取消 Git 全局用戶名/郵箱設置,以下:

  1. 使用 git config --list 查看當前配置

    若是你以前在設置本地倉庫和 github 鏈接的時候設置過 user.nameuser.email, 那麼你必須首先清楚掉該設置,由於不清楚掉該設置,兩個帳號在提交資料的時候,驗證確定衝突(只能設置一個全局的user.nameuser.email,而你如今有兩個帳號就對應兩個不一樣的)。

  2. 取消 global

    git config --global --unset user.name
    git config --global --unset user.email
    複製代碼
  3. 設置每一個項目 repo 的本身的 user.email

    git config  user.email "xxxx@xx.com"
    git config  user.name "suzie"
    複製代碼

或者直接直接編輯電腦.gitconfig 文件(Windows 系統在C:\Users\用戶名\.gitconfig目錄),把 nameemail 都去掉,從而取消全局用戶/郵箱設置。

參考資料:

5. Git配置多個SSH-key?爲何?

背景:當有多個 git 帳號時,好比:

a. 一個 gitee,用於公司內部的工做開發;
b. 一個 github,用於本身進行一些開發活動;
複製代碼

操做步驟:

①生成一個公司用的 SSH-Key

ssh-keygen -t rsa -C 'xxxxx@company.com' -f ~/.ssh/gitee_id_rsa
複製代碼

②生成一個 github 用的SSH-Key

ssh-keygen -t rsa -C 'xxxxx@qq.com' -f ~/.ssh/github_id_rsa
複製代碼

③在 ~/.ssh 目錄下新建一個config文件,添加以下內容(其中Host和HostName填寫git服務器的域名,IdentityFile指定私鑰的路徑)

# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa

#github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
複製代碼

④用ssh命令分別測試

ssh -T git@gitee.com
ssh -T git@github.com
複製代碼

參考資料:

6. 如何將GitHub已有的項目轉移到組織倉庫中去

打開倉庫,點擊 setting,拉到最下面,點擊 Transfer,會看到要求輸入以下:

在這裏分別輸入要轉移的項目名稱,第二行輸入組織名。輸入完畢以後點擊I understand transfer this repository

參考資料:github如何將已有的項目轉移到組織倉庫中去

7. 如何在GitHub上添加協議?

①進入你的「代碼倉庫」,點擊"Create new file",這時 GitHub 的新頁面上,有一個空格讓你填入文件名稱。

②在輸入框輸入文件名」LICENSE",這裏輸入框的右側會出現包含全部開源協議的列表,選擇合適的開源協議,選擇你須要的協議;

③點擊「Commit new file」,這時你添加的開源協議就在代碼倉庫的菜單中了。

參考:如何在github上添加協議

8. 保持碼雲Gitee和GitHub同步更新?

使用 GitHub 時,國內的用戶常常遇到的問題是訪問速度太慢,有時候還會出現沒法鏈接的狀況(緣由你懂的)。若是咱們但願體驗 Git 飛通常的速度,可使用國內的 Git 託管服務——碼雲gitee.com)。和 GitHub 相比,碼雲也提供免費的 Git 倉庫。此外,還集成了代碼質量檢測、項目演示等功能。對於團隊協做開發,碼雲還提供了項目管理、代碼託管、文檔管理的服務,5 人如下小團隊免費。

使用碼雲和使用 GitHub 相似,在此不贅述了。下面主要講的是從 GitHub 上 clone 下來的倉庫如何與 Gitee 保持同步更新,操做以下:

切換到本地倉庫目錄,先使用命令:git remote -v 查看是否關聯了遠程倉庫。若是顯示以下:

git remote -v
origin    git@github.com:michaelliao/learngit.git (fetch)
origin    git@github.com:michaelliao/learngit.git (push)
複製代碼

說明本地庫已經關聯了origin的遠程庫,而且,該遠程庫指向 GitHub。咱們能夠關聯一個遠程倉庫並指向 Gitee,這樣本地庫就既關聯 GitHub,又關聯碼雲。

PS:使用多個遠程庫時,咱們要注意,Git 給遠程庫起的默認名稱是origin,若是有多個遠程庫,咱們須要用不一樣的名稱來標識不一樣的遠程庫。

接下來,咱們再關聯碼雲遠程倉庫:

git remote add gitee git@gitee.com:liaoxuefeng/learngit.git
複製代碼

注意:遠程庫的名稱叫gitee,不叫origin

如今,咱們用git remote -v查看遠程庫信息,能夠看到兩個遠程庫:

git remote -v
gitee    git@gitee.com:liaoxuefeng/learngit.git (fetch)
gitee    git@gitee.com:liaoxuefeng/learngit.git (push)
github    git@github.com:michaelliao/learngit.git (fetch)
github    git@github.com:michaelliao/learngit.git (push)
複製代碼

若是要推送到 GitHub,使用命令:

git push github master
複製代碼

若是要推送到碼雲,使用命令:

git push gitee master
複製代碼

注意:本人用的同一個 ssh-key 的狀況下,在提交代碼使用簡短命令:git push時候貌似只提交到了 GitHub 遠程倉庫;若要提交到 Gitee,則再需git push gitee master

參考:使用碼雲 - 廖雪峯的官方網站

9. 如何正確接收 GitHub 的消息郵件

參考:如何正確接收 GitHub 的消息郵件

10. 精準分享關鍵代碼

好比你有一個文件裏的某一行代碼寫得很是酷炫或者關鍵,想分享一下。能夠在 url 後面加上,好比,點擊下面這 個 url:github.com/AlloyTeam/A…,你便會跳到 alloy_touch.js 的第 240 行。若是是想分享多行代碼,也很簡單:url 後面加上 #L 開始行號 -L 結束行號,好比,AlloyTouch 的運動緩動和逆向緩動函數以下面代碼段所示:github.com/AlloyTeam/A…,其實也不用記憶你直接在網址後面操做,GitHub 自動會幫你生成 url。好比你點擊 39 行,url 變成了:github.com/AlloyTeam/A…,再按住 shift 點擊 45 行,url 變成了:github.com/AlloyTeam/A…,而後你這個 url 就能夠複製分享出去了,點擊這個 url 的人自動會跳到 39 行,而且 39-45 行高亮。

11. 經過提交的msg自動關閉issues

好比有人提交了個 issues github.com/AlloyTeam/A…,而後你去主幹上改代碼,改完以後提交填 msg 的時候,填入:fix https://github.com/AlloyTeam/AlloyTouch/issues/6,這個 issues 會自動被關閉。固然不只僅是 fix 這個關鍵字。下面這些關鍵字也能夠:

close
closes
closed
fixes
fixed
resolve
resolves
resolved
複製代碼

12. gitattributes設置項目語言

GitHub 會根據相關文件代碼的數量來自動識別你這個項目哪一個語言代碼項目。這就帶來了一個問題,好比 AlloyTouch 最開始被識別成 HTML 項目,由於 HTML 例子比 JS 文件多。怎麼辦呢?gitattributes 來幫助你搞定。在項目的根目錄下添加以下 .gitattributes 文件即可,裏面的:

*.html linguist-language=JavaScript
複製代碼

主要意思是把全部 html 文件後綴的代碼識別成 js 文件。

13. 查看本身項目的訪問數據

在本身的項目下,點擊 Insights,而後再點擊 Traffic,裏面有 Referring sites 和 Popular content 的詳細數據和排名。如:Referring sites

其中 Referring sites 表明你們都是從什麼網站來到你的項目的,Popular content 表明你們常常看你項目的哪些文件。

14. trending排行榜

來看看怎麼查看某類型語言的每日排行榜。好比 JavaSrcipt 每日排行榜:

GitHub 推薦:github.com/explore

15. 使用GitHub release發佈應用

(1) 建立release

  1. 在 repo 的主頁上,點擊 release,進入 release 界面

  2. 在 release 界面點選 create a new release

  3. 填寫相關信息,上傳文件

    1. publish release

    2. 經過 GitHub 官方提供的 api 可訪問咱們的 release 信息:

      /repos/:owner/:repo/releases/:id
      複製代碼

參考:github release 功能的使用及問題解決

2、GitHub項目美化

1. GitHub項目徽章的添加和設置

GitHub 項目的 README.md 中能夠添加徽章(Badge)對項目進行標記和說明,這些好看的小圖標不只簡潔美觀,並且還包含了清晰易讀的信息。

徽標主要由圖片和對應的連接(固然,你能夠不填)組成,徽標圖片的話通常由左半部分的名稱和右半部分的值組成。

GitHub 徽標的官方網站是:shields.io/,咱們能夠在官網預覽絕大部分的徽標樣式,而後選擇本身喜歡的(固然首先須要適用於本身的目標項目)徽標,添加到本身的項目文檔中去。

參考資料:

2. 爲GitHub項目添加表情

GitHub 支持的表情,官網查詢:www.webfx.com/tools/emoji…

格式,如::blush:,顯示爲:blush:

3、GitHub使用細節

1. 本地查看遠程分支

git clone 默認會把遠程倉庫整個給 clone下來,但只會在本地默認建立一個 master 分支,若是遠程還有其餘的分支,此時用 git branch -a 查看全部分支。

2. GitHub支持多種協議

GitHub 給出的地址不止一個,除了 git@github.com:xiaoming/test.git 這個地址,還可使用https://github.com/xiaoming/test.git 這樣的地址。實際上,Git 支持多種協議,默認的 git:// 使用ssh,但也可使用 https 等其餘協議。

使用 https 除了速度慢之外,還有個最大的麻煩是每次推送都必須輸入口令,可是在某些只開放 http 端口的公司內部就沒法使用 ssh 協議而只能用 https。

3. 設置默認被推送的分支

git push -u origin test #設置默認被推送的分支
git push	#這個時候我推送的遠程分支應該是 origin/test
複製代碼

查看git push關聯的遠程分支:git branch -v

4. ssh-keygen命令

ssh-keygen 命令用於爲「ssh」生成、管理和轉換認證密鑰,它支持 RSA 和 DSA 兩種認證密鑰。語法:ssh-keygen(選項)

參數:

-b:指定密鑰長度;
-e:讀取openssh的私鑰或者公鑰文件;
-C:添加註釋;
-f:指定用來保存密鑰的文件名;
-i:讀取未加密的ssh-v2兼容的私鑰/公鑰文件,而後在標準輸出設備上顯示openssh兼容的私鑰/公鑰;
-l:顯示公鑰文件的指紋數據;
-N:提供一個新密語;
-P:提供(舊)密語;
-q:靜默模式;
-t:指定要建立的密鑰類型。
複製代碼

如:ssh-keygen -t rsa -C "123456@qq.com"

5. Git忽略提交(.gitignore文件)

在使用 Git 的過程當中,咱們喜歡有的文件好比日誌,臨時文件,編譯的中間文件等不要提交到代碼倉庫,這時就要設置相應的忽略規則,來忽略這些文件的提交。簡單來講一個場景:在你使用git add .的時候,遇到了把你不想提交的文件也添加到了緩存中去的狀況,好比項目的本地配置信息,若是你上傳到 Git 中去其餘人 pull 下來的時候就會和他本地的配置有衝突,因此這樣的個性化配置文件咱們通常不把它推送到 GIt 服務器中,可是又爲了偷懶每次添加緩存的時候都想用git add .而不是手動一個一個文件添加,該怎麼辦呢?很簡單,Git 爲咱們提供了一個.gitignore文件只要在這個文件中申明那些文件你不但願添加到 Git 中去,這樣當你使用git add .的時候這些文件就會被自動忽略掉。

對於常用 Git 的朋友來講,.gitignore配置必定不會陌生。這種方式經過在項目的某個文件夾下定義.gitignore文件,在該文件中定義相應的忽略規則,來管理當前文件夾下的文件的 Git 提交行爲。.gitignore文件是能夠提交到公有倉庫中,這就爲該項目下的全部開發者都共享一套定義好的忽略規則。在.gitingore文件中,遵循相應的語法,在每一行指定一個忽略規則。如:

*.log
*.temp
/vendor
複製代碼

參考:Git忽略提交規則 - .gitignore配置運維總結

6. 如何在README.md中嵌入一個Gist?

適用於 GitHub 的網頁,經過 Jekyll,使用 Markdown 中的腳本標記,而後由 Jekyll 處理。由於 Markdown支持 html,因此能夠直接使用< script>標籤嵌入 Gist。

只需複製 GitHub 提供的 Gist 的嵌入網址,示例,複製如下內容並粘貼到 Markdown 文件:

< script src =「https://gist.github.com/nisrulz/11c0d63428b108f10c83.js」>< / script>
複製代碼

這樣能看到想要的結果。注:以上使用的 Jekyll 方式,親測,若是是直接嵌入 README.md 文件是不行的,由於 GitHub爲了安全性都不能引入自定義的 JS 和 CSS。

參考:

7. 其餘網頁上面嵌入我的的GitHub倉庫?

是否想在其餘網頁上面嵌入本身的 GitHub 倉庫頁面,有個 star 或 fork 按鈕,以下圖:

能夠這樣寫:

<iframe src="https://ghbtns.com/github-btn.html?user=strivebo&amp;repo=websites-and-tools&amp;type=watch&amp;count=true&amp;size=large" allowtransparency="true" frameborder="0" scrolling="0" width="156px" height="30px"></iframe>
<iframe src="https://ghbtns.com/github-btn.html?user=strivebo&amp;repo=websites-and-tools&amp;type=fork&amp;count=true&amp;size=large" allowtransparency="true" frameborder="0" scrolling="0" width="156px" height="30px"></iframe>
複製代碼

把 user 和 repo 改爲你本身的就能夠了。注:親測,GitHub 網站頁面暫不支持。

8. GitHub快捷方式

  • issue 中輸入冒號 : 添加表情
  • 任意界面 shift + ?顯示快捷鍵
  • issue 中選中文字,R 鍵快速引用

參考及推薦資料

相關文章
相關標籤/搜索