Git從入門到精通


一 Git(重點)

1 git是什么?

git是目前世界上最先進的分布式版本控制工具(沒有之一)。
git由什么特點?

什么是版本控制工具?
說白了就是幫助我們管理不同版本的文件的一個應用程序。

2 git誕生

2002年之前,linus自己手動維護linux的版本代碼
2002之后到2005年,使用的免費的bitkeeper
2005年之后,linus開發git

3 集中型版本控制工具和分布式版本控制工具

3.1 集中型的版本控制工具

svn,cvs,vss
特點:
1. 實現大部分開發中對版本管理的需求
2. 結構很簡單,上手容易
缺點:
1. 對中央倉庫依賴嚴重,一旦損壞了,歷史數據怎么恢復?
2. 程序員上傳的都是完整版,如何追溯查詢?
3. 系統正在上線運行,需要修改bug或增加幾個不同的功能,持續幾個月的時間。如何同時管理幾個版本
4. 如果管理一個分布在世界上各地且互不相識的大型開發團隊

3.2 分布式版本控制工具

4 git的作用

1. 協同開發
2. 版本記錄
3. 沖突解決
4. 歷史追查
5. 代碼備份
6. 版本還原
7. 權限管理
8. 分支管理
9. 代碼審查
...

5 git安裝

	最早的git是在linux上開發的,很長一段時間中,git只能在linux和unix上運行。不過,后來有人把他一直到windows平台。現在git可以在linux、unix、mac os和windows幾個主流平台運行。
	要使用git,第一步當然是安裝。在windows安裝

5.1 在windows中安裝git

1. 命令行工具:git for windows(重點)
https://git-for-windows.github.io/1
tip:
點擊安裝包,然后傻瓜式的安裝就可以成功

2. 可視化工具:TortoiseGit
https://tortoisegit.org

3. idea插件(掌握)

4. github網站(掌握)
http://www.github.com

6 配置git簽名

6.1 第一步

選中你要作為git工程存放的目錄,然后單擊鼠標右鍵選擇git bash即可。

tip:
git是分布式版本控制工具,所以我們需要填寫用戶名和郵箱作為一個標志。
C:\Users\lixi19861125路徑下.gitconfig文件,這個我文件里面可以看到--global屬性,所有的git項目都會公用這個屬性

git config --global user.name "lixi"
git config --global user.email "lixi@1000phone.com"

7 創建版本庫

7.1 第一步 選中一個的git工程的目錄

7.2 第二步 輸入命令初始化版本庫

git init

8 git命令行操作

8.1 查看文件狀態

git status

8.2 將文件/目錄添加到臨時暫存區

git add 文件名/目錄名
e.g.
git add src/HelloWorld.java

tip:
以上通過git add命令的文件會提交到暫存區中,但是這里的文件其實沒有真正的提交。使用下一個命令才是把他提交到一個統一的版本文件

8.3 提交文件

git commit

e.g.
git commit -m "提交提示信息"

tip:
每當有文件被修改/添加/刪除的時候,都需要重新git add,然后再git commit

8.4 查看日志

git log : 查看歷史記錄

e.g.
$ git log


commit 29df21765ff605e8f204417f9251c410f88563b0
Author: lixi <lixi@1000phone.com>
Date:   Mon Mar 9 15:10:55 2020 +0800

    update 002

commit 76551c4baf66d295d26a2798fe5ff8ca3e827f4a
Author: lixi <lixi@1000phone.com>
Date:   Mon Mar 9 15:04:25 2020 +0800

    create 001

e.g.
$ git log --pretty=oneline
29df21765ff605e8f204417f9251c410f88563b0 update 002
76551c4baf66d295d26a2798fe5ff8ca3e827f4a create 001

8.5 回退歷史

8.5.1 創建一個文件 : a.txt

aaaaaaaaaaaaa
bbbbbbbbbbbbb
ccccccccccccc
ddddddddddddd

tip:
添加到暫存區然后提交

8.5.2 修改這個文件:a.txt

aaaaaaaaaaaaa
ccccccccccccc
eeeeeeeeeeeee

tip:
添加到暫存區然后提交

8.5.3 回退到上一次提交

git reset --hard HEAD^1

tip:
HEAD是一個指針,永遠指向最新版本,^1表示讓HEAD指針指向上一個版本

--hard 硬:這種回顧不但將版本回顧,還會將指定的數據抹除。不會保留任何你修改的記錄
--soft 軟:回退版本,也會保留改動的記錄。會自動幫你git add。
--mix 折中:回退版本,並會保留所有改動記錄。但是不會自動幫你git add

git reset : 修改HEAD的位置

這種方式可以恢復到之前某個提交的版本,但是恢復之后,當前版本之后的版本將不復存在。

8.5.4 回退到多個版本

git reset --hard HEAD~2 #回退到2個版本之前的版本

8.5.5 版本穿越

git reflog # 查看歷史記錄的版本號

e.g.
$ git reflog
29df217 HEAD@{0}: reset: moving to HEAD~2
8938885 HEAD@{1}: reset: moving to HEAD^1
7c77ab0 HEAD@{2}: commit: update 004
8938885 HEAD@{3}: commit: update 003
c07b56d HEAD@{4}: commit: update 003
29df217 HEAD@{5}: commit: update 002
76551c4 HEAD@{6}: commit (initial): create 001

e.g.
git reset --hard 7c77ab0

8.6 還原文件

git checkout 文件名

e.g.
vi src/b.txt
111111111
222222222
333333333
444444444

git add src/b.txt
git commit -m "update 005"

修改 b.txt
111111111
222222222
333333333
444444444
555555555
666666666

git checkout src/b.txt

8.7 刪除文件

1. 先刪除文件
2. git add
3. git commit

9 工作區、暫存區、本地庫

9.1 概念

工作區(Working Directory) : 電腦的本地磁盤目錄
本地庫(Repostory) : 工作區中有一個隱藏目錄.git,它就是git的本地版本庫
暫存區(stage) : 一般存儲再git目錄下的index文件,所以我們把暫存區有時候也叫做索引。

9.2 關系圖

10 分支

10.1 分支概念

項目已經上線了,但是產品經理又提出了新的需求,評估實現這個新功能需要2個月的時就按。但是項目還是需要同時上線運行,時不時修改bug,如何管理這幾個版本。

10.2 查看分支

git branch -v

e.g.
$ git branch -v
* master b94d274 update 006

10.3 創建分支

git branch 分支名稱
e.g.
$ git branch common
$ git branch -v
  common b94d274 update 006
* master b94d274 update 006

10.4 切換分支

git checkout 分支名

e.g.
git checkout common

10.5 合並分支(將其他分支合並到主分支:master)

1. 切換到主分支
git checkout master

2. 合並
git merge 分支名
e.g.

git merge common

11 沖突

11.1 什么是沖突

沖突一般是指同一個文件同一位置的代碼,再兩種版本的倉庫合並時,版本的管理軟件無法判斷到底應該保留哪一個版本,因此會提示該文件發生沖突,沖突一般都需要程序員手動解決。

11.2 在分支合並的時候解決沖突

1. 先在master分支上創建一個luosenhan.txt
2. 再在common分支上創建一個luosenhan.txt
3. 分別提交
4. 最后合並

e.g.
$ git merge common
Auto-merging src/luosenhan.txt
CONFLICT (add/add): Merge conflict in src/luosenhan.txt
Automatic merge failed; fix conflicts and then commit the result.

5. 查看沖突
git diff

$ git diff
diff --cc src/luosenhan.txt
index 7d8fefb,9f9848c..0000000
--- a/src/luosenhan.txt
+++ b/src/luosenhan.txt
@@@ -1,3 -1,2 +1,8 @@@
++<<<<<<< HEAD
 +11111111111111111
 +22222222222222222
- 33333333333333333
++33333333333333333
++=======
+ 222222222222222
 -333333333333333
++333333333333333
++>>>>>>> common
6. 解決沖突:切換到哪個目錄,然后查看文件
7. 再重新add和commit即可

二 GitHub(重點)

1 什么是github?

github是一個git項目托管網站,主要提供基於git的版本托管服務。
網址:https://github.com

注冊賬號的注意事項
- 不要使用163郵箱,有可能收不到校驗郵件。
- 較長時間不適用,有可能被github凍結賬號。
- 如果凍結賬號,請登錄https://github.com/contact恢復申請

2 GitHub操作

2.1 建立本地倉庫

1. 創建guojing和huangrong子目錄
2. 搭建代碼庫
git init
git config user.name "huangrong"
git config user.email "lixi19861125@qq.com"

3. 提交代碼
git add
git commit

2.2 注冊github賬號並登錄

2.3 創建github的項目庫

2.4 推送代碼到git

  • 增加遠程地址
git remote add <遠端代號> <遠端地址>
<遠端代號> :指遠程鏈接的代號,一般直接用origin做代號,也可以自定義 
<遠端地址> :指遠程鏈接的url

e.g.
git remote add origin https://github.com/rocklee86/kongfu.git
  • 推送到遠程庫
git push <遠端代號> <分支名>

e.g.
git push origin master

2.5 下載GitHub上的庫

  • 從GitHub上克隆(guojing)
git clone <遠端地址> <項目的目錄名>
<項目的目錄名> : 指為克隆的項目在本地新建的一個目錄名,可以不填,默認就是使用github倉庫名

e.g.
git clone https://github.com/rocklee86/kongfu.git kongfu
  • 修改文件
git push origin master

1. 問題1:
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

解決方案如下圖:

當黃蓉邀請了郭靖之后,郭靖用戶的郵箱會接受到一份邀請的郵件,點擊查看邀請會來到如下圖:

再次提交代碼:
git push origin master

2.6 huangrong用戶同步更新代碼

  • 從github更新項目
git pull <遠程代碼> <遠程分支>

e.g.
git pull origin master

3 合作沖突

3.1 什么是協作沖突

	在上傳或者同步代碼時,由於你和他人都修改了同一文件的同一位置的代碼,版本管理工具無法判斷究竟以誰為准,這就會報告沖突,需要程序員手動解決。

3.2 解決方式

1. 修改合並
2. git add
3. git commit

1. 在huangrong用戶修改打狗棒法.txt並提交
2. 在guojing用戶修改打狗棒法.txt並提交

4 第三方團隊參與場景

4.1 畫圖分析

4.2 操作測試

1. 使用所謂的穆念慈用戶(lixi86)fork出黃蓉對應的庫
2. 使用穆念慈用戶修改fork出來的某個文件
3. 然后查看如圖
4. 操作完成之后,項目管理者(黃蓉)就會收到一封同步請求的郵件

三 GitLab

5.1 什么是gitlab

"自架私服版"的github
官網:https://about.gitlab.com
下載網址:https://about.gitlab.com/install

5.2 安裝

1. 下載依賴
yum install -y curl policycoreutils-python openssh-server cronie lokkit http ssh 

2. 安裝
rpm -ivh /opt/software/gitlab-ce-11.9.0-ce.0.el6.x86_64.rpm

3. 預配gitlab的組件
gitlab-ctl reconfigure

4. 修改gitlab的配置url
vi /etc/gitlab/gitlab.rb

external_url 'http://gitlab.1000phone.com'

vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

host: gitlab.1000phone.com
port: 80
https: false

5. 修改windows的hosts
192.168.49.103 slave3 gitlab.1000phone.com

5.3 啟動gitlab

gitlab-ctl start/stop/restart

四 idea整合git

6.1 在github上創建一個庫

6.2 打開idea,選擇setting

settings ---> Version Control ---> Git

6.3 再選擇github

1. 需要現在github上生成授權令牌(token)
https://github.com/settings/tokens/new

2. 然后再將生成的令牌填入到idea的githup處即可
2.1 file ---> New ---> Project from Version Control ---> Git

3. 如何想要上傳的文件
右鍵 ---> Git ---> add/commit

4. repostory ---> clone/push/pull

5. 如果有沖突會自動提示,選擇merge


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM