Git筆記——基本功能(下)
大家好,DDL是大學生的第一生產力,所以很快就趕出這第二篇教程出來啦。
本篇文章會重點放在GitHub上,說git操作GitHub的一些基本操作。
提供上一篇文章的鏈接:Git筆記--基本功能(上) - 知乎專欄
本篇文章的部分內容參考了Git鏈接到自己的Github(1)簡單的開始 - plinx - 博客園,這是一篇不錯的blog,介紹了git操作GitHub的一些常見問題。
下面我們開始正文
目錄
- 準備工作
- 推送文件及常見問題
- GitHub 界面一些按鈕及操作
準備工作
先給大家看看GitHub的界面
首先登陸GitHub的網站,註冊一個GitHub賬號,GitHub的賬號是電子郵箱和密碼,這個郵箱是GitHub用來給你發通知的重要郵箱,不要隨便設置。
然後我們返回git,記得你之前設置了一個本機的郵箱和用戶名嗎?現在你需要讓本地庫與GitHub建立連接,如何讓GitHub知道這個是你發的呢?這就是SSH密鑰的作用了,好的,我們輸入以下命令:
ssh-keygen -t rsa -C "youremail@example.com"n
(請注意這個郵箱是你的本機郵箱)
這是在生成一個RSA的SSH密鑰,之後它會先讓你確定產生的id_rsa(請注意文件名,這個文件名要是不對就刪掉重來吧,以前我掉進坑過)的密鑰地址,好的,然後會讓你輸入密碼,這個密碼如果不是軍事用途,商業機密什麼的就忽略掉。講白了,直接enter下來就好
但是!如果這不是你第一次設置密鑰,你可能會與之前的密鑰地址和文件名衝突,這個時候需要自己設置好存放的地址。
這裡給大家看一下產生的兩個文件
(以前已經設置過一個密鑰了,所以這次我修改了存放地址)
id_rsa那個是密鑰,不要泄露出去,id_rsa.pub是公鑰(public),可以暴露,同樣的,GitHub只需要知道你的公鑰就可以確定你是誰了。所以下一步我們回到GitHub。
點擊右上角你的頭像——Settings——SSH and GPG keys進入界面,點擊右上角的New SSH key按鈕
自己設立title,然後key裡面把原來的公鑰用notepad++打開,直接複製粘貼到Key框裡面就好。添加好了,我們來測試一下SSH鏈接。
ssh -T git@github.comn
推送文件
首先,我們在GitHub賬戶上創建一個新的空倉庫,以我自己的賬戶為例,設置名字為demo
然後進入這個界面
下一步要做的事情就已經很明顯了,輸入命令git remote add origin git@github.com:*ngit push -u origin mastern
我們解釋一下:
- 第一行命令是要添加一個遠程庫,*後面是這個倉庫的地址,對照好GitHub界面左上方倉庫的地址,然後不要忘了後面的.git擴展名,remote 遙遠的,origin一般表示遠程庫。
- 第二行命令是將master分支上的東西都推送到這個遠程庫上。-u參數表示第一次需要先建立本地版本庫與GitHub遠程庫的連接,第二次之後就不需要這個參數了。
那我們來演示一下
(提交的過程會有點慢,等待就好)(origin是剛才做了添加之後產生的文件,無視就好)
那麼提交之後,再回頭去看看GitHub,發生了什麼呢?
提示:遠程庫的狀況如果你不清楚的話,只需要輸入命令:
git remote -vn
就可以展現遠程庫的詳細信息。
提示:如果你想推送到下一個庫,那麼之前的庫要記得刪,命令是
git remote remove originn
注意:分清楚工作區,暫存區和你的branch分支上的文件(已經提交的),你這次的push只是把已經commit到branch分支上的文件提交了上去,工作區內沒有被add,commit的文件是不會被提交的,如果覺得不太放心,時刻注意查看一下工作區的status
注意:很多時候我們需要把一個庫裡面的文件夾一起推上去,git add有一種參數方法是可以把所有的文件一起推送上去的,這裡不介紹這個命令的原因是如果碰上文件夾,這種方法會把文件夾識別為文件,會產生意想不到的情況。所以我建議大家一個一個的add,然後檢查完了再進行push。
當然,事情往往總不是那麼plain sailing(一帆風順)……
因為之前我們已經做了很多的注意和提示,所以諸如連接不上,找不到倉庫(not find a repository)這些的我們都當你們會成功的躲過……
但是,有可能會發生rejected(拒絕)的錯誤,別忘了剛才我們是推送給一個空倉庫,如果裡面有東西呢怎麼辦?
有的代碼是不允許你覆蓋的,這種情況下我們推薦的解決方案是先把它原本的東西抓取下來,使用的命令是
git pulln
這個時候會牽涉到分支的合併的問題,具體的說的話不太好理解,其實只要理解為:遠程庫的版本比你現在的分支的版本要新,你應該怎麼樣做分支的合併?
這個時候,我們進入.git文件夾(別忘了上一節提到的那個初始化工作區後生成的一個隱藏文件夾),打開config,修改裡面的一些東西為如下內容:
[branch "master"]n remote = originn merge = refs/heads/mastern
之後就可以正常爬取並且傳送上去了。
這種情況產生的原因是衝突,這在多個分支的工作的時候經常會出現,不過如果你一直都是一個master分支,那倒是問題不大。
好的,最後來說一說clone
git clone git@github.com:*n
*的東西是遠程版本庫的地址,我們舉個例子,現在打開一個很強的GitHub網站
我要把它clone下來放到我的GitHub的demo工作區這就代表了任務的完成,回去看看demo里,哎,真有這玩意。
提示:我自己在研究的時候發現傳輸的速率總是很慢很慢(幾個KB/s),但是現在我們看這個就發現完全不一樣,這個原因是因為我自己打開的校園網的VPN,如果你也是學生的話,這個方法不妨一試,掛個伺服器代理,連一下VPN,都可以大大提高傳輸的速率。
好的,有人要提問了,到現在為止,我都沒有發現怎麼刪除文件,事實上這需要好好的理解一下git add和commit文件的具體表示。
我們這裡提供了一個演示
我之前手工的創建了一個文件demo2.txt,現在我把它手動刪除了,然後
看到圖裡的deleted了沒?再看看下面的git add demo2.txt,是不是有點懵逼?注意!這裡提交的並不是demo2.txt的文件,而是對應的它的修改命令!也就是說,你把這個東西commit並且push掉之後,GitHub執行的就是刪除命令了。demo2.txt就在GitHub上被刪了。
當然,如果你想完全通過命令行來簡單粗暴的解決,也可以使用git rm命令,具體的原理與git add相似,這裡我們就不展開了。
下面,來看一個稍微複雜的問題
寫一份教程的同時自己也要保證圖的多樣性,例子的準確性,就剛剛我看到了我的git上顯示了這些東西
原來我在剛才做了刪除操作之後發現那個句子好像很不錯,我就後悔了,做了一次reflog,於是,現在我的本地倉庫版本已經比遠程庫落後了,這個時候,我嘗試著去push新的東西上去,也就失敗了解決方案:- 把目前你的東西複製一份移出工作區
- git pull,然後把你的東西移進來,手動解決衝突。
- git push
這樣就可以了。
這個問題挺常見的,希望大家可以多看看這篇文章,積累經驗。
GitHub 界面一些按鈕及操作
學了以上的命令,已經足夠你玩轉你自己的GitHub了,但是這並不是我們逃避GitHub的理由,因此我們這裡依然對GitHub的界面做一些簡單的介紹,希望大家學完後可以輕鬆玩轉GitHub~~
我們還是一樣,看圖說話
登陸GitHub網站,我這邊會顯示這樣的畫面
- 上方導航區,一般常用的是search,pull requests和issues。
- 左上方的導言,這是給你去探索著玩的,有興趣的可以去看看
- 右上方的表示你在這些倉庫里貢獻過,也就是提交過文件
- 右下角表示倉庫,注意三個圖標,前三個代表是自己的倉庫,第四個代表這是個私人倉庫,經過owner分享才能看到,最後三個是fork下來的(fork的概念之後說)
點擊右上方的頭像,點擊your profile就進入了下一張圖
這裡就要說這麼幾個概念了1.fork我們看到REMDME下面有一行提示文字是forked from...,這代表這個倉庫是從別的地方拷過來的,這種情況多半出現在需要摘用別的代碼並且進行修改的時候,在項目協作開發的時候會經常用上。與之相對應的就是
2.pull request
點進去fork的倉庫,我們來看一下這張圖
- 首先右上角的三個按鈕是標記這個倉庫被fork,star,watch的次數的,當然你也可以點擊那個fork的按鈕,完成fork操作
- 略微向下有一個code欄,pull requests之後說,projects這一欄主要是用來標記目前的項目開發的一些進度的,這個有點像notes的意思。另外想介紹一下settings,這可以對倉庫做一些處理,比如刪除……不說了,我臉現在還很疼。
- 再往下看到31 commits那一欄,這一欄我們拉出來說
1.commits
這是記錄提交的每一步的,這和git reflog展現出來的內容相似,點每一次提交記錄就能看到每一步的提交狀態。2.branch這標記了提交的不同分支,在項目開發中,有可能有一方面的內容是由多個人來做的,這個時候多個人對應多個分支,這一方面內容有點複雜,這裡略去不說。3.release這個牽涉到了版本tag標記的概念,大概意思就是說,我每一次的成稿都給它一個tag,標記版本號,也就是項目開發的開發版本相關內容,這一塊內容由於組內開發不複雜,這裡略去不說。感興趣的可以參考廖雪峰老師的教程。4.contributors這就表示由多少人參與了協作。
- 再下方最左有個branch:master,master都知道是主分支,如果你用多個分支提交過文件,就會有不一樣的內容
- 稍微往右看,看到了一個New pull request,這就是fork對應的功能,你fork完,修改完之後認為對了,就可以提交一個pull request,界面會給你提供修改的痕迹,提交成功後,由這個倉庫的owner進行評定,如果成功,你的pull request就會成功的被應用到他的項目開發中,也就是給開源做了貢獻啦。
- 再往右看有個create new file和upload files等等,咱們略去不說,因為太簡單了,clone or download中,download是可以下載的,不過是手工下載,clone就不用說了,你已經學過git了。
- 再往下有一條提示信息:
This branch is 26 commits behind the xmucpp:master.
這個代表你fork的對應的原organization(組織,orga)已經很新了,在這之後有26條提交記錄,後面就開始提示你要不要做pull request,但是compare的話只會compare這個倉庫的變化,所以有可能你點進去依然看不到任何信息。
最後,給大家展示一下項目組的organization
被邀請進入項目GitHub的人自然就可以在組內創建倉庫進行工作了,而owner資格拿到之後,就可以刪除倉庫,整理倉庫了。
好了,可視化界面的介紹就到這裡。
寫在後面
git操作GitHub和GitHub本身可視化界面,每個人傾向不同。但是git學好之後,對於理解GitHub上的一些界面按鈕很有好處,而且用git操作會顯得比較的程序猿,所以說,找到二者的結合點,是玩轉它的關鍵~
好的,本系列教程結束,撒花~~歡迎支持著點贊~~筆芯~~
非商業轉載註明作者即可,商業轉載請聯繫作者授權並支付稿費。本專欄已授權「維權騎士」網站(http://http://rightknights.com)對我在知乎發布文章的版權侵權行為進行追究與維權。
項目聯繫方式:
- 項目郵箱(@iGuo 的郵箱):zhangguocpp@163.com
- 項目網站:http://www.xmucpp.com/(修復中)
- 項目GitHub:Chinas Prices Project at Xiamen Univerisity (CPP@XMU)(修復中)
- 項目專欄:Chinas Prices Project - 知乎專欄
- 項目知乎賬戶:@CPP
- 項目公眾號:xmucpp2016(XMUCPP)
作者:劉理
鏈接:https://zhuanlan.zhihu.com/p/25673086來源:知乎著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。項目微信公眾號:
推薦閱讀:
※直接迭代序列要比通過索引迭代快?
※有哪些利用編程方法提高自己工作效率的例子?
※[10] Python條件判斷語句(一)
※【Kotlin填坑-02】使用高階函數後的when語句