標籤:

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

由於我們現在演示的是把東西推送上去,所以最後那個設置README的選項不要管它。直接到這裡就創建倉庫就好。

然後進入這個界面

下一步要做的事情就已經很明顯了,輸入命令

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新的東西上去,也就失敗了

解決方案:

  1. 把目前你的東西複製一份移出工作區
  2. git pull,然後把你的東西移進來,手動解決衝突
  3. 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)

作者:劉理

鏈接:zhuanlan.zhihu.com/p/25

來源:知乎

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

項目微信公眾號:


推薦閱讀:

直接迭代序列要比通過索引迭代快?
有哪些利用編程方法提高自己工作效率的例子?
[10] Python條件判斷語句(一)
【Kotlin填坑-02】使用高階函數後的when語句

TAG:Git | GitHub | 编程 |