git-从入门到熟悉
文章目錄
- Git歷史
- Git與svn對比
- Svn
- Git
- git工作流程
- Git的安裝
- 軟件下載
- 軟件安裝
- 安裝git for windows
- 安裝TortoiseGit
- 安裝中文語言包
- 使用git管理文件版本
- 創建版本庫
- 使用GitBash
- 使用TortoiseGit
- 添加文件
- 添加文件過程
- 工作區和暫存區
- 修改文件
- 提交修改
- 查看修改歷史
- 差異比較
- 還原修改
- 刪除文件
- 案例:將java工程提交到版本庫
- 忽略文件語法規范
- 遠程倉庫
- 添加遠程庫
- 在github上創建倉庫
- ssh協議
- 什么是ssh?
- 基于密匙的安全驗證
- ssh密鑰生成
- ssh密鑰配置
- 同步到遠程倉庫
- 使用git bash
- 使用TortoiseGit同步
- 從遠程倉庫克隆
- 使用git bash:
- 使用TortoiseGit:
- 從遠程倉庫取代碼
- 創建合并分支
- 使用TortoiseGit實現分支管理
- 創建分支
- 合并分支
- 解決沖突
- 在IntelliJ IDEA中使用git
- 在Idea中配置git
- 將工程添加至git
- 一些bug
- 從遠程倉庫克隆
- 從服務端拉取代碼
TortoiseGit文件夾和文件圖標不顯示解決方法
Git歷史
同生活中的許多偉大事件一樣,Git 誕生于一個極富紛爭大舉創新的年代。Linux 內核開源項目有著為數眾廣的參與者。絕大多數的 Linux 內核維護工作都花在了提交補丁和保存歸檔的繁瑣事務上(1991-2002年間)。到 2002 年,整個項目組開始啟用分布式版本控制系統 BitKeeper 來管理和維護代碼。
到 2005 年的時候,開發 BitKeeper 的商業公司同 Linux 內核開源社區的合作關系結束,他們收回了免費使用 BitKeeper 的權力。這就迫使 Linux 開源社區(特別是 Linux的締造者 Linus Torvalds )不得不吸取教訓,只有開發一套屬于自己的版本控制系統才不至于重蹈覆轍。他們對新的系統訂了若干目標:
? 速度
? 簡單的設計
? 對非線性開發模式的強力支持(允許上千個并行開發的分支)
? 完全分布式
? 有能力高效管理類似 Linux 內核一樣的超大規模項目(速度和數據量)
Git與svn對比
Svn
SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而干活的時候,用的都是自己的電腦,所以首先要從中央服務器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作,如果在局域網還可以,帶寬夠大,速度夠快,如果在互聯網下,如果網速慢的話,就郁悶了。
下圖就是標準的集中式版本控制工具管理方式:
集中管理方式在一定程度上看到其他開發人員在干什么,而管理員也可以很輕松掌握每個人的開發權限。
但是相較于其優點而言,集中式版本控制工具缺點很明顯:
-
服務器單點故障
-
容錯性差
Git
Git是分布式版本控制系統,那么它就沒有中央服務器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因為版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。
下圖就是分布式版本控制工具管理方式:
git工作流程
一般工作流程如下:
從遠程倉庫中克隆 Git 資源作為本地倉庫。
從本地倉庫中checkout代碼然后進行代碼修改
在提交前先將代碼提交到暫存區。
提交修改。提交到本地倉庫。本地倉庫中保存修改的各個歷史版本。
在修改完成后,需要和團隊成員共享代碼時,可以將代碼push到遠程倉庫。
下圖展示了 Git 的工作流程:
Git的安裝
最早Git是在Linux上開發的,很長一段時間內,Git也只能在Linux和Unix系統上跑。不過,慢慢地有人把它移植到了Windows上?,F在,Git可以在Linux、Unix、Mac和Windows這幾大平臺上正常運行了。由于開發機大多數情況都是windows,所以本教程只講解windows下的git的安裝及使用。
軟件下載
下載地址:https://git-scm.com/download
參考資料中安裝包已經下載完畢,根據不同的操作系統選擇對應的安裝包。
軟件安裝
安裝git for windows
一路"下一步"使用默認選項即可。
安裝TortoiseGit
一路"下一步"使用默認選項即可。
默認選項下會啟動配置畫面:
由于目前只有英文語言包,默認即可繼續下一步。
配置git.exe,在4.2.1中已經安裝過git-for-windows了所以在此找到git.exe所在的目錄。
配置開發者姓名及郵箱,每次提交代碼時都會把此信息包含到提交的信息中。
使用默認配置,點擊"完成"按鈕完成配置。
完整完畢后在系統右鍵菜單中會出現git的菜單項。
安裝中文語言包
安裝中文語言包并不是必選項。可以根據個人情況來選擇安裝。
直接"下一步"完整完畢。
語言包安裝完畢后可以在TortoiseGit的設置中調整語言
使用git管理文件版本
創建版本庫
什么是版本庫呢?版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以"還原"。由于git是分布式版本管理工具,所以git在不需要聯網的情況下也具有完整的版本管理能力。
創建一個版本庫非常簡單,可以使用git bash也可以使用tortoiseGit。首先,選擇一個合適的地方,創建一個空目錄(D:\temp\git\repository)。
使用GitBash
在當前目錄中點擊右鍵中選擇Git Bash來啟動。
或者在開始菜單中啟動。注意如果是從開始菜單啟動的gitbash需要切換目錄到倉庫所在的目錄。
創建倉庫執行命令:
$ git init
使用TortoiseGit
使用TortoiseGit時只需要在目錄中點擊右鍵菜單選擇"在這里創建版本庫"
版本庫創建成功,會在此目錄下創建一個.git的隱藏目錄,如下所示:
在windows中如何顯示隱藏目錄隱藏目錄請自行百度o(╯□╰)o
概念:
版本庫:".git"目錄就是版本庫,將來文件都需要保存到版本庫中。
工作目錄:包含".git"目錄的目錄,也就是.git目錄的上一級目錄就是工作目錄。只有工作目錄中的文件才能保存到版本庫中。
添加文件
添加文件過程
在D:\temp\git\repository目錄下創建一個mytest.txt文件
文本文件變為帶"+"號的圖標:
提交文件:在mytest.txt上再次點擊右鍵選擇"提交",此時將文件保存至版本庫中。
工作區和暫存區
Git和其他版本控制系統如SVN的一個不同之處就是有暫存區的概念。
什么是工作區(Working Directory)?
工作區就是你在電腦里能看到的目錄,比如我的reporstory文件夾就是一個工作區。
有的同學可能會說repository不是版本庫嗎怎么是工作區了?其實repository目錄是工作區,在這個目錄中的".git"隱藏文件夾才是版本庫。這回概念清晰了吧。
Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。
如下圖所示:
分支和HEAD的概念我們稍后再講。前面講了我們把文件往Git版本庫里添加的時候,是分兩步執行的:
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改。
你可以簡單理解為,需要提交的文件修改通通放到暫存區,然后,一次性提交暫存區的所有修改。
修改文件
提交修改
被版本庫管理的文件不可避免的要發生修改,此時只需要直接對文件修改即可。修改完畢后需要將文件的修改提交到版本庫。
在mytest.txt文件上點擊右鍵,然后選擇"提交"
查看修改歷史
在開發過程中可能會經常查看代碼的修改歷史,或者叫做修改日志。來查看某個版本是誰修改的,什么時間修改的,修改了哪些內容。
可以在文件上點擊右鍵選擇"顯示日志"來查看文件的修改歷史。
差異比較
當文件內容修改后,需要和修改之前對比一下修改了哪些內容此時可以使用"比較差異功能"
還原修改
當文件修改后不想把修改的內容提交,還想還原到未修改之前的狀態。此時可以使用"還原"功能
注意:此操作會撤銷所有未提交的修改,所以當做還原操作是需要慎重慎重!!!
刪除文件
需要刪除無用的文件時可以使用git提供的刪除功能直接將文件從版本庫中刪除。
案例:將java工程提交到版本庫
第一步:將參考資料中的java工程project-test復制到工作目錄中
第二步:將工程添加到暫存區。
點擊確定完成暫存區添加。
三、忽略文件或文件夾
在此工程中,并不是所有文件都需要保存到版本庫中的例如"bin"目錄及目錄下的文件就可以忽略。好在Git考慮到了大家的感受,這個問題解決起來也很簡單,在Git工作區的根目錄下創建一個特殊的.gitignore文件,然后把要忽略的文件名填進去,Git就會自動忽略這些文件。
如果使用TortoiseGit的話可以使用菜單項直接進行忽略。
選擇保留本地文件。完成后在此文件夾內會多出一個.gitignore文件,這個文件就是文件忽略文件,當然也可以手工編輯。其中的內容就是把bin目錄忽略掉。
提交代碼
將代碼添加到master分支上,其中.gitignore文件也需要添加到暫存區,然后提交到版本庫。
忽略文件語法規范
空行或是以 # 開頭的行即注釋行將被忽略。
可以在前面添加正斜杠 / 來避免遞歸,下面的例子中可以很明白的看出來與下一條的區別。
可以在后面添加正斜杠 / 來忽略文件夾,例如 build/ 即忽略build文件夾。
可以使用 ! 來否定忽略,即比如在前面用了 *.apk ,然后使用 !a.apk ,則這個a.apk不會被忽略。
* 用來匹配零個或多個字符,如 *.[oa] 忽略所有以".o"或".a"結尾, *~ 忽略所有以 ~ 結尾的文件(這種文件通常被許多編輯器標記為臨時文件); [] 用來匹配括號內的任一字符,如 [abc] ,也可以在括號內加連接符,如 [0-9] 匹配0至9的數; ? 用來匹配單個字符。
看了這么多,還是應該來個栗子:
# 忽略 .a 文件
*.a
# 但否定忽略 lib.a, 盡管已經在前面忽略了 .a 文件
!lib.a
# 僅在當前目錄下忽略 TODO 文件, 但不包括子目錄下的 subdir/TODO
/TODO
# 忽略 build/ 文件夾下的所有文件
build/
# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf
遠程倉庫
添加遠程庫
現在我們已經在本地創建了一個Git倉庫,又想讓其他人來協作開發,此時就可以把本地倉庫同步到遠程倉庫,同時還增加了本地倉庫的一個備份。
常用的遠程倉庫就是github:https://github.com/,接下來我們演示如何將本地代碼同步到github。
在github上創建倉庫
首先你得在github上創建一個賬號,這個就不演示了。然后在github上創建一個倉庫:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zGGCEPQ7-1597047026418)(git%E6%95%99%E6%A1%88-v2.assets/20200809222234.png)]
點擊"create repository"按鈕倉庫就創建成功了。
Github支持兩種同步方式"https"和"ssh"。如果使用https很簡單基本不需要配置就可以使用,但是每次提交代碼和下載代碼時都需要輸入用戶名和密碼。如果使用ssh方式就需要客戶端先生成一個密鑰對,即一個公鑰一個私鑰。然后還需要把公鑰放到githib的服務器上。這兩種方式在實際開發中都用應用,所以我們都需要掌握。接下來我們先看ssh方式。
ssh協議
什么是ssh?
SSH 為 Secure Shell(安全外殼協議)的縮寫,由 IETF 的網絡小組(Network Working Group)所制定。SSH 是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。
基于密匙的安全驗證
使用ssh協議通信時,推薦使用基于密鑰的驗證方式。你必須為自己創建一對密匙,并把公用密匙放在需要訪問的服務器上。如果你要連接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求用你的密匙進行安全驗證。服務器收到請求之后,先在該服務器上你的主目錄下尋找你的公用密匙,然后把它和你發送過來的公用密匙進行比較。如果兩個密匙一致,服務器就用公用密匙加密"質詢"(challenge)并把它發送給客戶端軟件??蛻舳塑浖盏?#34;質詢"之后就可以用你的私人密匙解密再把它發送給服務器。
ssh密鑰生成
在windows下我們可以使用 Git Bash.exe來生成密鑰,可以通過開始菜單或者右鍵菜單打開Git Bash
git bash 執行命令,生命公鑰和私鑰
命令: ssh-keygen -t rsa
執行命令完成后,在window本地用戶.ssh目錄C:\Users\用戶名\.ssh下面生成如下名稱的公鑰和私鑰:
ssh密鑰配置
密鑰生成后需要在github上配置密鑰本地才可以順利訪問。
在key部分將id_rsa.pub文件內容添加進去,然后點擊"Add SSH key"按鈕完成配置。
同步到遠程倉庫
同步到遠程倉庫可以使用git bash也可以使用tortoiseGit
使用git bash
在倉庫所在的目錄(D:\temp\git\repository)點擊右鍵選擇"Git Bash Here",啟動git bash程序。
然后在git bash中執行如下語句:
git remote add origin git@github.com:sublun/mytest.git
git push -u origin master
注意:其中黃色字體部分(sublun)需要替換成個人的用戶名。
如何出現如下錯誤:
可以先執行如下命令,然后再執行上面的命令
$ git remote rm origin
使用TortoiseGit同步
一、由于TortoiseGit使用的ssh工具是"PuTTY"git Bash使用的ssh工具是"openSSH",如果想讓TortoiseGit也使用剛才生成的密鑰可以做如下配置:
Url:遠程倉庫的地址
推送URL:也是相同的
Putty密鑰:選擇剛才生成的密鑰中的私鑰
同步。在本地倉庫的文件夾中單擊右鍵,選擇"Git同步"
{width=“5.7625in” height=“4.354861111111111in”}
從遠程倉庫克隆
克隆遠程倉庫也就是從遠程把倉庫復制一份到本地,克隆后會創建一個新的本地倉庫。選擇一個任意部署倉庫的目錄,然后克隆遠程倉庫。
使用git bash:
$ git clone git@github.com:sublun/mytest.git
使用TortoiseGit:
在任意目錄點擊右鍵:
從遠程倉庫取代碼
Git中從遠程的分支獲取最新的版本到本地有這樣2個命令:
git fetch:相當于是從遠程獲取最新版本到本地,不會自動merge(合并代碼)
git pull:相當于是從遠程獲取最新版本并merge到本地
上述命令其實相當于git fetch 和 git merge
在實際使用中,git fetch更安全一些
因為在merge前,我們可以查看更新情況,然后再決定是否合并
如果使用TortoiseGit的話可以從右鍵菜單中點擊"拉取"(pull)或者"獲取"(fetch)
創建合并分支
在我們每次的提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git里,這個分支叫主分支,即master分支。HEAD指針嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。
一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點:
每次提交,master分支都會向前移動一步,這樣,隨著你不斷提交,master分支的線也越來越長。
當我們創建新的分支,例如dev時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上:
你看,Git創建一個分支很快,因為除了增加一個dev指針,改改HEAD的指向,工作區的文件都沒有任何變化!
不過,從現在開始,對工作區的修改和提交就是針對dev分支了,比如新提交一次后,dev指針往前移動一步,而master指針不變:
假如我們在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最簡單的方法,就是直接把master指向dev的當前提交,就完成了合并:
所以Git合并分支也很快!就改改指針,工作區內容也不變!
合并完分支后,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉后,我們就剩下了一條master分支:
使用TortoiseGit實現分支管理
使用TortoiseGit管理分支就很簡單了。
創建分支
在本地倉庫文件夾中點擊右鍵,然后從菜單中選擇"創建分支":
如果想創建完畢后直接切換到新分支可以勾選"切換到新分支"選項或者從菜單中選擇"切換/檢出"來切換分支:
合并分支
分支切換到dev后就可以對工作區的文件進行修改,然后提交到dev分支原理的master分支不受影響。例如我們修改mytest.txt中的內容,然后提交到dev分支。
切換到master分支后還是原理的內容:
將dev分支的內容合并到master分支,當前分支為master。從右鍵菜單中選擇"合并":
再查看mytest.txt的內容就已經更新了:
解決沖突
兩個分支中編輯的內容都是相互獨立互不干擾的,那么如果在兩個分支中都對同一個文件進行編輯,然后再合并,就有可能會出現沖突。
例如在master分支中對mytest.txt進行編輯:
然后提交到版本庫。
切換到dev分支,對mytest.txt進行編輯:
最后進行分支合并,例如將dev分支合并到master分支。需要先切換到master分支然后進行分支合并。
出現版本沖突。
沖突需要手動解決。
在沖突文件上單機右鍵選擇“解決沖突”菜單項:
把沖突解決完畢的文件提交到版本庫就可以了。
在IntelliJ IDEA中使用git
在Idea中配置git
安裝好IntelliJ IDEA后,如果Git安裝在默認路徑下,那么idea會自動找到git的位置,如果更改了Git的安裝位置則需要手動配置下Git的路徑。
選擇File→Settings打開設置窗口,找到Version Control下的git選項:
選擇git的安裝目錄后可以點擊“Test”按鈕測試是否正確配置
將工程添加至git
1)在idea中創建一個工程,例如創建一個java工程,名稱為idea-git-test,如下圖所示:
創建本地倉庫
在菜單中選擇"vcs"→Import into Version Control→Create Git Repository…
選擇工程所在的上級目錄。本例中應該選擇idea-projects目錄,然后點擊"OK"按鈕,在工程的上級目錄創建本地倉庫,那么idea-projects目錄就是本地倉庫的工作目錄,此目錄中的工程就可以添加到本地倉庫中。也就是可以把idea-git-test工程添加到本地倉庫中。
選擇之后在工具欄上就多出了git相關工具按鈕:
將工程添加至本地倉庫
直接點擊
commit按鈕,將工程提交至本地倉庫。
然后點擊"commit"按鈕,將工程添加至本地倉庫。
推送到遠程
在github上創建一個倉庫然后將本地倉庫推送到遠程。
在工程上點擊右鍵,選擇git→Repository→push,
或者在菜單中選擇vcs→git→push
點擊"Define remote"鏈接,配置https形式的URL,git形式的無法通過。然后點擊OK
點擊"push"按鈕就講本地倉庫推送到遠程,如果是第一次配置推送需要輸入github的用戶名和密碼。
一些bug
csdn鏈接
csdn鏈接
csdn鏈接
?
從遠程倉庫克隆
關閉工程后,在idea的歡迎頁上有"Check out from version control"下拉框,選擇git
此處仍然推薦使用htts形式的url,點擊"test"按鈕后顯示連接成功。
點擊OK按鈕后根據提示將遠程倉庫克隆下來,然后倒入到idea中。
從服務端拉取代碼
如果需要從服務端同步代碼可以使用工具條中的"update"按鈕
總結
以上是生活随笔為你收集整理的git-从入门到熟悉的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用VML画图(一些基本的矢量图)(转)
- 下一篇: vue-day02-vue常用特性