https://www.yiibai.com/git/git_push.html
git show 查看某次commit的修改內(nèi)容
git log --pretty=oneline rootdir/etc/init.qcom.install_cp.sh 可列出文件的所有改動歷史,注意,這里著眼于具體的一個文件,而不是git庫,如果是庫,那改動可多了去
git log -p rootdir/etc/init.qcom.install_cp.sh # 查看某個文件的提交記錄以及對此文件的修改
git show 3fbf59af49 rootdir/etc/init.qcom.install_cp.sh git只顯示出history_commit_b中的history_commit_b_file50文件的變化、而不顯示history_commit_b_file1...history_commit_b_file49文件的變化.
patch -p1 < my.patch 命令:patch -p0 < my.patch
-p0 就表示從當前目錄,找一個叫作b的目錄再在這個目錄中找一個reset.txt的文件。 -p1 就表示從當前目錄,忽略第一層b的目錄,在當前目錄中找一個reset.txt的文件。一般情況下用patch -p1 < my.patch
patch -R -p1 < 1.patch 撤銷該補丁的修改效果回到打補丁前代碼的狀態(tài)
撤銷補丁還有種更方便的方法,將文件還原checkout,但這個是對文件整體的還原,該文件除補丁之外的修改也被還原了。
git stash save "XX" 執(zhí)行完會返回一個commmit 下次pop時候要 git reset --hard commit 否則pop失敗,所以最好的命令是
git stash save "當前commit+note"
git stash list
git stash pop stash@{x}
git diff HEAD^ HEAD^^ --name-only
這里–name-only參數(shù)只會列出變化的文件名列表.
git show commit --name-only
這里–name-only參數(shù)只會列出變化的文件名列表.
使用git format-patch生成所需要的patch:
當前分支所有超前master的提交:
git format-patch -M master
某次提交以后的所有patch:
git format-patch 4e16 --4e16指的是commit名
從根到指定提交的所有patch:
git format-patch --root 4e16
某兩次提交之間的所有patch:
git format-patch 365a..4e16 --365a和4e16分別對應(yīng)兩次提交的名稱
某次提交(含)之前的幾次提交:
git format-patch –n 07fe --n指patch數(shù),07fe對應(yīng)提交的名稱
故,單次提交即為:
git format-patch -1 07fe 這個最實用
git format-patch生成的補丁文件默認從1開始順序編號,并使用對應(yīng)提交信息中的第一行作為文件名。如果使用了-- numbered-files選項,則文件名只有編號,不包含提交信息;如果指定了--stdout選項,可指定輸出位置,如當所有patch輸出到一個文件;可指定-o <dir>指定patch的存放目錄;
git log --graph 本地分支 或者 git --graph log 默認查看本地當前分支提交記錄。
git stash drop <id> 如果想刪除一個stash,
git stash clear 刪除所有stash,
當安裝完 Git 應(yīng)該做的第一件事就是設(shè)置用戶名稱與郵件地址。這樣做很重要,因為每一個 Git 的提交都會使用這些信息,并且它會寫入到每一次提交中,不可更改:
git config --list
git config --global user.name "maxsu"
git config --global user.email maxsu@yiibai.com
再次強調(diào),如果使用了 --global
選項,那么該命令只需要運行一次,因為之后無論你在該系統(tǒng)上做任何事情, Git 都會使用這些信息。 當你想針對特定項目使用不同的用戶名稱與郵件地址時,可以在那個項目目錄下運行不使用 --global
選項的命令來配置。
git branch mybranch 創(chuàng)建分支: $
git checkout mybranch 切換分支: $
git checkout -b mybranch 創(chuàng)建并切換分支: $
首先進入 master 分支:git checkout master
查看已有的本地及遠程分支:git branch -a
git push origin --delete Su-modify 刪除遠程分支:
git branch -d Su-modify 刪除本地分支:
git add <path>表示 add to index only files created or modified and not those deleted
git branch -vv 查看本地分支和遠程分支追蹤關(guān)系
git branch --set-upstream my_branch origin/my_branch 使用--set-upstream去跟蹤遠程分支 命令的最終修改都是針對.git/config文件
git merge --no-commit my_branch 當您想要對合并進行進一步更改時,可以使用此選項,或者想要自己編寫合并提交消息。應(yīng)該不要濫用這個選項來潛入到合并提交中。小修補程序,如版本名稱將是可以接受的。
git merge dev 將分支dev
合并到當前分支中,自動進行新的提交:
git 中怎樣查看未傳送(git push)到遠程代碼庫的(git commit)提交?
1,查看到未傳送到遠程代碼庫的提交次數(shù)
復(fù)制代碼
顯示結(jié)果類似于這樣:
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
2,查看到未傳送到遠程代碼庫的提交描述/說明
復(fù)制代碼
顯示結(jié)果類似于這樣:
+ b6568326134dc7d55073b289b07c4b3d64eff2e7 add default charset for table items_has_images
+ 4cba858e87752363bd1ee8309c0048beef076c60 move Savant3 class into www/includes/class/
3,查看到未傳送到遠程代碼庫的提交詳情
復(fù)制代碼
這是一個git log命令的過濾,^origin/master可改成其它分支。
顯示結(jié)果類似于這樣:
commit 4cba858e87752363bd1ee8309c0048beef076c60
Author: Zam <zam@iaixue.com>
Date: Fri Aug 9 16:14:30 2013 +0800
move Savant3 class into www/includes/class/
commit b6568326134dc7d55073b289b07c4b3d64eff2e7
Author: Zam <zam@iaixue.com>
Date: Fri Aug 9 16:02:09 2013 +0800
add default charset for table items_has_images
總結(jié):
git status 只能查看未傳送提交的次數(shù)
git cherry -v只能查看未傳送提交的描述/說明
git log master ^origin/master則可以查看未傳送提交的詳細信息 --------------------- 本文來自 DreamSoar 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/kakaxi2222/article/details/46011717?utm_source=copy
repo的用法(zz)
注:repo只是google用Python腳本寫的調(diào)用git的一個腳本,主要是用來下載、管理Android項目的軟件倉庫。(也就是說,他是用來管理給git管理的一個個倉庫的)
下載 repo 的地址: http://android.git.kernel.org/repo ,可以用以下二者之一來下載 repo
wget http://android.git.kernel.org/repo
或者
curl http://android.git.kernel.org/repo > ~/bin/repo
下載完成后須修改repo的權(quán)限: chmod a+x ~/bin/repo
用repo sync 在抓去 android source code 的時候,會經(jīng)常出現(xiàn)一些錯誤導(dǎo)致 repo sync 中斷,每次都要手動開始。 可以用如下的命令,來自動重復(fù)
$?=1;
while [ $? -ne 0 ] ;
do repo sync ;
done
獲取幫助:
repo help [ command ] //顯示command 的詳細的幫助信息內(nèi)容
示例: repo help init 來獲取 repo init 的其他用法
repo init -u URL 用以在當前目錄安裝 repository ,會在當前目錄創(chuàng)建一個目錄 ".repo" -u 參數(shù)指定一個URL, 從這個URL 中取得repository 的 manifest 文件。
示例:repo init -u git://android.git.kernel.org/platform/manifest.git
獲取的manifest文件放在.repo目錄中。命名為manifest.xml。這個文件的內(nèi)容其實就是所有被git管理的倉庫的列表!
可以用 -m 參數(shù)來選擇獲取 repository 中的某一個特定的 manifest 文件,如果不具體指定,那么表示為默認的 namifest 文件 (default.xml)
repo init -u git://android.git.kernel.org/platform/manifest.git -m dalvik-plus.xml
(有諸多供我們選擇的manifest文件,所有的manifest文件都放在目錄.repo/manifests中,該目錄本身亦被git所管理,你可以cd進去看看)
可以用 -b 參數(shù)來指定某個manifest 分支。
repo init -u git://android.git.kernel.org/platform/manifest.git -b release-1.0
你會發(fā)現(xiàn).repo/manifests是個被git管理的倉庫,這里放的是所有的manifest文件(*.xml),因為被git管理,固然有分支,-b可以切換到你想要的分支然后再下載相關(guān)的xml文件,當然具體下載那個xml還要看-m參數(shù)了,所以如果你僅僅指定-b而沒有-m的話,就是下載-b指定分支下的default.xml文件
如果不指定-b參數(shù),那么會默認使用master分支
4. repo sync [project-list]
下載最新本地工作文件,更新成功,這本地文件和repository 中的代碼是一樣的。 可以指定需要更新的project , 如果不指定任何參數(shù),會同步整個所有的項目。
如果是第一次運行 repo sync , 則這個命令相當于 git clone ,會把 repository 中的所有內(nèi)容都拷貝到本地。 如果不是第一次運行 repo sync , 則相當于 git remote update ; git rebase origin/branch . repo sync 會更新 .repo 下面的文件。 如果在merge 的過程中出現(xiàn)沖突, 這需要手動運行 git rebase --continue
5. repo update[ project-list ]
上傳修改的代碼 ,如果你本地的代碼有所修改,那么在運行 repo sync 的時候,會提示你上傳修改的代碼,所有修改的代碼分支會上傳到 Gerrit (基于web 的代碼review 系統(tǒng)), Gerrit 受到上傳的代碼,會轉(zhuǎn)換為一個個變更,從而可以讓人們來review 修改的代碼。
6. repo diff [ project-list ]
顯示提交的代碼和當前工作目錄代碼之間的差異。
7. repo download target revision
下載特定的修改版本到本地, 例如: repo download pltform/frameworks/base 1241 下載修改版本為 1241 的代碼
8. repo start newbranchname .
創(chuàng)建新的branch分支。 "." 代表當前工作的branch 分支。
9. repo prune [project list]
刪除已經(jīng)merge 的 project
10. repo foreach [ project-lists] -c command
對每一個 project 運行 command 命令
12. repo forall -c
這個命令會遍歷所有的git倉庫,并在每個倉庫執(zhí)行-c所指定的命令(這個被執(zhí)行的命令就不限于僅僅是git命令了,而是任何被系統(tǒng)支持的命令,比如:ls 、 pwd 、cp 等等的 )
當我想通過這個命令遍歷所有的倉庫并在每個倉庫執(zhí)行"git checkout . "用以將每個倉庫的改動都清除的時候,我這么輸入命令:
repo forall -c git checkout .
我發(fā)現(xiàn)這樣根本不行??磥韗epo不能遍歷執(zhí)行checkout這個命令。今天我終于想到了另外一個命令"git reset --hard HEAD" 哈哈
repo forall -c git reset --hard HEAD
再說一個新發(fā)現(xiàn):以前用repo forall 執(zhí)行一些命令的時候,可能再遍歷到某個倉庫的時候出了問題,但是我卻苦于不知道這個倉庫到底是哪個!一直也沒有解決。今天終于找到了。。。。 關(guān)鍵時候還是要看命令自己帶的幫助手冊呀。。。
repo help forall 用這個命令查看下針對forall的幫助吧。說的很清楚,repo執(zhí)行的時候加上-p參數(shù)就可以在遍歷到每個倉庫的時候先打印出當前的pwd,然后再繼續(xù)執(zhí)行-c所指定的命令。舉例如下:
repo forall -p -c git branch
//該命令會遍歷所有倉庫并打印每個倉庫的分支情況,由于有了-p參數(shù),這樣便會打印出每個倉庫的路徑!??!
11. repo status
顯示 project 中每個倉庫的狀態(tài),并打印倉庫名稱。
201111071237 更新
yasin.lee.x
———————————————————————————————————————————————————————
cpp@cpp:~$ repo
Traceback (most recent call last):
File "/home/cpp/bin/repo", line 91, in ?
import readline
ImportError: No module named readline
cpp@cpp:~$
———————————————————————————————————————————————————————
系統(tǒng)里明明有readline,可是repo腳本卻無法導(dǎo)入,后來查到應(yīng)該是python安裝導(dǎo)致的錯誤,應(yīng)該在python編譯時加上關(guān)于readline的編譯選項,應(yīng)該按照如下操作安裝python
首先安裝readline軟件包:
sudo apt-get install libreadline5-dev
sudo apt-get install zlib1g-dev
然后下載python源碼進入python源碼目錄,編譯并安裝python:
1. make distclean
2. ./configure --enable-readline BASECFLAGS=-U_FORTIFY_SOURCE
3. make -j4
4. sudo make install
注意,我同時發(fā)現(xiàn)在python-2.4.3版本是支持該編譯選項的,而在3.1.3版本中是不能識別這個--enable-readline編譯參數(shù)的。所以我目前使用2.4.3版本。
---------------------
作者:風(fēng)中之哨
來源:CSDN
原文:https://blog.csdn.net/yasin_lee/article/details/5975068?utm_source=copy
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
之前已經(jīng)講了Repo的基本理解,這里總結(jié)一下Repo的常用命令。
repo init
repo sync
repo start
repo checkout
repo branches
repo diff
repo stage
repo prune
repo abandon
repo status
repo remote
repo push
repo forall
1 添加環(huán)境變量
2 合并多個分支
3 打標簽
4 設(shè)置遠程倉庫
5 創(chuàng)建特性分支
repo grep
repo manifest
repo version
repo upload
repo download
repo selfupdate
repo help
1. repo init
repo init -u manifest_git_path -m manifest_file_name -b branch_name --repo-url=repo_url --no-repo-verify
1
??在當前目錄下安裝 Repo。這會產(chǎn)生一個 .repo/ 目錄,目錄包括裝 Repo 源代碼和標準 Android 清單文件的 Git 倉庫。.repo/ 目錄還包括 manifest.xml,是一個在 .repo/manifests/ 目錄選擇清單的符號鏈接。
??選項:
-u: 指定Manifest庫的Git訪問路徑。
-m: 指定要使用的Manifest文件。
-b: 指定要使用Manifest倉庫中的某個特定分支。
–repo-url: 指定要檢查repo是否有更新的遠端repoGit庫的訪問路徑。
–no-repo-verify: 指定不檢查repo庫是否需要更新。
2. repo sync
repo sync [project_name]
1
??用于參照清單文件克隆并同步版本庫。可以使用repo sync project_name的形式只克隆某個項目。。
??實現(xiàn)參照清單.repo/manifests.xml克隆并同步版本庫,如果版本庫不存在,則相當于執(zhí)行
git clone
1
??如果版本庫已經(jīng)存在,則相當于執(zhí)行
#對每個remote源進行fetch操作
git remote update
#針對當前分支的跟蹤分支進行rebase操作
git rebase/origin/branch
1
2
3
4
??選項:
-d:切換指定項目回到清單修正。如果該項目目前是一個主題分支那就有幫助,但清單修正是暫時需要。
-s:同步到一個已知的構(gòu)建 manifest-server 在當前清單指定的元素。
-f:繼續(xù)同步其他項目,即使有項目同步失敗。
3. repo start
repo start <newbranchname> [--all|<project>...]
1
??創(chuàng)建并切換分支。剛克隆下來的代碼是沒有分支的,repo start實際是對git checkout -b命令的封裝。
??為指定的項目或所有的項目(若使用-all),以清單文件中為設(shè)定的分支,創(chuàng)建特定的分支。
??這條指令與git checkout -b 還是有很大區(qū)別的。
??· git checkout -b 是在當前所在的分支的基礎(chǔ)上創(chuàng)建特性分支。
??· 而repo start 是在清單文件設(shè)定的分支的基礎(chǔ)上創(chuàng)建特性分支。
repo start stable --all
1
??假設(shè)清單文件中設(shè)定的分支是gingerbread-exdroid-stable,那么執(zhí)行以上指令就是對所有項目,在gingerbread-exdroid-stable的基礎(chǔ)上創(chuàng)建特性分支stable。
repo start stable platform/build platform/bionic
1
??假設(shè)清單文件中設(shè)定的分支是gingerbread-exdroid-stable,那么執(zhí)行以上指令就是對platform/build、platform/bionic項目,在gingerbread-exdroid-stable的基礎(chǔ)上創(chuàng)建特性分支stable。
4. repo checkout
<branchname> [<rpoject>...]{{{
repo checkout <branchname> [<project>...]
}}}
1
2
3
??切換分支。 實際上是對git checkout命令的封裝,但不能帶-b參數(shù),所以不能用此命令來創(chuàng)建特性分支。
??示例:
repo checkout liuq-dev
repo checkout liuq-dev skipper/build platform/bionic
1
2
5. repo branches
repo branches [<project>...]
1
??查看分支。
??示例:
repo branches
repo branches skipper/build skipper/release
#查看可切換的分支
cd .repo/manifests
git branch -a | cut -d / -f 3
1
2
3
4
5
6. repo diff
repo diff [<project>...]
1
??查看工作區(qū)文件差異。實際是對git diff命令的封裝,用于分別顯示各個項目工作區(qū)下的文件差異。在 commit 和工作目錄之間使用 git diff 顯示明顯差異的更改。
??示例:
#查看所有項目
repo diff
#只查看其中的兩個項目
repo diff skipper/build skipper/release
1
2
3
4
7. repo stage
repo stage -i [<project>...]
1
??把文件添加到index表中。實際上是對git add –interactive命令的封裝,用于挑選各個項目中的改動以加入暫存區(qū)。
??-i表示git add –interactive命令中的–interactive,給出一個界面供用戶選擇。
8. repo prune
repo prune [<project>...]
1
??刪除已經(jīng)合并分支。實際上是對git branch -d 命令的封裝,該命令用于掃描項目的各個分支,并刪除已經(jīng)合并的分支。
9. repo abandon
repo abandon <branchname> [<rpoject>...]
1
??刪除指定分支。實際是對git brance -D命令的封裝。
10. repo status
repo status [<project>...]
1
??查看文件狀態(tài)。
??示例:
#輸出skipper/build項目分支的修改狀態(tài)
repo status skipper/build
1
2
每個小節(jié)的首行顯示項目名稱,以及所在的分支的名稱。
每個字母表示暫存區(qū)的文件修改狀態(tài)。
字母 含義 描述
- 無變化 沒有修改,在 HEAD 和在索引中是一樣的
A 添加 不在HEAD中,在暫存區(qū)中
M 修改 在HEAD中, 在暫存區(qū)中,內(nèi)容不同
D 刪除 在HEAD中,不在暫存區(qū)
R 重命名 不在HEAD中,在暫存區(qū)中
C 拷貝 不在HEAD中,在暫存區(qū),從其他文件拷貝
T 文件狀態(tài)改變 在HEAD中,在暫存區(qū),內(nèi)容相同
U 未合并 需要沖突解決
第二個字符表示工作區(qū)文件的更改狀態(tài)。
字母 含義 描述
- 新/未知 不在暫存區(qū),在工作區(qū)
m 修改 在暫存區(qū),在工作區(qū),被修改
d 刪除 在暫存區(qū),不在工作區(qū)
兩個表示狀態(tài)的字母后面,顯示文件名信息。如果有文件重名還會顯示改變前后的文件名及文件的相似度。
11. repo remote
repo remote add <remotename> <url> [<project>...]
repo remote rm <remotename> [<project>...]
1
2
??設(shè)置遠程倉庫。
??示例:
repo remote add org ssh://10.11.10.11/git_repo
1
??這個指令根據(jù)xml文件添加的遠程分支,方便于向服務(wù)器提交代碼,執(zhí)行之后的build目錄下看到新的遠程分支org。
#刪除遠程倉庫
repo remote rm org
1
2
12. repo push
repo push <remotename> [--all|<project>...]
1
??向服務(wù)器提交代碼。repo會自己查詢需要向服務(wù)器提交的項目并提示用戶。
??示例:
repo push org
1
13. repo forall
repo forall [<project>...] -c <command>
1
??迭代器,可以在所有指定的項目中執(zhí)行同一個shell指令。
??選項:
-c 后面所帶的參數(shù)是shell指令,即執(zhí)行命令和參數(shù)。命令是通過 /bin/sh 評估的并且后面的任何參數(shù)就如 shell 位置的參數(shù)通過。
-p 在shell指令輸出之前列出項目名稱,即在指定命令的輸出前顯示項目標題。這是通過綁定管道到命令的stdin,stdout,和 sterr 流,并且用管道輸送所有輸出量到一個連續(xù)的流,顯示在一個單一的頁面調(diào)度會話中。
-v 列出執(zhí)行shell指令輸出的錯誤信息,即顯示命令寫到 sterr 的信息。
??附加環(huán)境變量:
REPO_PROJECT 指定項目的名稱
REPO_PATH 指定項目在工作區(qū)的相對路徑
REPO_REMOTE 指定項目遠程倉庫的名稱
REPO_LREV 指定項目最后一次提交服務(wù)器倉庫對應(yīng)的哈希值
REPO_RREV 指定項目在克隆時的指定分支,manifest里的revision屬性
??如果-c后面所帶的shell指令中有上述環(huán)境變量,則需要用單引號把shell指令括起來。
13.1. 添加環(huán)境變量
repo forall -c 'echo $REPO_PROJECT'
repo forall -c 'echo $REPO_PATH'
1
2
13.2. 合并多個分支
repo forall -p -c git merge topic
1
??把所有項目都切換到master分支,執(zhí)行上述指令將topic分支合并到master分支。
13.3. 打標簽
repo forall -c git tag crane-stable-1.6
1
??在所有項目下打標簽。
13.4. 設(shè)置遠程倉庫
repo forall -c 'git remote add korg ssh://xiong@172.16.31/$REPO_PROJECT.git'
1
??引用環(huán)境變量REPO_PROJECT添加遠程倉庫。
#刪除遠程倉庫。
repo forall -c git remote rm korg
1
2
13.5. 創(chuàng)建特性分支
repo forall -c git branch crane-dev
repo forall -c git checkout -b crane-dev
1
2
14. repo grep
repo grep {pattern | -e pattern} [<project>...]
1
??打印出符合某個模式的行。相當于對 git grep 的封裝,用于在項目文件中進行內(nèi)容查找。
??示例:
#要找一行, 里面有#define, 并且有'MAX_PATH' 或者 'PATH_MAX':
repo grep -e '#define' --and -
#查找一行, 里面有 'NODE'或'Unexpected', 并且在一個文件中這兩個都有的.
repo grep --all-match -e NODE -e Unexpected
1
2
3
4
15. repo manifest
repo manifest [-o {-|NAME.xml} [-r]]
1
??manifest檢驗工具,用于顯示manifest文件內(nèi)容。
??選項:
-h, –help 顯示這個幫助信息后退出
-r, –revision-as-HEAD 把某版次存為當前的HEAD
-o -|NAME.xml, –output-file=-|NAME.xml 把manifest存為NAME.xml
16. repo version
repo version
1
??顯示repo的版本號。
??選項:
-h, –help 顯示這個幫助信息后退出.
17. repo upload
repo upload [--re --cc] {[<project>]...|--replace <project>}
1
??repo upload 相當于git push,但是又有很大的不同。它不是將版本庫改動推送到代碼審核服務(wù)器(Gerrit軟件架設(shè))的特殊引用上,使用SSH協(xié)議。代碼審核服務(wù)器會對推送的提交進行特殊處理,將新的提交顯示為一個待審核的修改集,并進入代碼審核流程,只有當審核通過后,才會合并到官方正式的版本庫中。
??選項:
-h, –help 顯示幫助信息
-t 發(fā)送本地分支名稱到Gerrit代碼審核服務(wù)器
–replace 發(fā)送此分支的更新補丁集
–re=REVIEWERS 要求指定的人員進行審核
–cc=CC 同時發(fā)送通知到如下郵件地址
18. repo download
repo download {project change[/patchset]}...
1
??repo download命令主要用于代碼審核者下載和評估貢獻者提交的修訂。
??貢獻者的修訂在Git版本庫中refs/changes//引用方式命名(缺省的patchset為1),和其他Git引用一樣,用git fetch獲取,該引用所指向的最新的提交就是貢獻者待審核的修訂。
??使用repo download命令實際上就是用git fetch獲取到對應(yīng)項目的refs/changes//patchset>引用,并自動切換到對應(yīng)的引用上。
19. repo selfupdate
repo selfupdate
1
??用于 repo 自身的更新。如果有新版本的repo存在, 這個命令會升級repo到最新版本。通常這個動作在repo sync時會自動去做, 所以不需要最終用戶手動去執(zhí)行。
??選項:
-h, –help 顯示這個幫助信息后退出.
–no-repo-verify 不要驗證repo源碼.
20. repo help
repo help [--all|command]
1
??顯示命令的詳細幫助。
??選項:
-h, –help 顯示這個幫助信息后退出
-a, –all 顯示完整的命令列表
參考文檔:
http://blog.sina.com.cn/s/blog_89f592f50100vpau.html
https://github.com/Trawn/repo-help-zh-cn/blob/master/repo%20help%20zhcn.txt
---------------------
作者:煊琦
來源:CSDN
原文:https://blog.csdn.net/u012842255/article/details/69388801?utm_source=copy
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
聯(lián)系客服