(二)GitHub的使用随记
一、Git及GitHub的使用
1. 突破GitHub單個大文件上傳限制
GitHub 上新建的倉庫容量大小限制在 1G,單個文件不能超過 100M,有 50M 的文件,就會警告了。 可通過以下命令查找超過 100M 的文件:find ./ -type f -size +102400k。 想要突破 GitHub 的限制,支持單個文件超出 100M,可以使用 Git LFS。
參考:突破github的100M單個大文件上傳限制
2. Git只Clone倉庫指定文件或文件夾
步驟總結如下:
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到本地通過本人親自實踐,有幾點說的:
像這步命令echo "參考論" >> .git/info/sparse-checkouth會在.git/info/目錄下生成sparse-checkout無后綴文件,打開看到內容可以看到設置為了參考論,即會下載匹配參考論的目錄下所有文件。也可以修改為別的,比如修改諸如為參考論文/files/101,匹配參考論文/files/101文件或文件夾?。
通過實踐,發現其實不管如何設置下載指定的文件或文件夾,其實它都是有下載整個倉庫容量大小,正如知乎宮玖的回答 - 知乎,@依云指出:
你一定沒有親自去嘗試這個功能?!竎heckout」!=「clone/fetch」。實際上整個倉庫還是會全部拖回本地,只是檢出的時候不檢出別的目錄而已。
git pull --depth=1 origin master :depth 用于指定克隆深度,為 1 即表示只克隆最近一次 commit,可以不加,否則可能出現問題。補充: git clone 時使用了 --depth 后,如何再重新拉取全部的歷史。
PS:后來發現,其實直接打開想要下載的文件,在右上角可以直接鼠標右鍵點擊Raw選擇鏈接另存為即可下載?;蚴鞘褂脼g覽器插件【GitZip for github 】可以非常方便下載,推薦。
參考:
- git clone克隆或下載一個倉庫單個文件夾
- git只clone倉庫中指定子目錄和指定文件的實現
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”的項目已經有了新的更新,這時當然是希望自己倉庫中的代碼也能同步進行更新??墒?#xff0c;你本地倉庫所連接的遠程倉庫的是你自己的 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參考資料:
- 如何利用 Git 與 GitHub 進行多人協作開發
- github的多人協作
4. 同一臺電腦配置多個Git賬號
在日常使用 GitHub 作為倉庫使用的時候,有時可能會遇到這樣的一些情況:
1. 有兩個 github 賬號,一臺電腦怎么同時連接這兩個賬號進行維護呢? 2. 自己用一個 github 賬號,平時用來更新自己的一些資料;公司使用的 gitlab(也是 git 的衍生產品)SSH Key 的配置:
Windows 下打開 Git Bash,創建 SSH Key,按提示輸入密碼,可以不填密碼一路回車
$ ssh-keygen -t rsa -C "注釋" #如:ssh-keygen -t rsa -C “123456@qq.com”生成另外一個賬號新的 SSH keys
ssh-keygen -t rsa -C "注釋" #如:ssh-keygen -t rsa -C "123456@sina.com"平時我們都是直接回車,默認生成 id_rsa 和 id_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"
配置 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_*)測試:
$ 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.解決方案總結為:
如何取消 Git 全局用戶名/郵箱設置,如下:
使用 git config --list 查看當前配置
如果你之前在設置本地倉庫和 github 連接的時候設置過 user.name 和 user.email, 那么你必須首先清楚掉該設置,因為不清楚掉該設置,兩個賬號在提交資料的時候,驗證肯定沖突(只能設置一個全局的user.name 和 user.email,而你現在有兩個賬號就對應兩個不同的)。
取消 global
git config --global --unset user.name git config --global --unset user.email設置每個項目 repo 的自己的 user.email
git config user.email "xxxx@xx.com" git config user.name "suzie"或者直接直接編輯電腦.gitconfig 文件(Windows 系統在C:\Users\用戶名\.gitconfig目錄),把 name 和 email 都去掉,從而取消全局用戶/郵箱設置。
參考資料:
- 一臺電腦綁定兩個github帳號教程
- 同一臺電腦配置多個git賬號
- 一臺電腦綁定兩個git帳號(GitHub和GitLab)
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參考資料:
- Git配置多個SSH-Key
- 一臺電腦配置多個ssh key(不同的多個郵箱ssh key,多git賬號,智能選擇對應的ssh key)
- 管理git生成的多個ssh key
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 的消息郵件
二、GitHub項目美化
1. GitHub項目徽章的添加和設置
GitHub 項目的 README.md 中可以添加徽章(Badge)對項目進行標記和說明,這些好看的小圖標不僅簡潔美觀,而且還包含了清晰易讀的信息。
徽標主要由圖片和對應的鏈接(當然,你可以不填)組成,徽標圖片的話一般由左半部分的名稱和右半部分的值組成。
GitHub 徽標的官方網站是:shields.io/,我們可以在官網預覽絕大部分的徽標樣式,然后選擇自己喜歡的(當然首先需要適用于自己的目標項目)徽標,添加到自己的項目文檔中去。
參考資料:
- 為你的Github README生成漂亮的徽章和進度條
- GitHub 項目徽章的添加和設置
2. 為GitHub項目添加表情
GitHub 支持的表情,官網查詢:https://www.webfx.com/tools/emoji-cheat-sheet/
格式,如::blush:,顯示為?
三、Git及GitHub細節和技巧
1. 本地查看遠程分支
git clone 默認會把遠程倉庫整個給 clone下來,但只會在本地默認創建一個 master 分支,如果遠程還有其他的分支,此時用 git branch -a 查看所有分支。
2. Git支持多種協議
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。
參考:
- Github: How to embed a gist into README.md? - Stack Overflow
- Github:如何在README.md中嵌入一個gist?
- Custom css file for readme.md in a Github repo - Stack Overflow
7. 其他網頁上面嵌入個人的GitHub倉庫?
是否想在其他網頁上面嵌入自己的 GitHub 倉庫頁面,有個 star 或 fork 按鈕,如下圖:
可以這樣寫:
<iframe src="https://ghbtns.com/github-btn.html?user=strivebo&repo=websites-and-tools&type=watch&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="156px" height="30px"></iframe> <iframe src="https://ghbtns.com/github-btn.html?user=strivebo&repo=websites-and-tools&type=fork&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="156px" height="30px"></iframe>把 user 和 repo 改成你自己的就可以了。PS:親測,GitHub 網站頁面暫不支持。
推薦資料
- GitHub:waylau/github-help
update:2019-02-18
總結
以上是生活随笔為你收集整理的(二)GitHub的使用随记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitHub学生包的介绍与申请
- 下一篇: 整理 | 编程技术学习资源汇总