這一篇文章是對上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要對上一篇文章有所了解,當然直接往下看也可以,其中也有一些提到一些基礎的操作。
本文以配置github.com賬號和git.oschina.net賬號來逐步演示在Windows環境下配置Git多賬號支持即在同一個電腦上管理多個ssh-key,對git多一分了解。
備注:這篇文章所有執行命令的地方都是在管理員模式下進行,即打開cmd,Git Bash客戶端用管理員身份運行程序。
執行命令 ssh-keygen -t rsa -C email 創建github對應的sshkey,命名為id_rsa_github,密碼 123456
ssh-keygen -t rsa -C 774232122@qq.com
執行命令ssh-keygen -t rsa -C email創建github對應的sshkey,命名為id_rsa_oschina,密碼 123456
ssh-keygen -t rsa -C 774232122@qq.com
除了秘鑰文件之外,config文件是后面的步驟中手動生產的,known_hosts文件是后續自動生產的
GitHub添加SSH key的方式如下圖所示:
git.oschina.net添加SSH key的方式如下圖所示:
每個賬號單獨配置一個Host,每個Host要取一個別名,每個Host主要配置HostName和IdentityFile兩個屬性即可
Host的名字可以取為自己喜歡的名字,不過這個會影響git相關命令,例如:
Host mygithub 這樣定義的話,命令如下,即git@后面緊跟的名字改為mygithub
git clone git@mygithub:PopFisher/AndroidRotateAnim.git
HostName 這個是真實的域名地址
IdentityFile 這里是id_rsa的地址
PreferredAuthentications 配置登錄時用什么權限認證--可設為publickey,password publickey,keyboard-interactive等
User 配置使用用戶名
config文件配置如下:
# 配置github.com Host github.com HostName github.com IdentityFile C:\\Users\\popfisher\\.ssh\\id_rsa_github PreferredAuthentications publickey User username1 # 配置git.oschina.net Host git.oschina.net HostName git.oschina.net IdentityFile C:\\Users\\popfisher\\.ssh\\id_rsa_oschina PreferredAuthentications publickey User username2
clone github上的項目AndroidRotateAnim
打開github上AndroidRotateAnim項目,復制其對應的clone命令入下圖所示
執行clone命令如下:
clone oschina.net上的項目AndroidDevTools
打開git.oschina.net上AndroidDevTools項目,復制其對應的clone命令入下圖所示
執行clone命令如下:
在使用git的過程中,一般都只關注單賬號的情況嗎,工作中的配置也是直接由自己的上級發一個配置文檔之類的東西,然后對著搞一遍就行了,可是當自己真正有這個需求的時候,突然發現束手無策。我自己當時也屬于這個情況,有一天在家里,突然發現自己需要一臺電腦支持多個SSH key的時候才發現自己不知道怎么下手了,于是就下定決心自己動手研究一下。對于技術,還是要親自動手實踐,實踐出來的東西才能形成自己的真理,才不那么容易忘記。
這篇文章是我基于Win10平臺上的實踐,由于知識有限,可能還是沒有總結得很完整,也可能在其他平臺上會遇到一些其他的問題,沒有時間去研究了,如果讀者有遇到什么問題,歡迎留言討論,共同學習。
1.1 介紹
前面我們學習了GitLab環境的安裝部署方法,知道了Git這個版本控制軟件的作用和基本使用方法。今天福哥要帶著大家學習如何在Windows環境下使用Git客戶端去操作我們的項目文件,這個是每一個搞技術的人員都需要學習的知識,請大家打起精神來跟著福哥一起學習吧~
今天的內容有點多,大家可以收藏起來作為Git的使用手冊!
除了今天福哥教給大家的知識之外,更多的是需要大家在日常的項目開發當中熟練掌握Git的使用技巧!
1.2 環境
操作系統 | Windows 10 專業版 64位 |
Git客戶端軟件 | 2.41.0 |
Git服務器軟件 | gitlab/gitlab-ce:12.1.3-ce.0 |
Git服務器IP | 192.168.168.68 |
Git服務器端口 | 1022 |
2.1 下載
Git官網下載地址,我們下載標準安裝包的64位版本。
https://git-scm.com/download/win
現在這個鏈接改成github的了,下載速度真的太慢了!
2.2 安裝
啟動安裝包,UAC確認一下!
一路“next”安裝下去,全部選默認選項即可~
Git開始安裝了!
不用看發行信息,去掉“View Release Notes”選項,點擊“Finish”按鈕完成安裝!
3.1 建立目錄
打開資源管理器,選擇一個分區,在里面建立目錄tongfu.net\web。
3.2 打開Git Bash
在web目錄的空白處單機右鍵選擇“Open Git Bash here”打開Git的Bash終端窗口。后面的所有對git的操作都是在這里通過輸入命令行完成的哦~
3.3 SSH授權
先把安裝好的Git與前面搭建的GitLab配置起來,這樣在使用git操作gitlab的項目的時候就不用輸入密碼了!
在終端里輸入如下命令創建ed25519類型的密鑰!
ssh-keygen.exe -t ed25519 -b 4096
把公鑰內容復制出來。
cat /c/Users/tongfu/.ssh/id_ed25519.pub
把公鑰添加到gitlab的SSH密鑰里(這個上一節有講,不會的童鞋可以翻回去看看)。
添加好了~
現在有三個SSH密鑰了,一個是TFCentOS7x64服務器的,一個是TFCentOS7x64Node1服務器的,還有一個是福哥的Windows10的。
3.4 配置config
用來配置git相關參數,必須要設置的就是用戶名稱和用戶email。
git config --global user.email "git-client@tongfu.net"
git config --global user.name "git client"
3.5 克隆Clone
克隆就是把git服務器上面的一個項目的全部文件都復制一份到自己的電腦上面的操作.
現在福哥要把tfphp項目克隆一份到Windows10的桌面上,在Bash里面輸入命令克隆tfphp項目。
git clone ssh://git@192.168.168.68:1022/root/tfphp.git
3.6 拉取Pull/Fetch
拉取就是從git服務器上下載項目最新的文件覆蓋到本地項目里的操作。
無論是pull還是fetch都要在項目根目錄操作才行,所以福哥要先切換到tfphp項目根目錄下面。
cd tfphp/
ls
3.6.1 Pull
使用pull拉取最新的文件,如果遇到了沖突則會自動合并代碼,合并不了就會提示要求人工操作。
git pull
3.6.2 Fetch
使用fetch拉取最新的文件,如果遇到了沖突就會提示要求人工操作。
git fetch
3.7 添加Add
命令add用來將需要提交到項目里面的新增文件或者改動文件加入到待提交隊列,理論上git可以將任何文件存入項目里面。
福哥在tfphp項目的html目錄下面創建了一個htm文件,一個css文件和一個js文件。
使用add命令將css、js目錄和test.htm網頁添加到tfphp項目里。
git add html/css/
git add html/js/
git add html/test.htm
使用status命令查看有哪些文件有變化。
git status
3.8 提交Commit
命令commit用來將add命令添加的待提交隊列的內容提交到本地項目里。commit命令可以將一個階段的改動內容存成一個版本,這個版本就是項目的一個版本。
git commit -m "添加了test.htm網頁和相關資源"
3.9 日志Log
福哥剛剛提交了一個版本到項目tfphp,那么項目tfphp里面有多少版本呢?怎么查看呢?
git log -v
3.10 撤銷Revert
命令revert用來將某一次的提交所作的修改撤銷掉。如果撤銷會造成沖突則需要人工參與合并操作。
福哥使用revert命令把剛剛的提交給撤銷回來。撤銷操作需要commit ID,可以通過log命令查看。
git revert 4fb8ed332084d6787f3b8dc13f63240168b3eba0
撤銷操作還需要提供提交信息,這是默認的提交信息,可以不修改直接“:wq”保存退出。
保存退出后撤銷操作就完成了。
再次查看日志,可以看到剛剛所作的revert撤銷操作。
3.11 重置Reset
命令reset也是用來將某一次的提交所作的修改撤銷掉。
reset和revert的區別在于,如果目標版本是一個歷史版本,那么reset會把目標版本之后的全部版本清除掉,而revert則會保留這些版本信息。
為了測試這個,福哥就創建了幾個改動。
git add html/test.htm
git commit -m "add test.htm"
git add html/css/test.css
git commit -m "add test.css"
git add html/js/test.js
git commit -m "add test.js"
現在有了三個提交記錄,也就是三個版本。
福哥要reset到“add test.htm”這個版本,也就是說后面的兩個版本也會被撤銷掉,而且commit記錄也會被丟掉。
git reset 9562550c95b0819fb3536b2f0068588c9722d58e --hard
可以看到test.css和test.js都沒了,連目錄也沒有了。
相關的commit信息也沒了。
3.12 推送Push
剛剛的所有改動都只是在Windows10上面完成的,gitlab服務器上還是沒有變化的,要想同步到gitlab服務器上面就需要用到push命令了。
福哥現在使用push命令把剛剛所做的所有改動都推送到遠程的gitlab上面去。
git push
再去gitlab上面看看變化,可以發現html目錄有了“add test.htm”這個版本信息了。
3.13 分支Branch
分支是git非常重要的功能之一,每一個開發人員每天都離不開對項目分支的操作。
分支可以理解為項目的一次任務,每當項目有一次改動任務的時候都應該從主分支master上面切出來一個分支,然后在這個切出來的分支上面進行修改,修改完畢后再把這個分支和主分支master進行合并。這樣做可以最大限度地保證主分支master的穩定,還可以避免多人協同工作時候產生的沖突問題。
分支除了用來協同工作之外,也可以作為一個支線版本來使用。比如我們的某個客戶想要定制一些功能,這些功能不方便合并到主分支master上面,這個時候就可以為客戶單獨開辟一個持久的分支,專門為這個客戶進行升級。
分支還可以用來實現持續集成,就是說可以設計一個流水線,當某個分支被合并后就自動觸發構建任務,自動重新部署遠程服務。
3.13.1 查看分支
查看有哪些分支,當前處在哪個分支下。
git branch
3.13.2 創建分支
因為當前是master分支,所以我們是基于master分支創建tfdev230927分支。
git branch tfdev230927
git branch
3.13.3 切換分支
新分支有了但是當前還是master分支,切換到tfdev230927分支。
git switch tfdev230927
git branch
3.13.4 合并分支
先切換到master分支,然后將tfdev230927分支合并到master分支。
因為我們在tfdev230927分支什么都沒改,所以也沒有什么可合并的內容。
git switch master
git merge tfdev230927 --squash
3.13.5 刪除分支
任務做完了,現在可以刪除tfdev230927分支了。
刪除之前先切到其他分支上,當前是不能刪除的。
git switch master
git branch --delete tfdev230927
git branch
3.13.6 提交分支
我們創建的分支其實只是在本地,如果要保存到git服務器上,還需要使用push命令提交上去。
首次提交分支到git服務器需要--set-upstream參數,后面就不用了。
福哥先創建了一個新的分支tfdev230927b,再把它提交上去。
git branch tfdev230927b
git push --set-upstream origin tfdev230927b
去到gitlab上面可以看到剛剛創建的分支tfdev230927b。
3.13.7 刪除遠程分支
如何刪除git服務器上的分支?還是使用push命令。
福哥現在把剛剛提交到git服務器上的分支tfdev230927b刪除掉。
git push origin -d tfdev230927b
去到gitlab上看一下,tfdev230927b分支也沒有了。
注意:刪除遠程分支不代表本地分支也會被刪除!!!
3.14 標簽Tag
標簽顧名思義就是給項目打一個版本號,這個版本基于某一次的commit版本。大多數的情況下標簽是用來標志著項目的發行版本。通常用來完成持續集成,每次給項目打一個標簽就會觸發自動構建,自動完成遠程服務的重構。
3.14.1 查看標簽
現在還沒有任何標簽。
git tag
3.14.2 創建標簽
創建一個標簽v1.0.0。
git tag v1.0.0
git tag
3.14.3 刪除標簽
刪除這個標簽。
git tag --delete v1.0.0
git tag
3.14.4 提交標簽
提交標簽和提交分支語法類似。
git tag v1.0.1
git tag
git push origin v1.0.1
去到gitlab上面看一看,在標簽里面可以看到剛剛提交的v1.0.1標簽。
提交所有標簽可以使用這個命令。再參創建兩個標簽v1.0.2和v1.0.3,一起提交上去。
git tag v1.0.2
git tag v1.0.3
git tag
git push origin --tags
3.14.5 刪除遠程標簽
刪除遠程標簽和刪除遠程分支語法也差不多。
git push origin -d v1.0.1
去到gitlab上面看一下,標簽里面已經沒有v1.0.1這個標簽了。
注意:刪除遠程標簽不代表本地標簽也會被刪除!!!
3.15 分支和標簽重名
看到這里大家可能會想,既然分支和標簽推送到git服務器的語法是一樣的,那么如果分支和標簽有重名的情況的話,推送到git服務器的是分支還是標簽呢?
這個問題福哥幫大家試驗了一下,會有報錯的~
git branch v1.0.3
git branch
git push origin v1.0.3
git branch --delete v1.0.3
反過來也是不行的!
git tag tfdev230927b
git tag
git push origin tfdev230927b
git tag --delete tfdev230927b
今天我們學習了在Windows上安裝Git客戶端,已經使用Git客戶端操作項目文件的的各種操作的方法。其實除了這種命令行方式的Git客戶端之外,還有很多圖形化的Git客戶端軟件,使用圖形化的Git客戶端可以更加高效地管理我們的git項目,管理我們的服務。
后面福哥會給大家講解如何使用小烏龜Git(TortoiseGit)圖形化Git客戶端來管理我們的git項目,敬請期待~
https://m.tongfu.net/home/35/blog/514016.html