1、git與github介紹
git與github介紹
Git是什麼
Git是一個開源的[分布式][版本控制系統],用于靈活高效地處理任何或小或大的項目
版本控制器
CVS/SVN/Git
SVN
用戶端/伺服器
GIT
用戶端/代碼托管網站(例如:github)
注1:類似的代碼托管網站還有:github/碼雲/阿裡雲Code源碼管理
注2:類似的技術GitLab,但它與GitHub又有一定的差別
GitLab和GitHub一樣屬于第三方基于Git開發的作品,免費且開源。與Github類似,可以注冊使用者,任意送出你的代碼,添加SSHKey等等。
不同的是,GitLab是可以部署到自己的伺服器上,資料庫等一切資訊都掌握在自己手上,适合團隊内部協作開發,
你總不可能把團隊内部的智慧總放在别人的伺服器上吧?簡單來說可把GitLab看作個人版的GitHub。
Git與SVN差別(重點記錄1/2/3點)
1、去中心化
GIT是分布式的,SVN不是:這是GIT和其它非分布式的版本控制系統,例如SVN,CVS等,最核心的差別。
2、git倉庫的任何一個拷貝都可以獨立作為一個伺服器來使用
3、在Git中檔案有四種狀态:
未跟蹤(untrack):表示檔案為新增加的
已修改(modified):表示修改了檔案,但還沒儲存到git倉庫中。
已暫存(staged):表示對一個已修改檔案的目前版本做了标記,使之包含在下次送出的快照中
已送出(committed):表示檔案已儲存在git倉庫中。
4、其它
GIT沒有一個全局的版本号,而SVN有:目前為止這是跟SVN相比GIT缺少的最大的一個特征。
GIT的内容完整性要優于SVN:GIT的内容存儲使用的是SHA-1雜湊演算法。這能確定代碼内容的完整性,確定在遇到磁盤故障和網絡問題時降低對版本庫的破壞
5、直接記錄快照,而非差異
GIT把内容按中繼資料方式存儲,而SVN是按檔案:所有的資源控制系統都是把檔案的元資訊隐藏在一個類似.svn,.cvs等的檔案夾裡。
直接記錄快照,而非差異
6、直接記錄快照,而非差異
GIT分支和SVN的分支不同,分支在SVN中一點不特别,就是版本庫中的另外的一個目錄。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP31EeFRUT4NmeNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwMDOwQDN0ATM2EDMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
Github 的簡單使用
登入github網站
公庫javaxx_pub
私庫:javaxx
建立檔案夾
建立檔案
可建立檔案以及檔案夾用/分開自動添加前面内容為檔案夾名
删除
首先選擇(點選)你想要删除的庫,點選setting
然後滾輪滑到最下面,一點要填對庫名,否則沒得庫可以删除。
Git下載下傳安裝
下載下傳位址:
https://git-scm.com/downloads
下載下傳完成之後:
建立開始菜單目錄名稱,預設git,不需要修改
項目儲存名 不需修改 預設就行
選擇git使用的編輯器
行末換行符轉換,使用預設值
Install 安裝
檢測安裝成功,任意視窗或桌面都可以右鍵,出現下面兩個選項即可
Git常用指令
Git配置帳号和郵箱(本機)
Git配置帳号和郵箱(本機)
一般剛安裝Git都要配置使用者名和密碼,因為你送出代碼到本地倉庫(上傳代碼到遠端倉庫)時會用到,
如果沒有沒有配置,在你送出時它會提醒你的。但是,如果僅僅克隆(即下載下傳)公有項目,你甚至不需要注冊——剛剛我們建立的賬戶是為了以後
fork 其它項目,以及推送我們自己的修改。
指令行配置
0.“Git bash here”打開指令視窗
1.檢視git的配置清單
git config --list
注1:如果沒有配置東西,應該是空的。照着下面步驟配置完成後,你可以再試一下該指令,就會出現一系列配置資訊
2.設定使用者名/郵箱/密碼
git config --global user.name “username”
git config --global user.email “email”
git config --global user.password “password”
咱不需要密碼,到時候用ssh key
git config --global user.name “javaxiaoxu”
git config --global user.email “[email protected]”
注1:全局變量
–global 表示全局的,即目前使用者都有效,該配置會出現在 ~/.gitconfig 檔案中,~表示目前使用者的目錄,
比如我的是:C:\Users\lenovo.gitconfig,打開該檔案你會發現如下圖所示的内容:
注2:局部變量
git config user.name “username”
git config user.email “email”
局部是隻對目前倉庫起效的,它的配置資訊會在目前倉庫根目錄/.git/config檔案下
注意:局部變量覆寫全局變量!!!和程式設計語言裡面的變量關系是一樣的。
注3:删除某個全局配置項
git config --global --unset user.name
Git指令使用場景
git檔案狀态與工作區域(重點)
git的檔案狀态是其git核心内容,了解後對後續的操作有莫大的幫助,不同的檔案狀态又存儲在不同的工作區域中。
1.檔案狀态
git中的檔案有以下幾種狀态
未跟蹤(untrack):表示檔案為新增加的
已修改(modified):表示修改了檔案,但還沒儲存到git倉庫中。
已暫存(staged):表示對一個已修改檔案的目前版本做了标記,使之包含在下次送出的快照中
已送出(committed):表示檔案已儲存在git倉庫中。
2.工作區域
按照本地計算機與遠端計算機劃分,工作區域有以下幾種
1)本地計算機
Working Directory(工作目錄):即正在編輯的檔案狀态。檔案狀态為未跟蹤(untrack)和已修改(modified)在此區域内。
Staging Area(暫存區):儲存了下次将送出的檔案清單資訊。檔案狀态為已暫存(staged)在此區域内。
Repository(本地倉庫):送出到本地倉庫的檔案。
2)遠端計算機
Repository(遠端倉庫):已送出到遠端計算機内的檔案。
常用指令(重點)
git status :展示工作區及暫存區域中不同狀态的檔案。
git add :将内容從工作目錄添加到暫存區。
git commit :所有通過 git add 暫存的檔案送出到本地倉庫。
git push :将本地倉庫的記錄送出到遠端倉庫。
git reset HEAD <file> :從暫存區移除指定檔案。
git checkout -- <file> :從本地倉庫恢複指定檔案。
git pull :拉取遠端倉庫的資料。
git init
實踐操作:使用git送出檔案至遠端倉庫(重點)
首先明确大緻流程:
1.取得項目的 Git 倉庫
第一種是從github現有倉庫(遠端)克隆出新的倉庫(本地)
第二種是在工作目錄中初始化新的倉庫(本地),然後再與一個Github上的倉庫(遠端)關聯
2.在本地的克隆庫上進行你所需要的改動,修改檔案内容,添加檔案等;
3.add,commit,push三部曲。
從github現有倉庫(遠端)克隆出新的倉庫(本地)
具體步驟:
1.取得項目的Git倉庫(從github現有倉庫克隆)
## 此處url改為自己倉庫的位址
$ git clone https://github.com/javaxiaoxu/javaxx_pub.git
注1:此指令,會在目前目錄下建立一個名為test224_pub的目錄,其中包含一個 .git 的目錄,用于儲存下載下傳下來的所有版本記錄。
如果進入這個建立的 test224_pub目錄,你會看到項目中的所有檔案已經在裡邊了,準備好後續的開發和使用。
注2:克隆倉庫的指令格式為 git clone [url],Git支援多種協定,包括https,但通過ssh支援的原生git協定速度最快
git clone [email protected]:fsliurujie/test.git --SSH協定
git clone git://github.com/fsliurujie/test.git --GIT協定
git clone https://github.com/fsliurujie/test.git --HTTPS協定
提問:那平時使用哪個協定最好呢???
注3:你熟悉其他的 VCS 比如 Subversion,你可能已經注意到這裡使用的是 clone 而不是 checkout。這是個非常重要的差别,
Git 收取的是項目曆史的所有資料(每一個檔案的每一個版本),伺服器上有的資料克隆之後本地也都有了。實際上,
即便伺服器的磁盤發生故障,用任何一個克隆出來的用戶端都可以重建伺服器上的倉庫,回到當初克隆時的狀态
注4:如果希望在克隆的時候,自己定義要建立的項目目錄名稱,可以在上面的指令末尾指定新的名字
git clone https://github.com/javaxiaoxu/javaxx_pub.git mytest1
注5:如何檢視.git目錄(預設為隐藏檔案夾)
window菜單:“檢視”->“選項”->選擇,頁籤“檢視”->勾中“顯示隐藏的檔案、檔案夾和驅動器”
2.檢視初始狀态
git clone 一個倉庫後,運作 git status
注1:另外一種檢視git倉庫狀态的方式
進入test1目錄,用ls -ah指令如果指令竄顯示.git目錄,就表示已經克隆成功,并且該目錄已經是git可以管理的倉庫了
3:添加一個檔案
在此倉庫中source目錄下添加一個xxx.txt檔案t,運作 git status
注1:可以看到檔案上方有個 “Untracked files”,表示這個檔案“未跟蹤”
4.新建立的檔案添加到“暫存區”
執行 git add source/add.txt ,将會把新建立的add.txt送出到“暫存區”,執行後運作 git status
注1:檔案上方有說明使用 git reset HEAD 可從暫存區移除指定檔案。
5.“暫存區”的内容送出到“本地倉庫”
執行 git commit,将“暫存區”的内容送出到“本地倉庫”,執行後運作 git status:
注1:如果沒有配置帳号或密碼,會出現以下提示
*** Please tell me who you are.
注2:git commit 時出現:please enter the commit message for your changes,
預設會啟用 shell 的環境變量 $EDITOR 所指定的軟體,一般都是 vim(沒錯啦,就是linux課程使用過滴) 或 emacs,
即詢問你是否要添加“送出說明”
要輸入“送出說明”的話就需要
1.按鍵盤字母 i 進入insert模式
2.修改最上面那行黃色合并資訊,可以不修改
3.按鍵盤左上角"Esc"
4.輸入":wq",注意是冒号+wq,按Enter鍵即可
也可以使用 -m 參數後跟“送出說明”方式,在一行指令中送出更新。
git commit -m “送出說明”
另外,送出說明在團隊合作中是非常重要的一點,要盡量寫的簡潔而語意清晰
下面這個是檔案被修改時候以及直接送出注釋的情況
git commit -am “被修改的檔案,跳過暫存區直接放入本地倉庫注釋說明”
6.“本地倉庫”的内容送出到“遠端倉庫”
執行 git push,将“本地倉庫”的内容送出到“遠端倉庫”,執行後運作 git status
提示:可以看到送出後git狀态又回到初始化狀态。
注意:這裡要輸入github網站的使用者名(郵箱、或者登入賬号javaxiaoxu)、密碼
工作目錄中初始化新的倉庫(本地),然後再與一個Github上的倉庫(遠端)關聯
1.取得項目的Git倉庫(在工作目錄中初始化新的倉庫)
要對現有的某個項目開始用 Git 管理,隻需到此項目所在的目錄,例如:
E:\InstallPath\git_repository\javaxx\javaxx_pub,
執行:git init
2.同上
3.同上
4.同上
5.同上
6.“本地倉庫”的内容送出到“遠端倉庫”
執行 git push,将“本地倉庫”的内容送出到“遠端倉庫”,會報出如下錯誤
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using
這是,因為本地倉庫并未與任何一個遠端倉庫關聯,是以第一次送出時必須提供遠端倉庫的URL,具體操作如下:
在github先建倉庫test3,目前,在GitHub上的這個倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,
## 也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的内容推送到GitHub倉庫。
1.打開浏覽器,登陸github後,建立一個倉庫test3(目前在GitHub上的這個倉庫還是空的),它的位址為:
https://github.com/lixiao12/test224_pub2.git
注1:在GitHub首頁建立test3倉庫,注意不要添加README.md等任何檔案
2.将本地倉庫的目前分支與遠端倉庫相關聯
git remote add originhttps://github.com/javaxiaoxu/javaxx_pub2.git
注1:文法:git remote add <name> <url>
遠端庫的名字就是origin,這是Git預設的叫法,也可以改成别的,但是origin這個名字一看就知道是遠端庫
注2:https://github.com/javaxiaoxu/javaxx_pub2.git改成自己倉庫對應的URL
注3:補充指令,如果url打錯了,可以通過如下指令修改遠端倉庫關聯
git remote set-url origin https://github.com/javaxiaoxu/javaxx_pub2.git
3.将本地代碼庫的某一分支(eg:master)推送到遠端的代碼庫
git push -u origin master
注1:把本地庫的内容推送到遠端,用git push指令,實際上是把目前分支master推送到遠端
由于遠端庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支内容推送的遠端新的master分支,
還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化指令。
注2:補充指令,檢視git倉庫的遠端代碼庫的位址:git remote -v
注3:再次添加檔案b.txt,依次add/commit/push操作,則與之前沒有差別了
使用git從遠端倉庫pull(拉)至本地倉庫(重點)
git pull
Git沖突
1、先從遠端倉庫pull代碼至本地,再修改沖突代碼, git pull
注1:git status檢視倉庫狀态,會顯示紅色的錯誤提示消息“ both modified: 沖突.txt”
2、打開 沖突.txt,手動修改沖突部分的代碼
3.依次add/commit/push代碼至遠端倉庫
commit執行完成,重新檢視倉庫狀态git status,紅色的錯誤提示消息“ both modified: 沖突.txt”
已經沒有,表示沖突已解決
Over~~~~~~~~~~~~~~~~·