主頁 >  其他 > 一篇文章帶你了解熱門版本控制系統——Git

一篇文章帶你了解熱門版本控制系統——Git

2022-10-19 08:11:57 其他

一篇文章帶你了解熱門版本控制系統——Git

這篇文章會介紹到關于版本控制的相關知識以及版本控制神器Git

我們可能在生活中經常會使用GitHub網頁去查詢一些開源的資源或者專案,GitHub就是基于Git而產生的平臺

接下來讓我們來細細道來~

Git是一門非常簡單的技術,但在實際開發中占有很重要的地位,請務必了解掌握

版本控制

在介紹Git之前我們先來介紹一個名詞:版本控制

版本控制概念

我們在標題已經提到了Git的最大作用:版本控制

那么我們先來了解一下版本控制:

  • 版本控制是指對軟體開發程序中各種程式代碼、組態檔及說明檔案等檔案變更的管理,是軟體配置管理的核心思想之一,

通俗來說的話:

  • 版本控制用于在開發的程序中管理我們的檔案
  • 我們可以查看檔案、目錄或工程等內容的修改歷史,方便查看更改歷史記錄,備份以便恢復以前的版本,

例如我們所使用的產品有Version,版本常分為1.0,2.0...版本區分

但是我們所淘汰掉的版本是不會被直接拋棄洗掉,而是被像Git這樣的軟體所保存傳送到相關倉庫中

又或者我們的軟體開發之后,會由許多人進行開發修改

但是并非所有人的開發版本都會被保留使用,那些被淘汰的版本就會被像Git這樣的軟體所保存傳送到相關倉庫中

版本控制的優勢:

  • 實作跨區域多人協同開發
  • 追蹤和記載一個或者多個檔案的歷史記錄
  • 組織和保護你的源代碼和檔案
  • 統計作業量
  • 并行開發、提高開發效率
  • 跟蹤記錄整個軟體的開發程序
  • 減輕開發人員的負擔,節省時間,同時降低人為錯誤

總而言之版本控制在我們的實際開發中占有很重要的地位!

多人開發就必須要使用版本控制,否則無法控制專案的開發狀態

版本控制工具

我們目前常用的控制工具大致分為五種:

  • Git
  • SVN(Subversion)
  • CVS(Concurrent Versions System)
  • VSS(Micorosoft Visual SourceSafe)
  • TFS(Team Foundation Server)

其中SVN屬于版本控制的老大哥,但目前大部分公司已經不再使用

我們目前學的Git就屬于版本控制的主流工具,基本上大部分公司都在使用Git工具

版本控制分類

我們通常將版本控制分為三類:

  1. 本地版本控制
  • 概念:

本地版本控制通常用于個人開發,我們將我們自己的專案進行版本控制,在迭代后將原版本的專案原件保留下來

記錄檔案每次的更新,可以對每個版本做一個快照,或是記錄補丁檔案,如RCS,

  • 優缺點:

只能用于個人開發,多人開發在多臺計算機上,本地版本控制無法滿足

  1. **集中版本控制 **
  • 概念:

集中版本控制通常用于團隊開發,將一個電腦作為主機,將所有需要保存的專案資料都存放在該電腦上,實作集中控制

協同開發者從服務器上同步更新或上傳自己的修改,如SVN

  • 優缺點:

集中版本控制將所有資料保存在一臺電腦上,相當于單機存盤,保密性較高;但一旦計算機出現損壞,專案備份丟失,無法找回

  1. 分布式版本控制
  • 概念:

分布式版本控制通常用于團隊開發,所有人都保存有專案的所有資料,實作分布式控制

  • 優缺點:

保密性差,所有人都攜帶專案原始碼,具有一定安全隱患;但同時所有人都保存有原始碼,一臺電腦損壞并不影響專案的保存

Git和SVN的主要區別

我們在前面提及到了集中版本控制和分布式版本控制,實際上它們就分別對應著SVN和Git的控制方式

因而我們給出相關總結:

  • 資料存放地址:SVN存放在一臺計算機;Git存放在所有計算機
  • 專案開發方式:SVN需要聯網獲得主機上的專案,然后開發完后推送回原電腦;Git直接開發并比對研究即可
  • 優缺點:SVN安全性低但容易丟失;Git不易丟失但安全性差

Git環境配置

首先我們來講解Git的安裝以及環境配置等資訊

Linux常用指令

在正式開始Git教學之前,我們來復習一些Linux相關指令:

# 表示注釋

cd : 改變目錄,

cd . . : 回退到上一個目錄,直接cd進入默認目錄

pwd : 顯示當前所在的目錄路徑,

ls(ll) :  都是列出當前目錄中的所有檔案,只不過ll(兩個ll)列出的內容更為詳細,

touch : 新建一個檔案 如 touch index.js 就會在當前目錄下新建一個index.js檔案,

rm:  洗掉一個檔案, rm index.js 就會把index.js檔案洗掉,

mkdir :  新建一個目錄,就是新建一個檔案夾,

rm -r :  洗掉一個檔案夾, rm -r src 洗掉src目錄

mv : 移動檔案, mv index.html src index.html 是我們要移動的檔案, src 是目標檔案夾,

reset : 重新初始化終端/清屏,

clear : 清屏,

history : 查看命令歷史,

help : 幫助,

exit : 退出,

Git下載與打開

  1. 官網下載安裝(官網地址:https://git-scm.com/)

安裝基本只需要修改安裝路徑和默認打開方式,其他選項一律默認即可

  1. 啟動Git

我們啟動一般有三種方法:

  • Git Bash:Unix與Linux風格的命令列,使用最多,推薦最多
  • Git CMD:Windows風格的命令列
  • Git GUI:圖形界面的Git,不建議初學者使用,盡量先熟悉常用命令

我們通常選用Git Bash,采用Linux命令列來進行

下載Git之后,我們可以在檔案夾下直接點擊右鍵,可以看到出現有Git Bash的選項,點擊即可開啟

Git相關配置

我們在下面介紹一些Git的配置查看方法以及配置方法

首先我們需要知道查看Git配置的方法:

# 查看全部配置
git config -l

Git中存在有系統默認配置以及我們自己配置的資訊:

# 查看系統config
git config --system --list
  
# 查看當前用戶(global)配置
git config --global  --list

我們在Git中有必須設定的兩個屬性:

# 這是非常重要的,因為每次Git提交都會使用該資訊,

# 設定名稱
git config --global user.name "QiuLuo"  

# 設定郵箱
git config --global user.email [email protected]   

如果你希望在單個專案中修改name和email可以去掉--global,表示不在全域中配置

Git基本理論

我們下面將從Git的資料傳遞方面講起,是很重要的地方哦~

Git四個區域

我們的Git會將我們的資料保存下來,作為版本保留下來

而保留的地點通常被我們劃分為四個區域:

  • 作業目錄(Working Directory)
  • 暫存區(Stage/Index)
  • 資源庫(Repository或Git Directory)
  • 遠程倉庫(Remote Directory)

這四個區域的轉換方式如下圖所示:

接下來讓我們依次介紹這四個區域:

  • 作業目錄:第一層,主機存放代碼的區域
  • 暫存區:第二層,用于臨時存放你的改動,事實上它只是一個檔案,保存即將提交到檔案串列資訊
  • 資源庫:第三層,本地倉庫,安全存放資料的位置,保存有你提交到所有版本的資料,
  • 遠程倉庫:第四層,托管代碼的服務器

Git區域作業流程

在我們代碼書寫完畢后,我們通常會將資料存放到資源庫

具體的Git流程如下:

1、在作業目錄中添加、修改檔案 [Git狀態:已修改(modified)]

2、將需要進行版本管理的檔案放入暫存區域 [Git狀態:已暫存(staged)]

3、將暫存區域的檔案提交到git倉庫 [Git狀態:已提交(committed)]

Git專案搭建

接下來我們開始Git專案搭建的講解~

本地倉庫搭建

我們前面說到,我們Git會將作業目錄的專案傳遞到本地倉庫上

那么首先我們需要學會創建本地倉庫:

  1. 本地倉庫創建
# 在當前目錄新建一個Git代碼庫(注意:會在當前頁面下產生一個隱藏目錄.git,需要打開隱藏目錄標簽才可以查看到)
$ git init
  1. 遠程倉庫克隆
# 克隆一個專案和它的整個代碼歷史(版本資訊) 提供一個url:https://gitee.com/kuangstudy/openclass.git
$ git clone [url]  

Git常用六個方法

Git專案檔案的處理一共只有六個方法,用于控制四個區域的流動:

  • add:作業目錄 -> 暫存區
  • commit: 暫存區 -> 資源庫
  • push: 資源庫 -> 遠程倉庫
  • clone: 遠程倉庫 -> 資源庫
  • checkout: 資源庫 -> 作業目錄
  • pull: 遠程倉庫 -> 作業目錄

Git檔案操作

我們Git的專案操作實際上來說就是對檔案進行操作

下面我們來介紹Git操作檔案的一些方法以及檔案的四種常見狀態

Git檔案狀態

我們對檔案進行不同的操作或采用了不同的代碼之后,檔案的狀態會發生變化

我們通常將檔案的狀態分為四種:

  • Untracked : 未跟蹤, 此檔案在檔案夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add 狀態變為Staged.
  • Unmodify : 未修改, 即版本庫中的檔案快照內容與檔案夾中完全一致.
  • Modified : 檔案已修改, 僅僅是修改, 并沒有進行其他的操作.
  • Staged : 暫存狀態.

檔案之間的狀態轉換如下:

  • Untracked通過git add狀態變為Staged.
  • Unmodify如果被修改, 而變為Modified. 如果使用git rm移出版本庫, 則成為Untracked檔案
  • Modified通過git add可進入暫存staged狀態, 使用git checkout 則丟棄修改過, 回傳到unmodify狀態
  • Staged執行git commit則將修改同步到庫中, 這時庫中的檔案和本地檔案又變為一致, 檔案為Unmodify狀態.

Git檔案指令

Git提供了兩個方法可以查看單個檔案以及所有檔案的狀態:

# 查看指定檔案狀態
git status [filename]

# 查看所有檔案狀態
git status

同時Git也提供了兩個方法進行檔案型別的轉換:

# 添加所有檔案到暫存區
git add .        

# 提交暫存區中的內容到本地倉庫 -m 提交資訊
git commit -m "訊息內容"    

Git檔案忽略

在我們的實際開發中,有些檔案并不需要添加到本地倉庫中,因而Git為我們提供了一個配置類:

  • .gitignore配置類

該檔案存在以下規則:

  • 忽略檔案中的空行或以井號(#)開始的行將會被忽略,

  • 可以使用Linux通配符,例如:星號(*)代表任意多個字符,問號(?)代表一個字符

  • 如果名稱的最前面有一個感嘆號(!),表示例外規則,將不被忽略,

  • 如果名稱的最前面是一個路徑分隔符(/),表示要忽略的檔案在此目錄下,而子目錄中的檔案不忽略,

  • 如果名稱的最后面是一個路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非檔案(默認檔案或目錄都忽略),

我們給出相關示例:

#為注釋

#忽略所有 .txt結尾的檔案,這樣的話上傳就不會被選中!
*.txt      

#但lib.txt除外
!lib.txt     

#僅忽略專案根目錄下的TODO檔案,不包括其它目錄temp
/temp        

#忽略build/目錄下的所有檔案
build/       

#會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt    

Gitee碼云

我們在實際開發中通常需要一個遠程倉庫來存放我們的專案版本

目前可靠的Git開發平臺有GitHub,Gitab,Gitee,我們在這里采用Gitee為例

  1. 注冊登錄碼云頁面

  1. 獲得SSH公鑰
# 首先我們采用Git獲得SSH公鑰

# 生成SSH公鑰 然后進入 C:\Users\Administrator\.ssh 目錄 可以查看相關資訊
ssh-keygen
  1. 設定本機系結SSH公鑰,實作遠程倉庫免密碼登錄

  1. 創建一個遠程倉庫

  1. 克隆至本地即可
$ git clone 遠程倉庫HTTPS

IDEA集成Git

這一小節我們來介紹如何在IDEA中使用Git保存資料

  1. 創建專案,系結Git

我們通常將我們遠程倉庫中的代碼直接拷貝復制到當前專案檔案夾下即可

此時我們的IDEA頁面會發生變化(紅色檔案為選中檔案):

  1. 修改檔案,逐步實作add,commit,push操作

我們可以選擇在Terminal控制臺輸出:

同樣可以選擇IDEA界面快捷輸出:

  1. 回傳Gitee頁面查看資料即可(注意:需要設定為公開才可更新成功)

Git分支

分支就是脫離于主線之外的內容

版本控制系統都以某種形式支持分支,一個分支代表一條獨立的開發線,讓我們在不影響主線的同時繼續作業

如果同一個檔案在合并分支時都被修改了則會引起沖突:

  • 解決的辦法是我們可以修改沖突檔案后重新提交
  • 但是我們需要選擇要保存某一人的代碼而舍棄另一個人的代碼

那么我們的日常開發應該是以哪種方式開發呢:

  • master主分支應該非常穩定,用來發布新版本,一般情況下不允許在上面作業
  • 作業一般情況下在新建的dev開發分支上作業,在分支穩定后可以合并到主分支master上來,

我們在這里給出Git分支的常用指令:

# 列出所有本地分支
git branch

# 列出所有遠程分支
git branch -r

# 新建一個分支,但依然停留在當前分支
git branch [branch-name]

# 新建一個分支,并切換到該分支
git checkout -b [branch]

# 合并指定分支到當前分支
$ git merge [branch]

# 洗掉分支
$ git branch -d [branch-name]

# 洗掉遠程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

結束語

好的,關于Git的內容就介紹到這里,希望能為你帶來幫助!

附錄

該文章屬于學習內容,具體參考B站遇見狂神說的秦江老師的Git課程

這里附上視頻鏈接:1、前言之版本控制_嗶哩嗶哩_bilibili

我的博客即將同步至騰訊云開發者社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=27a6qjvve64g8

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/517583.html

標籤:其他

上一篇:【推薦】搜狗輸入法極簡皮膚

下一篇:DTT第7期直播回顧 | 低代碼應用構建流程和適用場景,與你想的一樣嗎?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more