在互聯(lián)網(wǎng)市場(chǎng)上,幾乎每個(gè)行業(yè)都有一堆冤家對(duì)頭,比如說(shuō)中國(guó)人熟悉的阿里和騰訊,蘋(píng)果和三星等等,其中有一對(duì)可以說(shuō)是對(duì)抗了很多年的,這就是大名鼎鼎的微軟和谷歌了,作為世界兩大萬(wàn)億巨頭,微軟和谷歌都有自身的操作系統(tǒng),兩者之間相愛(ài)相殺多年,然而就在這對(duì)歡喜冤家之間,微軟最近卻和谷歌握手言和了,最經(jīng)典的一個(gè)案例是一直封閉的Windows開(kāi)始兼容安卓了?
一、Win10要兼容安卓了?
根據(jù)太平洋電腦網(wǎng)的報(bào)道,最近,傳出了令人在意的消息:微軟正在認(rèn)真考慮,讓W(xué)indows 10在2021年能夠兼容安卓App!Win10將兼容安卓App的消息,是有可靠來(lái)源的。根據(jù)Windows Central的報(bào)道,該項(xiàng)目在微軟內(nèi)部被稱之為L(zhǎng)atte,該項(xiàng)目將允許應(yīng)用程序開(kāi)發(fā)人員將他們的 Android 應(yīng)用程序帶到 Windows 10,幾乎不需要修改代碼。Win10將會(huì)內(nèi)置安卓子系統(tǒng),以實(shí)現(xiàn)安卓App的兼容。
從技術(shù)上來(lái)看,Win10兼容安卓App,是可行的。如果你之前關(guān)注過(guò)WP/Win10M系統(tǒng),那么應(yīng)該知道微軟曾經(jīng)在Win10M中實(shí)現(xiàn)過(guò)安卓模擬器(Project Astoria),能夠在WP手機(jī)中運(yùn)行安卓App。只不過(guò)由于效率等原因,并沒(méi)有將相應(yīng)版本正式推送給用戶。但這也說(shuō)明,微軟其實(shí)早就在Windows系統(tǒng)中完成了對(duì)安卓App的兼容,隨著硬件的進(jìn)步,性能和續(xù)航的問(wèn)題也將大為改善。
其實(shí),當(dāng)我們仔細(xì)研究這個(gè)消息的時(shí)候就會(huì)發(fā)現(xiàn),這個(gè)新聞其實(shí)早就在流傳了,去年的12月13日IT之家就報(bào)道,外媒 Windows Latest 報(bào)道,作為 “Project Latte”項(xiàng)目的一部分,運(yùn)行 Windows 10 預(yù)覽版的 Windows Insiders 可以獲得原生運(yùn)行 Android 應(yīng)用的功能。根據(jù)在一份私人文件中發(fā)現(xiàn)的參考資料 , 傳聞中的項(xiàng)目顯然是真實(shí)的,微軟希望在明年下半年發(fā)布 Windows 10 原生運(yùn)行安卓。
IT之家曾報(bào)道,微軟之前在 Windows 10 Mobile(Windows Phone 系列)中啟用了對(duì) Android 應(yīng)用的支持。當(dāng)時(shí),這一舉措的代號(hào)為 “Astoria”,它的效果比預(yù)期的要好,因?yàn)橛脩艨梢栽?Windows Phone 上運(yùn)行大多數(shù) Android 應(yīng)用。
不過(guò)根據(jù)科技美學(xué)的報(bào)道,如果安卓APP想要直接在Win 10上運(yùn)行的的話,Win10兼容安卓App的項(xiàng)目Latte,是不能使用GMS服務(wù)的,而且Google從未授權(quán)非安卓系統(tǒng),使用GMS,所以如果真要讓安卓APP上Windows的話,還需要自建API來(lái)代替GMS。與此同時(shí),微軟也在積極地讓正在開(kāi)發(fā)的Win 10X能夠擁有登陸更多平臺(tái)的能力。
從這些消息來(lái)看,基本上可以確定的是Windows逐漸打破自己的封閉將會(huì)是大概率事件,為啥一向封閉的微軟會(huì)選擇低頭,微軟這樣的舉動(dòng)到底意味著什么?
二、為啥微軟要向谷歌低頭?
說(shuō)實(shí)在,微軟做出這樣的舉動(dòng)其實(shí)一點(diǎn)都不讓人意外,為什么這么說(shuō)呢?我們可以分成幾個(gè)方面來(lái)看:
首先,做移動(dòng)市場(chǎng)是微軟永遠(yuǎn)的夢(mèng)。如果你要問(wèn)第一款移動(dòng)智能操作系統(tǒng)是哪一個(gè)?肯定很多人都會(huì)回答錯(cuò)誤,既不是喬布斯給大家?guī)?lái)的iOS,也不是谷歌的安卓,而是微軟的Windows CE,這個(gè)操作系統(tǒng)早在1996年就在開(kāi)發(fā)了,當(dāng)時(shí)連摩托羅拉還在做模擬信號(hào)的大哥大,智能手機(jī)連影子都沒(méi)有的時(shí)候,微軟就開(kāi)始在做移動(dòng)操作系統(tǒng)了,不過(guò)WindowsCE是給掌上電腦使用的,可以說(shuō)是微軟的Windows操作系統(tǒng)的移動(dòng)版本,不過(guò)眾所周知,掌上電腦并沒(méi)能實(shí)現(xiàn)普及,一直到21世紀(jì)喬布斯給大家?guī)?lái)了iPhone之后,智能手機(jī)才開(kāi)始大規(guī)模普及。在智能手機(jī)普及的時(shí)候,微軟是不甘落后的,推出了Windows mobile系統(tǒng),之后又在此基礎(chǔ)上推出了WP系統(tǒng),甚至為此收購(gòu)了著名手機(jī)巨頭諾基亞,然而諾基亞和微軟的聯(lián)姻并沒(méi)能幫助微軟實(shí)現(xiàn)跨越,反而被對(duì)手越拉越遠(yuǎn),我曾經(jīng)使用過(guò)相當(dāng)長(zhǎng)一段時(shí)間的WP操作系統(tǒng),甚至于都用過(guò)在palm上的Windows CE,客觀的說(shuō),微軟的操作系統(tǒng)用戶體驗(yàn)還是相當(dāng)不錯(cuò),不過(guò)正所謂成也蕭何敗也蕭何,Windows的電腦系統(tǒng)過(guò)于成功讓微軟失去了自我革命的動(dòng)力,無(wú)論是Windows CE還是Windows Mobile亦或WP,其實(shí)都沒(méi)能實(shí)現(xiàn)推廣,而為了后期推廣所研發(fā).NET跨平臺(tái)開(kāi)發(fā)技術(shù),推行UWP這樣的多平臺(tái)通用應(yīng)用等等,這些都沒(méi)能實(shí)現(xiàn)突破,最終成為了Win10周邊的附庸,在這樣的情況下微軟如果要實(shí)現(xiàn)移動(dòng)端的突破還是必須要有更多的東西出現(xiàn)。
其次,微軟要做移動(dòng)該咋辦?既然微軟自己的移動(dòng)操作系統(tǒng)沒(méi)辦法實(shí)現(xiàn)突破,那么微軟的選擇無(wú)疑就變成了兩個(gè),一個(gè)是在別的平臺(tái)上組建自己的產(chǎn)品體系,這個(gè)邏輯就有點(diǎn)類似于微信的小程序邏輯,我不做平臺(tái),但是我可以在你的平臺(tái)上不斷發(fā)展成長(zhǎng),這其實(shí)就是微軟自己一直在做的事情,微軟曾經(jīng)一度被吐槽說(shuō),微軟在iOS平臺(tái)和安卓平臺(tái)上開(kāi)發(fā)應(yīng)用比自己的WP做產(chǎn)品還上心,你只要隨便去各個(gè)APP store看看就會(huì)發(fā)現(xiàn),微軟幾乎成為了各大平臺(tái)的“最佳開(kāi)發(fā)者”,在iOS、安卓乃至最為直接競(jìng)爭(zhēng)的macOS平臺(tái)上,微軟都開(kāi)發(fā)了大量高質(zhì)量的軟件應(yīng)用,這就是微軟的邏輯。另一個(gè)就是借助開(kāi)源平臺(tái)的優(yōu)勢(shì),把開(kāi)源的平臺(tái)容納到自己的體系之中,其實(shí)當(dāng)前微軟做的就是這樣的事情,既然我不擅長(zhǎng)做這個(gè),為啥我不把你給融合了,這樣你的開(kāi)發(fā)者也就意味著可以給我開(kāi)發(fā)應(yīng)用了,這樣的好事何樂(lè)而不為呢?其實(shí)這個(gè)邏輯就像阿里云OS和鴻蒙系統(tǒng)都可以兼容安卓應(yīng)用,其實(shí)就是類似的邏輯,核心還是為了復(fù)用安卓的生態(tài)系統(tǒng),來(lái)給自己服務(wù)。
第三,微軟向安卓低頭是認(rèn)慫了嗎?其實(shí),我們可以認(rèn)為微軟并沒(méi)有真正向安卓低頭,這是一個(gè)化敵為友的做法,本來(lái)微軟和谷歌的競(jìng)爭(zhēng)其實(shí)一直都是競(jìng)合的關(guān)系,一方面,在云計(jì)算層面,微軟云和谷歌云幾乎是針?shù)h相對(duì),不過(guò)由于市場(chǎng)上還有亞馬遜云這樣的一個(gè)巨頭存在,幾方之間誰(shuí)也奈何不了誰(shuí),所以這樣的針?shù)h相對(duì)讓人不覺(jué)得什么,另一方面,微軟和谷歌在其他層面的競(jìng)爭(zhēng)并沒(méi)有那么激烈,Windows兼容安卓其實(shí)就是借助安卓開(kāi)源的特性,來(lái)推動(dòng)自身的發(fā)展,可以說(shuō)這又是合作層面的東西了。不過(guò),說(shuō)實(shí)在,微軟的兼容僅僅是一部分安卓而已,在安卓里面谷歌早就做好了設(shè)計(jì),安卓本身分為開(kāi)源的AOSP(Android Open Source Project)安卓開(kāi)源項(xiàng)目,以及閉源的GMS(Google Mobile Service)部分,Windows能夠兼容的僅僅是AOSP部分而已,GMS部分基本上沒(méi)有太多兼容的可能性,所以這樣的兼容僅僅是部分而已。
其實(shí),兼容谷歌已經(jīng)不是微軟第一次這么做了,在微軟一直做不起來(lái)的瀏覽器領(lǐng)域,微軟早就放棄了扶不起來(lái)的IE選擇Edge瀏覽器放棄了自研內(nèi)核轉(zhuǎn)用Chromium,獲得了完全兼容Chrome擴(kuò)展程序的能力,這樣使得很多用戶反而轉(zhuǎn)來(lái)支持Edge了,誰(shuí)能保證微軟此次不是故技重施呢?
1.1 介紹
前面我們學(xué)習(xí)了GitLab環(huán)境的安裝部署方法,知道了Git這個(gè)版本控制軟件的作用和基本使用方法。今天福哥要帶著大家學(xué)習(xí)如何在Windows環(huán)境下使用Git客戶端去操作我們的項(xiàng)目文件,這個(gè)是每一個(gè)搞技術(shù)的人員都需要學(xué)習(xí)的知識(shí),請(qǐng)大家打起精神來(lái)跟著福哥一起學(xué)習(xí)吧~
今天的內(nèi)容有點(diǎn)多,大家可以收藏起來(lái)作為Git的使用手冊(cè)!
除了今天福哥教給大家的知識(shí)之外,更多的是需要大家在日常的項(xiàng)目開(kāi)發(fā)當(dāng)中熟練掌握Git的使用技巧!
1.2 環(huán)境
操作系統(tǒng) | Windows 10 專業(yè)版 64位 |
Git客戶端軟件 | 2.41.0 |
Git服務(wù)器軟件 | gitlab/gitlab-ce:12.1.3-ce.0 |
Git服務(wù)器IP | 192.168.168.68 |
Git服務(wù)器端口 | 1022 |
2.1 下載
Git官網(wǎng)下載地址,我們下載標(biāo)準(zhǔn)安裝包的64位版本。
https://git-scm.com/download/win
現(xiàn)在這個(gè)鏈接改成github的了,下載速度真的太慢了!
2.2 安裝
啟動(dòng)安裝包,UAC確認(rèn)一下!
一路“next”安裝下去,全部選默認(rèn)選項(xiàng)即可~
Git開(kāi)始安裝了!
不用看發(fā)行信息,去掉“View Release Notes”選項(xiàng),點(diǎn)擊“Finish”按鈕完成安裝!
3.1 建立目錄
打開(kāi)資源管理器,選擇一個(gè)分區(qū),在里面建立目錄tongfu.net\web。
3.2 打開(kāi)Git Bash
在web目錄的空白處單機(jī)右鍵選擇“Open Git Bash here”打開(kāi)Git的Bash終端窗口。后面的所有對(duì)git的操作都是在這里通過(guò)輸入命令行完成的哦~
3.3 SSH授權(quán)
先把安裝好的Git與前面搭建的GitLab配置起來(lái),這樣在使用git操作gitlab的項(xiàng)目的時(shí)候就不用輸入密碼了!
在終端里輸入如下命令創(chuàng)建ed25519類型的密鑰!
ssh-keygen.exe -t ed25519 -b 4096
把公鑰內(nèi)容復(fù)制出來(lái)。
cat /c/Users/tongfu/.ssh/id_ed25519.pub
把公鑰添加到gitlab的SSH密鑰里(這個(gè)上一節(jié)有講,不會(huì)的童鞋可以翻回去看看)。
添加好了~
現(xiàn)在有三個(gè)SSH密鑰了,一個(gè)是TFCentOS7x64服務(wù)器的,一個(gè)是TFCentOS7x64Node1服務(wù)器的,還有一個(gè)是福哥的Windows10的。
3.4 配置config
用來(lái)配置git相關(guān)參數(shù),必須要設(shè)置的就是用戶名稱和用戶email。
git config --global user.email "git-client@tongfu.net"
git config --global user.name "git client"
3.5 克隆Clone
克隆就是把git服務(wù)器上面的一個(gè)項(xiàng)目的全部文件都復(fù)制一份到自己的電腦上面的操作.
現(xiàn)在福哥要把tfphp項(xiàng)目克隆一份到Windows10的桌面上,在Bash里面輸入命令克隆tfphp項(xiàng)目。
git clone ssh://git@192.168.168.68:1022/root/tfphp.git
3.6 拉取Pull/Fetch
拉取就是從git服務(wù)器上下載項(xiàng)目最新的文件覆蓋到本地項(xiàng)目里的操作。
無(wú)論是pull還是fetch都要在項(xiàng)目根目錄操作才行,所以福哥要先切換到tfphp項(xiàng)目根目錄下面。
cd tfphp/
ls
3.6.1 Pull
使用pull拉取最新的文件,如果遇到了沖突則會(huì)自動(dòng)合并代碼,合并不了就會(huì)提示要求人工操作。
git pull
3.6.2 Fetch
使用fetch拉取最新的文件,如果遇到了沖突就會(huì)提示要求人工操作。
git fetch
3.7 添加Add
命令add用來(lái)將需要提交到項(xiàng)目里面的新增文件或者改動(dòng)文件加入到待提交隊(duì)列,理論上git可以將任何文件存入項(xiàng)目里面。
福哥在tfphp項(xiàng)目的html目錄下面創(chuàng)建了一個(gè)htm文件,一個(gè)css文件和一個(gè)js文件。
使用add命令將css、js目錄和test.htm網(wǎng)頁(yè)添加到tfphp項(xiàng)目里。
git add html/css/
git add html/js/
git add html/test.htm
使用status命令查看有哪些文件有變化。
git status
3.8 提交Commit
命令commit用來(lái)將add命令添加的待提交隊(duì)列的內(nèi)容提交到本地項(xiàng)目里。commit命令可以將一個(gè)階段的改動(dòng)內(nèi)容存成一個(gè)版本,這個(gè)版本就是項(xiàng)目的一個(gè)版本。
git commit -m "添加了test.htm網(wǎng)頁(yè)和相關(guān)資源"
3.9 日志Log
福哥剛剛提交了一個(gè)版本到項(xiàng)目tfphp,那么項(xiàng)目tfphp里面有多少版本呢?怎么查看呢?
git log -v
3.10 撤銷Revert
命令revert用來(lái)將某一次的提交所作的修改撤銷掉。如果撤銷會(huì)造成沖突則需要人工參與合并操作。
福哥使用revert命令把剛剛的提交給撤銷回來(lái)。撤銷操作需要commit ID,可以通過(guò)log命令查看。
git revert 4fb8ed332084d6787f3b8dc13f63240168b3eba0
撤銷操作還需要提供提交信息,這是默認(rèn)的提交信息,可以不修改直接“:wq”保存退出。
保存退出后撤銷操作就完成了。
再次查看日志,可以看到剛剛所作的revert撤銷操作。
3.11 重置Reset
命令reset也是用來(lái)將某一次的提交所作的修改撤銷掉。
reset和revert的區(qū)別在于,如果目標(biāo)版本是一個(gè)歷史版本,那么reset會(huì)把目標(biāo)版本之后的全部版本清除掉,而revert則會(huì)保留這些版本信息。
為了測(cè)試這個(gè),福哥就創(chuàng)建了幾個(gè)改動(dòng)。
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"
現(xiàn)在有了三個(gè)提交記錄,也就是三個(gè)版本。
福哥要reset到“add test.htm”這個(gè)版本,也就是說(shuō)后面的兩個(gè)版本也會(huì)被撤銷掉,而且commit記錄也會(huì)被丟掉。
git reset 9562550c95b0819fb3536b2f0068588c9722d58e --hard
可以看到test.css和test.js都沒(méi)了,連目錄也沒(méi)有了。
相關(guān)的commit信息也沒(méi)了。
3.12 推送Push
剛剛的所有改動(dòng)都只是在Windows10上面完成的,gitlab服務(wù)器上還是沒(méi)有變化的,要想同步到gitlab服務(wù)器上面就需要用到push命令了。
福哥現(xiàn)在使用push命令把剛剛所做的所有改動(dòng)都推送到遠(yuǎn)程的gitlab上面去。
git push
再去gitlab上面看看變化,可以發(fā)現(xiàn)html目錄有了“add test.htm”這個(gè)版本信息了。
3.13 分支Branch
分支是git非常重要的功能之一,每一個(gè)開(kāi)發(fā)人員每天都離不開(kāi)對(duì)項(xiàng)目分支的操作。
分支可以理解為項(xiàng)目的一次任務(wù),每當(dāng)項(xiàng)目有一次改動(dòng)任務(wù)的時(shí)候都應(yīng)該從主分支master上面切出來(lái)一個(gè)分支,然后在這個(gè)切出來(lái)的分支上面進(jìn)行修改,修改完畢后再把這個(gè)分支和主分支master進(jìn)行合并。這樣做可以最大限度地保證主分支master的穩(wěn)定,還可以避免多人協(xié)同工作時(shí)候產(chǎn)生的沖突問(wèn)題。
分支除了用來(lái)協(xié)同工作之外,也可以作為一個(gè)支線版本來(lái)使用。比如我們的某個(gè)客戶想要定制一些功能,這些功能不方便合并到主分支master上面,這個(gè)時(shí)候就可以為客戶單獨(dú)開(kāi)辟一個(gè)持久的分支,專門(mén)為這個(gè)客戶進(jìn)行升級(jí)。
分支還可以用來(lái)實(shí)現(xiàn)持續(xù)集成,就是說(shuō)可以設(shè)計(jì)一個(gè)流水線,當(dāng)某個(gè)分支被合并后就自動(dòng)觸發(fā)構(gòu)建任務(wù),自動(dòng)重新部署遠(yuǎn)程服務(wù)。
3.13.1 查看分支
查看有哪些分支,當(dāng)前處在哪個(gè)分支下。
git branch
3.13.2 創(chuàng)建分支
因?yàn)楫?dāng)前是master分支,所以我們是基于master分支創(chuàng)建tfdev230927分支。
git branch tfdev230927
git branch
3.13.3 切換分支
新分支有了但是當(dāng)前還是master分支,切換到tfdev230927分支。
git switch tfdev230927
git branch
3.13.4 合并分支
先切換到master分支,然后將tfdev230927分支合并到master分支。
因?yàn)槲覀冊(cè)趖fdev230927分支什么都沒(méi)改,所以也沒(méi)有什么可合并的內(nèi)容。
git switch master
git merge tfdev230927 --squash
3.13.5 刪除分支
任務(wù)做完了,現(xiàn)在可以刪除tfdev230927分支了。
刪除之前先切到其他分支上,當(dāng)前是不能刪除的。
git switch master
git branch --delete tfdev230927
git branch
3.13.6 提交分支
我們創(chuàng)建的分支其實(shí)只是在本地,如果要保存到git服務(wù)器上,還需要使用push命令提交上去。
首次提交分支到git服務(wù)器需要--set-upstream參數(shù),后面就不用了。
福哥先創(chuàng)建了一個(gè)新的分支tfdev230927b,再把它提交上去。
git branch tfdev230927b
git push --set-upstream origin tfdev230927b
去到gitlab上面可以看到剛剛創(chuàng)建的分支tfdev230927b。
3.13.7 刪除遠(yuǎn)程分支
如何刪除git服務(wù)器上的分支?還是使用push命令。
福哥現(xiàn)在把剛剛提交到git服務(wù)器上的分支tfdev230927b刪除掉。
git push origin -d tfdev230927b
去到gitlab上看一下,tfdev230927b分支也沒(méi)有了。
注意:刪除遠(yuǎn)程分支不代表本地分支也會(huì)被刪除!!!
3.14 標(biāo)簽Tag
標(biāo)簽顧名思義就是給項(xiàng)目打一個(gè)版本號(hào),這個(gè)版本基于某一次的commit版本。大多數(shù)的情況下標(biāo)簽是用來(lái)標(biāo)志著項(xiàng)目的發(fā)行版本。通常用來(lái)完成持續(xù)集成,每次給項(xiàng)目打一個(gè)標(biāo)簽就會(huì)觸發(fā)自動(dòng)構(gòu)建,自動(dòng)完成遠(yuǎn)程服務(wù)的重構(gòu)。
3.14.1 查看標(biāo)簽
現(xiàn)在還沒(méi)有任何標(biāo)簽。
git tag
3.14.2 創(chuàng)建標(biāo)簽
創(chuàng)建一個(gè)標(biāo)簽v1.0.0。
git tag v1.0.0
git tag
3.14.3 刪除標(biāo)簽
刪除這個(gè)標(biāo)簽。
git tag --delete v1.0.0
git tag
3.14.4 提交標(biāo)簽
提交標(biāo)簽和提交分支語(yǔ)法類似。
git tag v1.0.1
git tag
git push origin v1.0.1
去到gitlab上面看一看,在標(biāo)簽里面可以看到剛剛提交的v1.0.1標(biāo)簽。
提交所有標(biāo)簽可以使用這個(gè)命令。再參創(chuàng)建兩個(gè)標(biāo)簽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 刪除遠(yuǎn)程標(biāo)簽
刪除遠(yuǎn)程標(biāo)簽和刪除遠(yuǎn)程分支語(yǔ)法也差不多。
git push origin -d v1.0.1
去到gitlab上面看一下,標(biāo)簽里面已經(jīng)沒(méi)有v1.0.1這個(gè)標(biāo)簽了。
注意:刪除遠(yuǎn)程標(biāo)簽不代表本地標(biāo)簽也會(huì)被刪除!!!
3.15 分支和標(biāo)簽重名
看到這里大家可能會(huì)想,既然分支和標(biāo)簽推送到git服務(wù)器的語(yǔ)法是一樣的,那么如果分支和標(biāo)簽有重名的情況的話,推送到git服務(wù)器的是分支還是標(biāo)簽?zāi)兀?/span>
這個(gè)問(wèn)題福哥幫大家試驗(yàn)了一下,會(huì)有報(bào)錯(cuò)的~
git branch v1.0.3
git branch
git push origin v1.0.3
git branch --delete v1.0.3
反過(guò)來(lái)也是不行的!
git tag tfdev230927b
git tag
git push origin tfdev230927b
git tag --delete tfdev230927b
今天我們學(xué)習(xí)了在Windows上安裝Git客戶端,已經(jīng)使用Git客戶端操作項(xiàng)目文件的的各種操作的方法。其實(shí)除了這種命令行方式的Git客戶端之外,還有很多圖形化的Git客戶端軟件,使用圖形化的Git客戶端可以更加高效地管理我們的git項(xiàng)目,管理我們的服務(wù)。
后面福哥會(huì)給大家講解如何使用小烏龜Git(TortoiseGit)圖形化Git客戶端來(lái)管理我們的git項(xiàng)目,敬請(qǐng)期待~
https://m.tongfu.net/home/35/blog/514016.html