Git和GitHub使用教程
Git和GitHub使用教程
轉載于
–https://www.jianshu.com/p/296d22275cdd
MachinePlay
3
2018.12.20 00:18:30
字數 4,360
閱讀 55,236
github.png
內容提要
本文分為兩個個部分
1.Git教程
2.Github教程
第一部分
1.什么是GitHub?
GitHub是世界上最大的軟件遠程倉庫,是一個面向開源和私有軟件項目的托管平臺,使用Git做分布式版本控制。
簡單的來說,GitHub就是全是界程序員和組織發布程序代碼的平臺之一,全世界各地的程序員講自己寫的代碼上傳到這里與大家分享。
當你需要完成某個輪子(開發某個東西)的時候,可以嘗試先去GitHub借鑒一下別人已經開發過的。
或者你和同伴們打算開發一個小軟件,就可以將代碼放到GitHub上來實現合作開發。
使用GitHub,首先要會使用Git。
內容為精簡版,詳細內容可參考廖雪峰git教程
2.Git極簡入門
1.Git是什么?
git.png
Git是實現分布式版本控制的一個工具,簡單的來說就是實現文件歷史管理的工具。
下面我舉一個例子,說明Git的作用。
1.你是公司的一名程序員,現在你寫了一段程序:
print(‘Hello’)
2.老板看到你的代碼太差了,讓你改掉,于是你改成了:
print(“你好”)
3.老板看到以后覺得不行,讓你把代碼改回到上一次的狀態
如果你從1改到2改了一大半內容,并且還沒有留1的備份,是不是要哭了?
如果你在這個時候使用了Git做版本控制,就不會有這種問題了。
每一次你修改代碼之后都做用Git一次記錄,Git就會知道你每一次改了什么內容。
老板讓你回到1,你只要輸入 git reset --hard 1,就回到了當時的版本。
所以說,Git就是實現歷史版本管理的工具。不論你改了多少內容,改了多少次,Git都能回到當時的版本。
同時Git也是合作開發的工具。
比如現在有100個人的團隊一起開發某個軟件,大家肯定不能用復制粘貼代碼來合作。
我們可以指定所有人都把代碼上傳到一臺服務器,然后大家下載服務器上的代碼來修改,修改完了再上傳回去。這時,Git記錄每個人什么時候,改了什么內容。實現所有人同步,在必要時回到某些版本。
再比如,QQ每隔一段時間都要更新版本,忽然某個新版本不穩定,騰訊決定撤回到上個版本,這個時候就要讓代碼回到發布新版本之前。
2.使用Git
下載Git
去Git官網下載對應操作系統的Git。
windows和mac的安裝過程簡單,這里不做贅述,講一下linux (ubuntu)的,其他linux系統的玩家水平應該都很高,不需要看教程~~
在終端輸入
sudo apt-get install git
輸入密碼安裝即可。
設置Git
windows打開GitBash,macos和linux用戶打開終端。
首先要設置自己的身份,比如git提交代碼的時候要讓別人知道什么人提交了代碼,
設置身份內容有兩條,一個是你的郵箱,另一個是你的稱呼 ,以后你提交的代碼都根據這個來確定是你
提交的的了。Your Name填你想讓別人知道的名字,email@example.com換成自己的郵箱。
自此以后你寫的bug就會被人認出來是你寫的了。
輸入:
$ git config --global user.name “Your Name”
$ git config --global user.email “email@example.com”
使用Git
從終端(cmd)進入你想要記錄內容更改的文件夾里
例如我們進入gittest文件夾
輸入:
git init
這個文件夾以后的更改就會被記錄了。(如果是空文件夾會提示Initialized empty Git repository in /home/yep/code/gittest/.git/,告訴你文件夾為空)
現在我們在文件夾里新建一個文件hello.txt,內容是
print(“Hello World”)
現在我們要把這個文件放入git倉庫。
和把大象放到冰箱需要3步相比,把一個文件放到Git倉庫只需要兩步。
第一步:保存后,我們使用git add命令,告訴git我們把文件添加到倉庫緩存區了,在終端輸入
git add hello.txt
沒有提示說明操作成功。
第二步:使用git commit命令,告訴git我們要把緩存區的所有文件正式提交到倉庫:
git commit -m “添加了hello.txt”
其中 -m 和后面引號內容是本次提交的說明,也就是描述你每次改了什么。
嫌麻煩不想輸入-m "xxx"行不行?確實有辦法可以這么干,但是強烈不建議你這么干,因為輸入說明對自己對別人閱讀都很重要。實在不想輸入說明的童鞋請自行Google,我不告訴你這個參數。
[master (root-commit) ec4652d] 添加了hello.txt
1 file changed, 1 insertion(+)
create mode 100644 hello.txt
git commit命令執行成功后會告訴你,1 file changed:1個文件被改動(我們新添加的hello.txt文件);1 insertions:插入了兩行內容(hello.txt有一行內容)。
為什么Git添加文件需要add,commit一共兩步呢?因為commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m “add 3 files.”
add把文件放到了緩存區,然后commit正式提交到倉庫。
實現版本回退
現在修改hello.txt里的內容:
print(“Hello World”)
print(“老板是神經病”)
因為對工作很不滿,下班前添加了第二行,“老板是神經病”,然后提交
git add hello.txt
git commit -m “hello.txt里添加了一句話”
提示:
[master 88d885c] 在hello.txt添加了一句話
1 file changed, 2 insertions(+), 1 deletion(-)
像這樣,你不斷對文件進行修改,然后不斷提交修改到版本庫里,就好比玩RPG游戲時,每通過一關就會自動把游戲狀態存盤,如果某一關沒過去,你還可以選擇讀取前一關的狀態。有些時候,在打Boss之前,你會手動存盤,以便萬一打Boss失敗了,可以從最近的地方重新開始。Git也是一樣,每當你覺得文件修改到一定程度的時候,就可以“保存一個快照”,這個快照在Git中被稱為commit。一旦你把文件改亂了,或者誤刪了文件,還可以從最近的一個commit恢復,然后繼續工作,而不是把幾個月的工作成果全部丟失。
現在,我們回顧一下hello.txt文件一共有幾個版本被提交到Git倉庫里了:
版本1:添加了hello.txt
版本2:在hellotxt添加了幾句話
到了第二天早上你后悔了,想回到昨天下班前代碼的狀態
當然了,在實際工作中,我們腦子里怎么可能記得一個幾千行的文件每次都改了什么內容,不然要版本控制系統干什么。版本控制系統肯定有某個命令可以告訴我們歷史記錄,在Git中,我們用git log命令查看:
輸入git log命令查看版本情況
輸入:
git log
顯示了過去所有的修改時間、修改人、修改內容:
commit 88d885c21216cbedacb1692e08d51afa6d4e32a7 (HEAD -> master)
Author: yepdlpc mattbaisteins@gmail.com
Date: Wed Dec 19 20:13:22 2018 +0800
commit ec4652d5d0b8662fc8730d64b42341d1c363a442
Author: yepdlpc mattbaisteins@gmail.com
Date: Wed Dec 19 20:11:42 2018 +0800
yepdlpc和郵箱都是我的。。我們可以看到,最新的提交在最上面,并按時間有近到遠。并且每一次提交修改都生成了一個commit id,我們可以認為這個id是當時的這個版本的版本號,這個commit id是我們找回當時版本的唯一憑據。
我們只有兩次提交,只需要回到ec645…這個commit id時的版本就行。
Git中使用HEAD表示當前版本,也就是commit 88d885c21216cbedacb1692e08d51afa6d4e32a7,
HEAD表示上一個版本,HEAD表示上上一個版本,當然往上100個版本寫100個比較容易數不過來,所以寫成HEAD~100。
現在,我們要把當前版本回退到上一個版本,就可以使用git reset命令:
git reset --hard HEAD^
–hard參數有啥意義?這個后面再講,現在你先放心使用。
此時我們可以看到hello.txt的文件內容變回了:
print(“Hello World”)
果然被還原了。
還可以繼續回退到上一個版本,不過且慢,然我們用git log再看看現在版本庫的狀態:
Author: yepdlpc mattbaisteins@gmail.com
Date: Wed Dec 19 20:11:42 2018 +0800
最新的那個版本88d885c21216cbedacb1692e08d51afa6d4e32a7已經看不到了!好比你從21世紀坐時光穿梭機來到了19世紀,想再回去已經回不去了,腫么辦?
辦法其實還是有的,只要上面的命令行窗口還沒有被關掉,你就可以順著往上找啊找啊,找到那個commit id是88d885c21216cbedacb1692e08d51afa6d4e32a7,于是就可以指定回到未來的某個版本:
git reset --hard 88d885
版本號沒必要寫全,前幾位就可以了,Git會自動去找。當然也不能只寫前一兩位,因為Git可能會找到多個版本號,就無法確定是哪一個了。
我們再看hello.txt的內容:
print(“Hello World!”)
print(“老板是神經病”)
果然,我胡漢三又回來了。
Git的版本回退速度非常快,因為Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向某個版本:
head指針
現在,你回退到了某個版本,關掉了電腦,第二天早上就后悔了,想恢復到新版本怎么辦?找不到新版本的commit id怎么辦?
在Git中,總是有后悔藥可以吃的。當你用$ git reset --hard HEAD^回退到舊版本時,再想恢復到新版本,就必須找到新版本的的commit id。
Git提供了一個命令git reflog用來記錄你的每一次命令:
$ git reflog
88d885c (HEAD -> master) HEAD@{0}: reset: moving to 88d885c21216cbedacb1692e08d51afa6d4e32a7
ec4652d HEAD@{1}: reset: moving to HEAD^
88d885c (HEAD -> master) HEAD@{2}: commit: 在hello.txt添加了一句話
ec4652d HEAD@{3}: commit (initial): 添加了hello.txt
后悔藥來了
第二部分 GitHub
github
為什么用GitHub?
學會使用Git后我們的團隊合作能力大大提升,我們可以設置一臺代碼倉庫服務器,本地提交完成(commit)后將代碼與倉庫同步,就能實現分布式版本控制了。
然而,為一個小項目單獨設立倉庫服務器成本有些高,另外,自己搭建的物理主機服務器難免會有故障,我們也很難保障網絡(獨立ip很貴),于是,大膽的想法就出現了!
沒錯!就是上云啦!GitHub就是這樣一家提供免費代碼倉庫的公司,它是由Git之父、linux之父linus成立的(git其實是linus為了維護linux開發的)為廣大程序員提供遠程代碼倉庫的偉大公司~~
前不久被微軟收購了。
頁面大概是這樣:
github個人主頁
每個用戶有一個類似博客的主頁,和很多倉庫(一個項目一個倉庫),程序員把自己寫的代碼上傳到GitHub來托管,因為是大公司在管,你不必擔心它的服務器會掛掉,在全球任何有網絡的地方你都可以開始工作!
沒錯,很多公司也使用GitHub管理他們的項目
google.png
大概有三種用途:
1.合作開發
如果有多個人一起開發某項目,把倉庫設在GitHub,大家在各自筆記本寫代碼、修改使用git上傳、同步,避免了復制粘貼代碼,而且還能實現版本控制,誰修改了什么內容一清二楚,連誰寫了多少行改了多少行代碼都能統計清楚。摸魚是不可能的。
2.軟件倉庫
GitHub提供兩種倉庫私有倉庫和公開倉庫。
GitHub免費為所有用戶提供公開倉庫空間,公開倉庫向網絡公開,所有人都能訪問,但只有所有者和授權用戶才能修改。
私有倉庫不對外公開,但要向GitHub付費。
3.代碼公開
這一條應該是最有用的了,你可以在這里找到全世界程序員的勞動成果,上到各種算法實現、下到各種app源碼。只要遵循開源協議,你都可以copy下來用。
使用GitHub
第一步:注冊賬號GitHub官網
第二步:創建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創建SSH Key:
ssh-keygen -t rsa -C “youremail@example.com”
你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認值即可,由于這個Key也不是用于軍事目的,所以也無需設置密碼。
如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
打開id_rsa.pub,復制里面的內容。
第三步,登陸GitHub,打開“Account settings”,“SSH Keys and GPG keys”頁面:
然后,點“New SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內容即可。
添加sshkey
點“Add Key”,你就應該看到已經添加的Key。
為什么GitHub需要SSH Key呢?因為GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。
當然,GitHub允許你添加多個Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家里提交,只要把每臺電腦的Key都添加到GitHub,就可以在每臺電腦上往GitHub推送了。
最后友情提示,在GitHub上免費托管的Git倉庫,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放進去。
創建倉庫
然后你可以創建倉庫了
首先,登陸GitHub,然后,在右上角找到“Create a new repo”按鈕,創建一個新的倉庫
new.png
然后起一個項目名
test.png
來到這個項目的主頁
主頁
可以看到主頁提供了兩種和本地倉庫關聯起來的方式
方法一:
把本地已有的同名Git倉庫和GitHub上的倉庫關聯起來
我們在本地新建了一個名為Gittest的文件夾
git init
將Gittest文件夾設置為Git倉庫
添加文件,比如我們新寫了一個hello.txt:
git add hello.txt
git commit -m “first commit”
到此為止已經提交到了本地倉庫
接下來我們把本地倉庫和遠程倉庫聯系起來
git remote add origin git@github.com:MachinePlay/Gittest.git
請千萬注意,把上面的MachinePlay替換成你自己的GitHub賬戶名,否則,你在本地關聯的就是我的遠程庫,關聯沒有問題,但是你以后推送是推不上去的,因為你的SSH Key公鑰不在我的賬戶列表中。
添加后,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫
下一步,就可以把本地庫的所有內容推送到遠程庫上
git push -u origin master
由于遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。
此后git add git commit-m之后 就可以使用
git push origin master
就可以把自己的代碼上傳到遠程倉庫了。
方法二:
使用Git clone直接從遠程倉庫克隆下來
前面我們講了先有本地庫,后有遠程庫的時候,如何關聯遠程庫。
現在,假設我們從零開發,那么最好的方式是先創建遠程庫,然后,從遠程庫克隆。
首先,登陸GitHub,創建一個新的倉庫,名字叫Gittest
每個倉庫都有一個地址:
image.png
我們在本地使用git clone直接把遠程倉庫克隆下來。
git clonegit@github.com:MachinePlay/Gittest.git
看到這里大家就懂了,不僅僅是自己的倉庫可以克隆,也可以克隆其他用戶的公開倉庫。
例如現在隨便找一個安卓閱讀app的倉庫
image.png
git clone git@github.com:smuyyh/BookReader.git
就把這位用戶倉庫里一個完整的閱讀app源碼全部下載到本地了。
至于有了全部源碼如何使用?可以學習別人的code結構、或者找成熟的中間模塊使用。
總結
以上是生活随笔為你收集整理的Git和GitHub使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置git 账户密码时bash:$:co
- 下一篇: sudo apt-get update后