国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Git 基本原理介紹

共 17645字,需瀏覽 36分鐘

 ·

2021-09-06 15:26

簡單地說,Git 究竟是怎樣的一個系統(tǒng)呢?請注意接下來的內(nèi)容非常重要,若你理解了 Git 的思想和基本工作原理,用起來就會知其所以然,游刃有余。在學(xué)習(xí) Git 時,請盡量理清你對其它版本管理系統(tǒng)已有的認(rèn)識,如 CVS、Subversion 或 Perforce, 這樣能幫助你使用工具時避免發(fā)生混淆。盡管 Git 用起來與其它的版本控制系統(tǒng)非常相似, 但它在對信息的存儲和認(rèn)知方式上卻有很大差異,理解這些差異將有助于避免使用中的困惑。


Git 初始化代碼倉庫

執(zhí)行完成了 git init 命令,究竟做了什么呢?

執(zhí)行完成如下命令之后,我們可以得到下圖所示的內(nèi)容,右側(cè)的就是 Git 為我們創(chuàng)建的代碼倉庫,其中包含了用于版本管理所需要的內(nèi)容。

# 左邊執(zhí)行
$ mkdir git-demo
cd git-demo && git init
$ rm -rf .git/hooks/*.sample

# 右邊執(zhí)行
$ watch -n 1 -d find .


我們這里可以一起看下生成的 .git 目錄的結(jié)構(gòu)如何:

? tree .git
.git
├── HEAD
├── config
├── description
├── hooks
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags


.git/config - 當(dāng)前代碼倉庫本地的配置文件

  • 本地配置文件(.git/config)和全局配置文件(~/.gitconfig)

  • 通過執(zhí)行如下命令,可以將用戶配置記錄到本地代碼倉庫的配置文件中去

  • git config user.name "demo"

  • git config user.email "[email protected]"


? cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true

[user]
    name = demo
    email = [email protected]
.git/objects - 當(dāng)前代碼倉庫代碼的存儲位置

  • blob 類型

  • commit 類型

  • tree 類型


# 均無內(nèi)容
? ll .git/objects
total 0
drwxr-xr-x  2 escape  staff    64B Nov 23 20:39 info
drwxr-xr-x  2 escape  staff    64B Nov 23 20:39 pack

? ll .git/objects/info
? ll .git/objects/pack


.git/info - 當(dāng)前倉庫的排除等信息
? cat ./.git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

.git/hooks - 當(dāng)前代碼倉庫默認(rèn)鉤子腳本

./.git/hooks/commit-msg.sample
./.git/hooks/pre-rebase.sample
./.git/hooks/pre-commit.sample
./.git/hooks/applypatch-msg.sample
./.git/hooks/fsmonitor-watchman.sample
./.git/hooks/pre-receive.sample
./.git/hooks/prepare-commit-msg.sample
./.git/hooks/post-update.sample
./.git/hooks/pre-merge-commit.sample
./.git/hooks/pre-applypatch.sample
./.git/hooks/pre-push.sample
./.git/hooks/update.sample


.git/HEAD - 當(dāng)前代碼倉庫的分支指針

? cat .git/HEAD
ref: refs/heads/master


.git/refs - 當(dāng)前代碼倉庫的頭指針

# 均無內(nèi)容
? ll .git/refs
total 0
drwxr-xr-x  2 escape  staff    64B Nov 23 20:39 heads
drwxr-xr-x  2 escape  staff    64B Nov 23 20:39 tags

? ll .git/refs/heads
? ll .git/refs/tags


.git/description - 當(dāng)前代碼倉庫的描述信息

? cat .git/description
Unnamed repository; edit this file 'description' to name the repository.


add 之后發(fā)生了什么

執(zhí)行完成了 git add 命令,究竟做了什么呢?

執(zhí)行完成如下命令之后,我們可以得到下圖所示的內(nèi)容,我們發(fā)現(xiàn)右側(cè)新增了一個文件,但是 Git 目錄里面的內(nèi)容絲毫沒有變化。這是因為,我們現(xiàn)在執(zhí)行的修改默認(rèn)是放在工作區(qū)的,而工作區(qū)里面的修改不歸 Git 目錄去管理。

而當(dāng)我們執(zhí)行 git status 命令的時候,Git 又可以識別出來現(xiàn)在工作區(qū)新增了一個文件,這里怎么做到的呢?—— 詳見[理解 blob 對象和 SHA1]部分

而當(dāng)我們執(zhí)行 git add 命令讓 Git 幫助我們管理文件的時候,發(fā)現(xiàn)右側(cè)新增了一個目錄和兩個文件,分別是 8d 目錄、index 和 0e41.. 文件。

# 左邊執(zhí)行
echo "hello git" > helle.txt
$ git status
$ git add hello.txt

# 右邊執(zhí)行
$ watch -n 1 -d find .


我們這里重點看下,生成的 8d 這個目錄以及下面的文件。而其名稱的由來是因為 Git 對其進(jìn)行了一個叫做 SHA1 的 Hash 算法,用于將文件內(nèi)容或者字符串變成這么一串加密的字符。

# 查看 objects 的文件類型
$ git cat-file -t 8d0e41
blob

# 查看 objects 的文件內(nèi)容
$ git cat-file -p 8d0e41
hello git

# 查看 objects 的文件大小
$ git cat-file -s 8d0e41
10

# 拼裝起來
blob 10\0hello git

現(xiàn)在我們就知道了,執(zhí)行 git add 命令將文件從工作區(qū)添加到暫存區(qū)里面,Git 會把幫助我們生成一些 Git 的對象,它存儲的是文件的內(nèi)容和文件類型并不存儲文件名稱。

為了驗證我們上述的說法,我們可以添加同樣的內(nèi)容到另一個文件,然后進(jìn)行提交,來觀察 .git 目錄的變化。我們發(fā)現(xiàn),右側(cè)的 objects 目錄并沒有新增目錄和文件。這就可以證明,blob 類型的 object 只存儲的是文件的內(nèi)容,如果兩個文件的內(nèi)容一致的話,則只需要存儲一個 object 即可。

話說這里 object 為什么沒有存儲文件名稱呢?這里因為 SHA1 的 Hash 算法計算哈希的時候,本身就不包括文件名稱,所以取什么名稱都是無所謂的。那問題來了,就是文件名的信息都存儲到哪里去了呢?—— 詳見[理解 blob 對象和 SHA1]部分

# 左邊執(zhí)行
echo "hello git" > tmp.txt
$ git add tmp.txt

# 右邊執(zhí)行
$ watch -n 1 -d find .



理解 blob 對象和 SHA1

了解 Git 的 blob 對象和 SHA1 之前的關(guān)系和對應(yīng)計算!

Hash 算法是把任意長度的輸入通過散列算法變化成固定長度的輸出,根據(jù)算法的不同,生成的長度也有所不同。

Hash 算法:

  • MD5 - 128bit - 不安全 - 文件校驗

  • SHA1 - 160bit(40位) - 不安全 - Git 存儲

  • SHA256 - 256bit- 安全 - Docker 鏡像

  • SHA512 - 512bit - 安全


但是,當(dāng)我們使用工具對上述文件內(nèi)容進(jìn)行 SHA1 計算的時候,會發(fā)現(xiàn)并沒有我們在 .git 目錄里面看到的那樣,這是為什么呢?

echo "hello git" | shasum
d6a96ae3b442218a91512b9e1c57b9578b487a0b  -

這里因為 Git 工具的計算方式,是使用類型 長度 \0 內(nèi)容的方式進(jìn)行計算的。這里,我們算了下文件內(nèi)容只有九位,但是這里是十位,這里因為內(nèi)容里面有換行符的存在導(dǎo)致的?,F(xiàn)在我們就可以使用 git cat-file 命令來拼裝 Git 工具存儲的完整內(nèi)容了。

? ls -lh hello.txt
-rw-r--r--  1 escape  staff    10B Nov 23 21:12 hello.txt

echo "blob 10\0hello git" | shasum
8d0e41234f24b6da002d962a26c2495ea16a425f  -

# 拼裝起來
blob 10\0hello git


當(dāng)我們使用 cat 命令來查看 object 對象里面的內(nèi)容的時候,發(fā)現(xiàn)看著像是一串亂碼。其實這是 Git 工具將文件的原始內(nèi)容進(jìn)行一個壓縮,然后再存儲到 object 對象里面。奇怪的是,我們發(fā)現(xiàn)壓縮之后的內(nèi)容反而比原始內(nèi)容還大!

這是因為其進(jìn)行了壓縮,存儲了一些壓縮相關(guān)的信息。上例所示的比原始文件大,是因為我們創(chuàng)建的內(nèi)容實在是太小了。當(dāng)我們常見一個比較大的文件時,就會看到壓縮之后的文件大小遠(yuǎn)小于原始文件的。

? cat .git/objects/8d/0e41234f24b6da002d962a26c2495ea16a425f
xKOR04`HWH,6A%

? ls -lh .git/objects/8d/0e41234f24b6da002d962a26c2495ea16a425f
-r--r--r--  1 escape  staff    26B Nov 23 21:36 .git/objects/8d/0e41234f24b6da002d962a26c2495ea16a425f

? file .git/objects/8d/0e41234f24b6da002d962a26c2495ea16a425f
.git/objects/8d/0e41234f24b6da002d962a26c2495ea16a425f: VAX COFF executable not stripped - version 16694

其實,我們這里也是可以通過 Python 代碼來獲取二進(jìn)制 object 對象的內(nèi)容的。

import zlib

contents = open('0e41234f24b6da002d962a26c2495ea16a425f''rb').read()
zlib.decompress(contents)



聊聊工作區(qū)和暫存區(qū)

聊聊工作區(qū)和暫存區(qū),以及文件如何在工作區(qū)和緩存區(qū)之間同步的問題。

之前的章節(jié)我們也聊到了,當(dāng)我們執(zhí)行 git status 命令的時候,Git 工具怎么知道我們有一個文件沒有追蹤,以及文件名的信息都存儲到哪里去了?

這一切的答案,都要從工作區(qū)和索引區(qū)講起。Git 根據(jù)其存儲的狀態(tài)不同,將對應(yīng)狀態(tài)的“空間”分為工作區(qū)、暫存區(qū)(也可稱為索引區(qū))和版本區(qū)三類。具體示例,可以參考下圖。

而更加深層次的理解,就要從執(zhí)行 git add 命令后生成相關(guān)的 object 對象,但是其存儲的是文件的類容、大小和內(nèi)容,并不包含文件名稱的信息。而文件名稱相關(guān)的信息就包含在生成的 index 文件(索引文件)里面。

當(dāng)我們直接查看 index 文件里面的內(nèi)容,發(fā)現(xiàn)使我們無法理解的亂碼,但是通過基本的輸出,我們可以看到其文件名稱。要想查看 index 文件的內(nèi)容,可以通過 Git 提供的相關(guān)命令進(jìn)行查看。

# 左邊執(zhí)行
echo "file1" > file1.txt
$ git add file1.txt
$ cat .git/index

$ git ls-files     # 列出當(dāng)前暫存區(qū)的文件列表信息
$ git ls-files -s  # 列出當(dāng)前暫存區(qū)文件的詳細(xì)信息

# 右邊執(zhí)行
$ watch -n 1 -d tree .git


當(dāng)添加文件的時候,文件或目錄會從工作區(qū)流向暫存區(qū),加之一些其他操作,會導(dǎo)致工作區(qū)和暫存區(qū)是會有一定差別的。這就會導(dǎo)致,當(dāng)我們執(zhí)行 git status 的結(jié)果就是兩者的差別。

經(jīng)過如下操作,會使工作區(qū)和暫存區(qū)和的內(nèi)容不一致了,通過命令我們也是可以查看區(qū)別的。當(dāng)我們使用 add 命令將新文件添加到暫存區(qū)的時候,會發(fā)現(xiàn)這下就一致了。
# 左邊執(zhí)行
$ git status
echo "file2" > file2.txt
$ git ls-files -s
$ git status
$ git add file2.txt
$ git ls-files -s
$ git status

# 右邊執(zhí)行
$ watch -n 1 -d tree .git


如果我們這里去修改一個文件的話,很顯然這個時候我們的工作區(qū)和暫存區(qū)又不一致了。當(dāng)我們使用命令去查看文件狀態(tài)的時候,發(fā)現(xiàn)一個文件被修改了,而 Git 是怎么知道的呢?咳咳,就是通過查找 index 文件的內(nèi)容,找到對應(yīng)文件名稱以及其內(nèi)部引用的 object 對象,與工作區(qū)的文件內(nèi)容進(jìn)行對比而來的。

# 左邊執(zhí)行
$ git ls-files -s
echo "file.txt" > file1.txt
$ git status

# 右邊執(zhí)行
$ watch -n 1 -d tree .git


而這個時候,我們再使用 git add 命令將其修改內(nèi)容保存至?xí)捍鎱^(qū)的話,會發(fā)現(xiàn)對應(yīng)文件的 object 的 blob 對象的引用值發(fā)生改變了。這時可以發(fā)現(xiàn),objects 目錄下面有三個對象了,其中 file1.txt 占了兩個,但是文件卻只有兩個。通過命令查看對應(yīng) blob 對象的內(nèi)容,發(fā)現(xiàn)各有不同。

# 左邊執(zhí)行
$ git ls-files -s
$ git add file1.txt
$ git ls-files -s

# 右邊執(zhí)行
$ watch -n 1 -d tree .git



理解 commit 提交原理

執(zhí)行完成了 git commit 命令,究竟做了什么呢?

Git 倉庫中的提交記錄保存的是你的目錄下所有文件的快照,就像是把整個目錄復(fù)制,然后再粘貼一樣,但比復(fù)制粘貼優(yōu)雅許多!Git 希望提交記錄盡可能地輕量,因此在你每次進(jìn)行提交時,它并不會盲目地復(fù)制整個目錄。條件允許的情況下,它會將當(dāng)前版本與倉庫中的上一個版本進(jìn)行對比,并把所有的差異打包到一起作為一個提交記錄。Git 還保存了提交的歷史記錄。這也是為什么大多數(shù)提交記錄的上面都有父節(jié)點的原因。

當(dāng)我們使用 add 命令將工作區(qū)提交到暫存區(qū),而暫存區(qū)其實保存的是當(dāng)前文件的一個狀態(tài),其中包括有哪些目錄和文件,以及其對應(yīng)的大小和內(nèi)容等信息。但是我們最終是需要將其提交到代碼倉庫(本地)的,而其命令就是 git commit 了。

而當(dāng)我們執(zhí)行 git commit 命令的時候,究竟都發(fā)生了什么呢?可以看到當(dāng)提交之后,.git 目錄中生成了兩個信息的 object 對象,其中 logs 和 refs 目錄都有新的文件生成。通過如下操作,我們可以查看到其提交的類型和對應(yīng)內(nèi)容。

# 左邊執(zhí)行
$ git commit -m "1st commit"

$ git cat-file -t 6e4a700  # 查看 commit 對象的類型
$ git cat-file -p 6e4a700  # 查看 commit 對象的內(nèi)容

$ git cat-file -t 64d6ef5  # 查看 tree 對象的類型
$ git cat-file -p 64d6ef5  # 查看 tree 對象的內(nèi)容

# 右邊執(zhí)行
$ watch -n 1 -d tree .git


這樣我們就理解了,當(dāng)我們執(zhí)行 git commit 命令之后,會生成一個 commit 對象和一個 tree 對象。commit 對象內(nèi)容里面包含了一個 tree 對象和相關(guān)提交信息,而 tree 對象里面則包含了這次我們提交版本里面的文件狀態(tài)(文件名稱和 blob 對象),這樣我們就知道了這次提交的變動了。

我們這次提交之后,處理 objects 目錄發(fā)生變動之外,還有一些其他的變化。比如 logs 和 refs 的目錄有所變化。我們查看 refs 目錄里面的內(nèi)容,發(fā)現(xiàn)其指向了 6e4a70 這個 commit 對象,即當(dāng)前 master 分支上面最新的提交就是這個 6e4a70 了。

而這個 6e4a70 這個 commit 對象,有一個 HEAD 的指向,就是 .git 目錄下的 HEAD 文件。其實質(zhì)就是一個指針,其永遠(yuǎn)指向我們當(dāng)前工作的分支,即這里我們工作在 master 分支上。當(dāng)我們切換分支的時候,這個文件的指向也會隨機(jī)改變的。

# 左邊執(zhí)行
$ cat .git/refs/heads/master
$ cat .git/HEAD

# 右邊執(zhí)行
$ watch -n 1 -d tree .git


加深理解 commit 提交

執(zhí)行完成了 git commit 命令,究竟做了什么呢?

當(dāng)我們再次對 file2.txt 文件的內(nèi)容進(jìn)行變更、添加以及提交之后,發(fā)現(xiàn)在提交的時候,查看的 commit 對象的內(nèi)容時,其包含有父節(jié)點的 commit 信息。而對于理解的話,可以看看下面的這個提交流程圖。

# 左邊執(zhí)行
echo "file2.txt" > file2.txt
$ git status
$ git add file2.txt
$ git ls-files -s
$ git cat-file -p 0ac9638
$ git commit -m "2nd commit"
$ git cat-file -p bab53ff
$ git cat-file -p 2f07720

# 右邊執(zhí)行
$ watch -n 1 -d tree .git



在 Git 中空文件夾是不算在追蹤范圍內(nèi)的,而且添加文件夾并不會增加 object 對象。當(dāng)我們查看 index 內(nèi)容的時候,會發(fā)現(xiàn)文件名稱是包含相對路徑的。

而當(dāng)我們通過 commit 命令提交之后,會發(fā)現(xiàn)生成了三個 object 對象,因為 commit 操作不會生成 blob 對象,所以分別是一個 commit 對象和兩個 tree 對象。可以發(fā)現(xiàn),tree 對象里面有包含了一個目錄的 tree,其里面包含對象文件內(nèi)容。

下圖所示的文件狀態(tài),可以體會到 Git 中版本的概念。即 commit 對象指向一個該版本中的文件目錄樹的根(tree),然后 tree 在指向 blob 對象(文件)和 tree 對象(目錄),這樣就可以無限的往復(fù)下去形成一個完整的版本。

# 左邊執(zhí)行
$ mkdir floder1
echo "file3" > floder1/file3.txt
$ git add floder1
$ git ls-files -s
$ git commit -m "3rd commit"
$ git cat-file -p 1711e01
$ git cat-file -p 9ab67f8

# 右邊執(zhí)行
$ watch -n 1 -d tree .git



文件的生命周期狀態(tài)

總結(jié)一下,Git 里面的文件狀態(tài)和如何切換。

現(xiàn)在,我們已經(jīng)基本理解了文件如何在工作區(qū)、暫存區(qū)以及代碼倉庫之間進(jìn)行狀態(tài)的跟蹤和同步。在 Git 的操作中,文件的可能狀態(tài)有哪些,以及如何進(jìn)行狀態(tài)切換的,我們這里一起總結(jié)一下!


Branch 和 HEAD 的意義

執(zhí)行完成了 git branch 命令,究竟做了什么呢?

到底什么是分支?分支切換又是怎么一回事?我們通過查看 Git 的官方文檔,就可以得到,分支就是一個有名字的(master/dev)指向 commit 對象的一個指針。

我們在初始化倉庫的時候,提供會默認(rèn)給我們分配一個叫做 master 的分支(在最新的版本默認(rèn)倉庫已經(jīng)變更為 main 了),而 master 分支就是指向最新的一次提交。為什么需要給分支起名字呢?就是為了方便我們使用和記憶,可以簡單理解為 alias 命令的意義一致。

有了上述基礎(chǔ),我們就需要考慮下,分支到底是如何實現(xiàn)和工作的。要實現(xiàn)一個分支,我們最基本需要解決兩個問題,第一個就是需要存儲每一個分支指向的 commit,第二個問題就是在切換分支的時候幫助我們標(biāo)識當(dāng)前分支。

在 Git 中,它有一個非常特殊的 HEAD 文件。而 HEAD 文件是一個指針,其有一個特性就是總會指向當(dāng)前分支的最新的一個 commit 對象。而這個 HEAD 文件正好,解決了我們上面提出的兩個問題。

當(dāng)我們從 master 切換分支到 dev 的時候,HEAD 文件也會隨即切換,即指向 dev 這個指針。設(shè)計就是這么美麗,不愧是鬼才,好腦袋。

# 左邊執(zhí)行
$ cat .git/HEAD
$ cat .git/refs/heads/master
$ git cat-file -t 1711e01

# 右邊執(zhí)行
$ glo = git log


分支操作的背后邏輯

執(zhí)行完成了 git branch 命令,究竟做了什么呢?

這里我們可以看到分支切換之后,HEAD 指向發(fā)生變動了。
# 左邊執(zhí)行
$ git branch
$ git branch dev
$ ll .git/refs/heads
$ cat .git/refs/heads/master
$ cat .git/refs/heads/dev
$ cat .git/HEAD
$ git checkout dev
$ cat .git/HEAD

# 右邊執(zhí)行
$ glo = git log


這里需要注意的是,即使我們刪除了分支,但是該分支上一些特有的對象并不會被刪除的。這些對象其實就是我們俗稱的垃圾對象,還有我們多次使用 add 命令所產(chǎn)生的也有垃圾對象,而這些垃圾對象怎么清除和回收呢?后續(xù),我們會涉及到的。

# 左邊執(zhí)行
echo "dev" > dev.txt
$ git add dev.txt
$ git commit -m "1st commit from dev branch"
$ git checkout master
$ git branch -d dev
$ git branch -D dev
$ git cat-file -t 861832c
$ git cat-file -p 861832c
$ git cat-file -p 680f6e9
$ git cat-file -p 38f8e88

# 右邊執(zhí)行
$ glo = git log


checkout 和 commit 操作

我們一起聊一聊,checkout 和 commit 的操作!

我們執(zhí)行 checkout 命令的時候,其不光可以切換分支,而且可以切換到指定的 commit 上面,即 HEAD 文件會指向某個 commit 對象。在 Git 里面,將 HEAD 文件沒有指向 master 的這個現(xiàn)象稱之為 detached HEAD。

這里不管 HEAD 文件指向的是分支名稱也好,是 commit 對象也罷,其實本質(zhì)都是一樣的,因為分支名稱也是指向某個 commit 對象的。

# 左邊執(zhí)行
$ git checkout 6e4a700
$ git log

# 右邊執(zhí)行
$ glo = git log


當(dāng)我們切換到指定的 commit 的時候,如果需要在對應(yīng)的 commit 上繼續(xù)修改代碼提交的話,可以使用上述圖片中提及的 swtich 命令創(chuàng)建新分支,再進(jìn)行提交。但是,通常我們都不會著玩,都會使用 checkout 命令來創(chuàng)建新分支的。

$ git checkout -b tmp
$ git log

即使可以這樣操作,我們也很少使用。還記得我們上一章節(jié)創(chuàng)建的 dev 分支嗎?我們創(chuàng)建了該分支并有了一個新的提交,但是沒有合并到 master 分支就直接刪除了?,F(xiàn)在再使用 log 命令查看的話,是看不到了。

實際,真的看不到了嗎?大家要記住,在 Git 里面任何的操作,比如分支的刪除。它只是刪除了指向某個特定 commit 的指針引用而已,而那個 commit 本身并不會被刪除,即 dev 分支的那個 commit 提交還是在的。

那我們怎么找到這個 commit 呢?找到之后,我們就可以在上面繼續(xù)工作,或者找到之前的文件數(shù)據(jù)等。

第一種方法:

  • [費勁不太好,下下策]

  • 在 objects 目錄下面,自己一個一個看,然后切換過去。


第二種方法:

  • [推薦的操作方式]

  • 使用 Git 提供的 git reflog 專用命令來查找。

  • 該命令的作用就是用于將我們之前的所有操作都記錄下來。


# 左邊執(zhí)行
$ git reflog
$ git checkout 9fb7a14
$ git checkout -b dev

# 右邊執(zhí)行
$ glo = git log


聊聊 diff 的執(zhí)行邏輯

當(dāng)我們執(zhí)行 diff 命令之后,Git 的邏輯它們是怎么對比出來的呢?

就在本節(jié)中中,我們使用上節(jié)的倉庫,修改文件內(nèi)容之后,看看 diff 命令都輸出了哪些內(nèi)容呢?我們這里一起來看看,研究研究!

echo "hello" > file1.txt
$ git diff
$ git cat-file -p 42d9955
$ git cat-file -p ce01362

# 下述命令原理也是一樣的
$ git diff --cached
$ git diff HEAD


Git 如何添加遠(yuǎn)程倉庫

如何將我們本地的倉庫和遠(yuǎn)程服務(wù)器上面的倉庫關(guān)聯(lián)起來呢?

初始化倉庫

$ git init
$ git add README.md
$ git commit -m "first commit"


關(guān)聯(lián)遠(yuǎn)程倉庫

當(dāng)我們使用上述命令來關(guān)聯(lián)遠(yuǎn)程服務(wù)器倉庫的時候,我們本地 .git 目錄也是會發(fā)生改變的。通過命令查看 .git/config 文件的話,可以看到配置文件中出現(xiàn)了 [remote] 字段。

# 關(guān)聯(lián)遠(yuǎn)程倉庫
$ git remote add origin [email protected]:escapelife/git-demo.git

? cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true

[remote "origin"]
    url = [email protected]:escapelife/git-demo.git
    fetch = +refs/heads/*:refs/remotes/origin/*


推送本地分支

當(dāng)我們執(zhí)行如下命令,將本地 master 分支推送到遠(yuǎn)程 origin 倉庫的 master 分支。之后,我們登陸 GitHub 就可以看到推送的文件及目錄內(nèi)容了。

推送分支內(nèi)容的時候,會列舉推送的 objects 數(shù)量,并將其內(nèi)容進(jìn)行壓縮,之后推送到我們遠(yuǎn)程的 GitHub 倉庫,并且創(chuàng)建了一個遠(yuǎn)程的 master 分支(origin 倉庫)。

# 推送本地分支
$ git push -u origin master

推送之后,我們可以發(fā)現(xiàn),本地的 .git 生成了一些文件和目錄,它們都是什么呢?如下所示,會新增四個目錄和兩個文件,皆為遠(yuǎn)程倉庫的信息。當(dāng)我們通過命令查看 master 這個文件的內(nèi)容時,會發(fā)現(xiàn)其也是一個 commit 對象。此時與我們本地 master 分支所指向的一致。而其用于表示遠(yuǎn)程倉庫的當(dāng)前版本,用于和本地進(jìn)行區(qū)別和校對的。

? tree .git
├── logs
│   ├── HEAD
│   └── refs
│       ├── heads
│       │   ├── dev
│       │   ├── master
│       │   └── tmp
│       └── remotes     # 新增目錄
│           └── origin  # 新增目錄
│               └── master  # 新增文件
└── refs
    ├── heads
    │   ├── dev
    │   ├── master
    │   └── tmp
    ├── remotes     # 新增目錄
    │   └── origin  # 新增目錄
    │       └── master  # 新增文件
    └── tags

遠(yuǎn)程倉庫存儲代碼

使用 GitLab 來了解遠(yuǎn)程倉庫的服務(wù)器到底是如何存儲,我們的代碼的!

當(dāng)我們編寫完代碼之后,將其提交到對應(yīng)的遠(yuǎn)程服務(wù)器上面,其存儲結(jié)構(gòu)和我們地址是一模一樣的。如果我們仔細(xì)想想的話,不一樣的話才見怪了。

Git 本來就是代碼的分發(fā)平臺,無中心節(jié)點,即每個節(jié)點都是主節(jié)點,所以其存儲的目錄結(jié)構(gòu)都是一直的。這樣,不管哪一個節(jié)點的內(nèi)容發(fā)生丟失或缺失的話,我們都可以通過其他節(jié)點來找到。而 Git 服務(wù)器就是一個可以幫助我們,實時都可以找到的節(jié)點,而已。

原文鏈接:https://www.escapelife.site/posts/da89563c.html

文章轉(zhuǎn)載:分布式實驗室
(版權(quán)歸原作者所有,侵刪)


點擊下方“閱讀原文”查看更多

瀏覽 32
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 中文字幕不卡+婷婷五月| 欧美sesese| 亚洲成人久久久| 欧美亚洲| 亚洲无码在线观看免费| 人妻熟女88AⅤ| 要操逼网| 亚洲国产色情| 九九九九精品| 精品成人Av一区二区三区| 国产又粗又黄| 免费无码进口视频| 欧美一级黄色片| 久久精品无码一区二区无码性色 | 天天免费视频| 久久人妻熟女中文字幕av蜜芽| 日韩99在线观看| 一本道精品在线| 爽妇综合网| 国产黄色片在线观看| 男女怕怕网站| 韩国成人无码| 日韩人妻精品无码| 青青草五月天色婷婷丁香| 看免费操逼视频| 开心色情| 99久久综合| 大香蕉伊人电影| 精品9999| h片免费观看| 久九视频| 另类无码| 国产AV一区二区三区精品| 日韩99在线观看| 豆花视频在线免费观看| 91麻豆精品91久久久ios版| 黄色成人在线观看| 大香蕉久在线| 欧美激情无码一区二区三区张丽| 爱操视频| 夜夜无码| 一道本一区二区三区| 国产aa| 亚洲精品久久久久久久蜜桃| 北条麻妃性爱视频| 色婷婷久久综合久色| 色丁香在线| 乱子伦国产精品www| 男人的天堂在线视频| 国产又粗又大又黄视频| 精品久久电影| 亚洲激情黑人| 亚洲日本三级| 亚洲免费黄色电影| 欧美操B在线| 少妇bbb搡bbbb搡bbbb| 婷婷五月色| 99热官网| 国产理伦| 日韩成人AV在线播放| 7799综合| 五月天福利导航| 91精品国产综合久久久久久久| 乖我硬了让老子cao你小视频| 辽宁模特张雪馨视频最新| 免费高清无码| 99久久精品国产一区色| 免费无码一区二区三区四区五区| 久久五月视频| 精品无码一区二区| 欧美午夜爱爱| 欧美三级片视频| 麻豆国产91| 91婷婷五月天| 黄片网站入口| 亚洲第一毛片| 日韩一及| A级黄色电影| 免费看欧美成人A片| 欧美三级网站在线观看| 欧美国产日韩综合在线观看170 | 中文字幕第315页| 日韩人妻无码专区一区二区| 婷婷狠狠爱| 丁香婷婷色五月| 日韩,变态,另类,中文,人妻| 午夜精品秘一区二区三区| 91精品丝袜久久久久久| 成人性生活免费视频| 大陆搡BBBBB搡BBBBBB| 俄罗斯熟妇搡BBBB搡BBBB| 开心色播五月天| 国产免费a| 亚洲三级片免费观看| 国产又爽又黄免费网站在线看| 日本久久婷婷| 91久久| 麻豆午夜福利| 99在线精品视频免费观看20| 色五月视频在线| 人妻少妇无码精品| 亚洲色一| 欧美精品成人| H网站在线观看| 亚洲色视频| 中文字幕在线观看二区| 97中文字幕| 成人免费网站黄| 秋霞二区| 久久婷婷亚洲| 精品人人人人| 人人插人人操| 69国产精品无码免费| 亚洲狼人| 国产一区二区免费| www.99免费视频| 安徽妇搡BBBB搡BBBB| 国产免费网址| 97人人插| 精品无码一区二区三区蜜桃李宗瑞| 国产色婷婷| A片黄色电影网站| 最美孕交vivoestv另类| x88AV吊钟奶熟女| 在线观看黄色| 日韩欧美国产高清91| 特黄色视频| 成人午夜精品福利免费| 人妻熟女一区二区| 羞羞涩漫无码免费网站入口| 国产高清无码在线| 五月天综合视频| 中文大香蕉视频| 成人无码动漫A片| 100国产精品人妻无码| 黄片在线免费观看| 天天插天天狠天天透| 午夜av电影| 一区免费视频| 人人免费操| 操b在线免费观看| 日韩一级欧美一级| AV青青草| 男女草逼视频| 国产美女操逼| 国产av三级片| 大鸡巴日小逼| 日日av| AV在线一区二区三区| 日韩AV免费网站| 国产不卡在线| 成年人免费电影| 好看的中文字幕av| 国产一级黄色| 无码操逼视频| 黄色av免费网站| 欧美18禁黄免费网站| 嫩小槡BBBB槡BBBB槡漫画| 日韩欧美成人片| 91香蕉在线观看视频在线播放| 国产1页| 成人AV一区二区三区| 亚洲日本一区二区三区| 中文字幕日韩人妻| 草逼国产| 欧美做受高潮白| 香蕉网站操逼片| 在线观看国产黄色| 狠狠插狠狠操| 无码在线专区| 久草A片| 国产中文字幕视频| 91精品久久久久久久久| 欧美日韩北条麻妃视频在线观看 | 欧美V| 国内精品久久久久久久久久| 日韩欧美中文在线观看| 蜜桃av| 少妇人妻无码| 免费无码婬片AAAA片老婦 | 国产三级片网站| 无码一区三区| 日日干av| 国产白丝精品91爽爽久久| www人人操| 日韩A片一级无码免费蜜桃| 一级黄片免费观看| 丁香天堂| 亚洲日韩AV电影| 俺来也操逼| 91丨九色丨东北熟女| 美女白嫩嫩大BBB欣赏| 日韩无码av电影| 国内精品人妻无码久久久影院蜜桃| 99色天堂| 国产精品九九九| 亚洲日韩Av无码中文字幕美国| 亚洲福利视频网站| www.五月天.con| 人人草在线| 成人AV在线看| 国产骚妇| 在线免费A片| 性天堂| 可以免费看av的网站| 狼友免费视频| TokyoKot大交乱无码| 日韩操B| 东京热视频一区| 国产美女啪啪视频| 97视频国产| 无码精品黑人| 99精品一区二区| 操屄国产| 91视频美女模特| 久久久在线| 国产人妖在线观看| 久久综合久久鬼| 9797色色| 中日韩特黄A片免费视频| 黄色生活片| 91香蕉视频在线看| 天天操天天干麻豆| 大吊无码| 影音先锋人妻限定| 精品国产99久久久久久www| 亚洲热在线| 中文在线字幕电视剧免费平台| 99热这里有精品| 免费成人一级片| 影音先锋无码专区| 息子交尾一区二区三区| 日本亚洲视频| 国产女人18毛片水18精品软件 | 强奷伦奷片91| 亚洲欧美动漫| 久草综合在线| 一区二区三区高清无码| 男女视频网站| 国产操比视频| 伊人久久中文字幕| 日本一本不卡| 日韩无码免费看| 狠狠干五月天| 亚洲精品视频免费看| 久久99网站| 一区二区三区四区五区无码| 亚洲色婷婷五月天| 特级西西西88大胆无码| 欧美成人手机在线观看| 成人大香蕉视频| 精品久久无码| 亚洲婷婷在线视频| 精品色哟哟| www.re99| 成人av免费观看| 婷婷伊人中文字幕| 久本草精品| 日韩a在线观看| 日本黄色三级| 无码不卡av| AV在线免费网站| 国产理论片在线观看| 亚洲无码www| 俺也去在线| av一区二区三区四区| 中文字幕+乱码+中文乱码电影| 国产乱子伦视频国产印度| 欧美激情综合网| 久久草大香蕉| AV免费播放| 欧美性爱无码| 在线视频你懂得| 欧美一区二区三区四区视频 | 日本一区二区视频在线观看| 无码中文字| 成人精品一区日本无码网站suv/ | 激情中文网| 婷婷丁香五月花| 伊人大香焦网| 91精品久| 亚洲日韩视频在线播放| 国产小视频在线播放| 亚洲中文婷婷| 嫩小槡BBBB槡BBBB槡漫画| 中韩无码| www黄片| 超级碰碰碰碰碰碰碰碰碰| 青青草免费在线视| 亚洲无码伊人| 阿v视频在线观看| 2019国产精品| 久久精品99久久久久久| 日韩毛片网| 色婷婷色| 色999在线播放视频| 天天干天天日蜜臀色欲av| 友田真希一级婬片A片| 69福利| 日韩一区在线播放| 狠狠操狠狠操狠狠操| 国产特级毛片| 97人妻| 丁香花在线小说免费阅读| jzzijzzij亚洲成熟少妇在线观看 九色蝌蚪9l视频蝌蚪9l视频成人熟妇 | 国产精品视频无码| 国产午夜精品电影| www.蜜桃| 久久免费看视频| 青青青国产在线| 亚洲AV黄色| 欧美网站在线观看| 日韩精品人妻中文字幕有码| 成人视频18| 国产一级a毛片| 黄色免费AV| 黄色电影一区二区| 欧洲一区二区三区| www.欧美日韩| 欧美性大香蕉| 欧美国产精品一区二区三区| 午夜久久电影| 国产青青| 国产日韩性爱视频| 午夜福利老司机| 男女无套在线观看免费| 国产熟妇毛多久久久久一区| 亚洲精品自拍| 九九九九九九国产| 亚洲第一成人久久网站| 波多野结衣久久中文字幕| A片在线观看视频| av福利电影在线| 日本黄色片在线播放| av网站在线免费观看| 免费亲子乱婬一级A片| 香蕉婷婷亚洲丁香| 亚洲中文字幕成人| 久久一卡二卡| 激情91| 69av电影| 亚洲视频精品| 国产一级a毛一级a毛视频在线网站 | 羞羞午夜| 六月婷婷久久| 日本高清色清di免费观看| 亚洲综合网在线观看| 女生操逼网站| 99久久久久| 国产亚洲综合无码| 在线观看黄A片免费网站| 九九九久久久| 91re| 国产麻豆精品成人免费视频| 亚洲成人日韩| 国产精品国产自产拍高清AV| 最近中文字幕av| 国产h在线| 日本在线免费观看| 欧美日韩色视频| 91人妻最真实刺激绿帽| 亚洲精品区| yjizz国产| 在线观看日韩AV| 免费一级A片| 国产一级婬乱片免费| 国产精品免费人成人网站酒店| 中文字幕亚洲有码| 女人BBBB| 永久免费av| 韩国AV三级| 性BBW| h片免费在线观看| 黄总av| 亚洲综合精品| 午夜一区二区三区| 国产秘精品区二区三区日本| 福利毛片| 亚洲国产一区二区三区四区| 黄色视频在线免费观看网站| 中文无码人妻| 国产精品一卡二卡三卡| 欧洲成人在线视频| 一级做a爰片毛片A片| 五月天激情四射| 翔田千里珍藏版无码| 福利视频导航自拍| 成人激情在线视频| mm131亚洲国产精品久久| 中文无码一区二区三区四区| 亚洲视频免费看| www.欧美精品| 婷婷五月AV| 日本午夜三级视频| 一区二区三区四区精品视频| 九九九精品| 午夜探花在线观看| 午夜A片| 男人的天堂网页| 亚洲无码视频免费看| 成人丁香五月天| 国产黄色视频免费观看| 国产aaaaaaaaaaaaa| 色老板最新网址| 国偷自产视频一区二区久| 老太色HD色老太HD| 91要爱爱| 狼友无码| 在线不卡中文字幕| 人人操在线播放| 免费观看一级黄片| 91小仙女jK白丝袜呻吟| 中文字幕精品三区无码| 婷婷五月香| 国产一级性爱| 91大片| 日本亲子乱婬一级A片| 婷婷丁香六月| 天堂av在线免费观看| 国产中文字幕亚洲综合欧美| 欧美婷婷综合| 中文字幕乱码亚洲无线码按摩| 婷婷成人综合| 欧美XXXXBBBB| 91日逼视频| 男人天堂网av| 亚洲性爱一区| 欧美日韩中文字幕在线视频| 丹麦电影《下午》| 日本91| 亚洲超级高清无码第一在线视频观看 | 北条麻妃99精品青青久久| 天天爽日日澡AAAA片| 欧美日韩精品一区二区三区视频播放| 日韩性爱视频| 国产无码中文| 好逼天天操| 动漫3d啪啪成人h动漫| 国产精品精品精品| 成人电影aaa| 中文字幕不卡一区| 日韩不卡中文字幕| 日本色综合| 老婆被黑人杂交呻吟视频| 亚洲精品三级在线观看| 国产精品免费看| 最近中文字幕在线观看| 亚洲成人一区| 无码人妻精品一区二区三区蜜桃91 | 无码一区二区黑人猛烈视频网站| 日韩小视频| 欧美老熟女18| 久久成人影音先锋| 丰满人妻一区二区三区| 国产精品视频网站| 男女抽插视频| 亚洲vs无码秘蜜桃少妇| 老熟妇搡BBBB搡BBBB| 人人妻人人做| 天天干,夜夜操| 亚洲性片| 91网站观看| 久草在线| 免费无码AV| 午夜欧美性爱视频| 天天操嫩逼无套视频| 影音先锋资源站| 亚洲无码中文字幕在线| 国产一级美女操逼视频免费播放| 精品人妻一区二区蜜桃视频| 成人福利电影| 亚洲啊v| 蜜桃av秘无码一区二区三区| 亚洲国产精品二二三三区| 精品人人人| 91av在线播放| 骚逼操| 韩国三级HD中文字幕的背景音乐| 中文字幕人成人乱| 精品国产99久久久久久www| 91av在线观看视频| 亚洲欧美在线观看| 色婷婷AV一区二区三区软件| 人妻少妇精品无码| 国产在线色视频| 日韩操逼片| 免费看成人片| 婷婷高清无码| 天天视频亚洲| 韩日一级17c| 91大鸡巴| 可以免费看AV的网站| 大香蕉色视频| 拍拍AV| 亚洲一区视频| 日韩无码人妻一区二区| 国产女人18毛片水真多成人如厕| 蜜桃成人久久| 网站色色免费看| 蜜桃av秘无码一区二区| 久久久久久久久久久成人| 狠狠干天天操| 久久视频网站| aaa少妇| 强奷伦奷片91| 亚洲国产免费| 一区二区有限公司| 91成人视频免费观看| 亚洲精品无码人妻| 91香蕉视频| 精品成人电影| 丰满人妻一区二区三区精品高| 久久久免费观看视频| 美女网站永久免费观看| www91久久| 日韩在线观看| 91人人干| 欧美日韩综合| 911精品人妻一区二区三区A片| 欧美国产精品一区二区三区| AV第一页| 秋霞二区| 山东熟妇搡BBBB搡BBBB| 最新AV| 操人网站| 蜜臀av在线观看| 东方av在| 探花极品无套大学生| 2017天天干天天射| 亚洲无码免费视频在线观看| 国产操比网| 97在线观看视频| 免费无码视频在线观看| 69国产精品| 狼人香蕉网| aaaaaa在线观看免费高清| 四虎在线免费视频| 国产白浆一区二区三区| 97人人操人人干| 超碰在线观看2407| 北条麻妃久久视频在线播放| 黄色日逼视频| 嫩BBB嫩BBB嫩BBB| 国产高清无码自拍| 久久悠悠| 你懂的在线观看| 欧美一级黃色A片免费看小优视频| 五月丁香狠狠爱| 高潮免费视频| 欧美久久大香蕉| 成人免费网站在线| www.199麻豆在线观看网站 | 久久婷婷亚洲| 亚洲国产爱| 日韩午夜av| 在线观看免费国产| 91丨露脸丨熟女抽搐| 一区二区入口| sm在线观看| 911国产精品| 欧美亚洲自拍偷拍| 综合久久中文字幕| 91福利视频在线观看| av东方在线| 91一级特黄大片| 在线国产中文字幕| 中文字幕在线电影| 中文字幕av第一页| 国产一区二区三区在线观看免费视频免费视频免费视频 | 中文字幕无码亚| 粉嫩av懂色av蜜臀av熟妇| 亚洲性片| 欧美国产日韩在线观看| 北条麻妃在线中文字幕| 大香蕉超碰在线| 91青青草视频| 成人特级毛片| 69黄色视频| 少妇视频| 亚洲成人av| 一级黄色大毛片| 国产美女操逼网站| 大香蕉伊人免费| 亚洲波多野结衣| 操b视频在线播放| 精品热99| 亚洲日韩免费| 麻豆一区在线观看| 男女拍拍免费视频| 日本A片免费看| 91成人视频18| 欧美一区二区无码视频| 亚洲高清无码视频| 日韩在线观看AV| 精品女同一区二区三区四区外站在线 | 国产成人三级| www.97yy| 亚洲AV第一页| 97人妻人人操| 精品国精品自拍自在线| 老湿机福利院| 99在线看| www.av91| 免费A级毛片在线播放不收费| 美女毛片视频| 欧美日本激情| 91精品国产一区二区三区四区大| 亚洲一本大道| 91亚洲免费视频| 欧美中文字幕在线播放| 一区二区三区成人电影| 日本女人操逼视频| 伊人网站| 五月天婷婷在线播放视频免费观看 | 一区二区三区www污污污网站| 操逼激情网| 躁BBB躁BBB躁BBBBB乃| 天天爽| 欧美中文字幕在线| 亚洲国产成人精品综合99| 国产91丝袜在线播放| 精品无码一区二区三区蜜桃李宗瑞| 欧美亚洲三级| 免费的A片| 中国女人操逼视频| 粉嫩AV蜜乳AV蜜臀AV蜂腰AV | 黄色激情五月| 无码AV电影| 日本二区| 香蕉大综合| 大香蕉亚洲在线| 亚洲区欧美区| 99无码视频| 美日韩在线观看| 围内精品久久久久久久久白丝制服| 天干天干天夜夜| 成人无码人妻| 大香蕉国产视频| 苍井空中文字幕在线观看| 老汉av| 国产三级片自拍| 欧美a视频| 在线国产黄色| 激情五月俺也去| 亚洲区欧美区| 热久久91| 人妻体内射精一区二区| 中文字幕在线不卡| 青草娱乐| 日韩成人无码电影网站| 青娱乐在线视频精品| 欧美一二区| 黄色免费在线观看网站| 亚洲制服中文字幕| 亚洲欧洲日韩| 久草视频免费在线观看| 亚洲国产av电影| 国产精品无码激情| 极品少妇AV| 牛牛成人在线视频| 美女扣逼网站| 久久久久久高清毛片一级| 精品三级片| 色婷婷香蕉在线一区二区| 成人a片视频| 天天干,夜夜操| 97人妻人人操| 91黄色视频网站| yw尤物| 18禁成人A∨片| 超碰福利在线| 免费看操逼| 色播网址| 老妇槡BBBB槡BBBB槡| 日韩欧美久久| 国产熟女AV| 国产一卡二卡在线| 国产亚洲久一区二区| A免费在线观看| 北条麻妃无码中文| 影音先锋av色| 四川少妇bbbbbbbbb| 97人妻在线| 日本三级片无码| 一级国产欧美成人A片| 三级久久| 51妺嘿嘿午夜福利视频| 色色看片| 欧美大鸡吧视频| 九色PORN视频成人蝌蚪自拍| 69天堂| eeuss久久| 五月丁香成人网| 日韩在线高清视频| 日皮视频在线看| 悠悠无码一区日韩妇女| 波多野结衣av在线观看| 中韩无码| 三级乱伦视频| 欧美成人午夜| 国产成人精品亚洲男人的天堂| 丁香五月天社区| 国产精品色| 草逼视频网站| 毛片在线视频| 久久久永久免费视频| 99视频精品在线| 欧洲精品在线免费观看| 男女啪啪| 国产综合亚洲精品一区二| 老熟妇搡BBBB搡BBBB| 北条麻妃无码在线观看| japanese在线观看| 国产精品毛片久久久久久久| 特级西西444www大胆高清图片 | 黄色成人视频免费看| 亚洲免费观看高清| 日日操人人操| 伊人大香蕉综合| 色香蕉网| 国产熟妇婬乱一区二区| 免费的黄片| 一级A片在线观看| 国产精品XXX视频| 无码视频免费在线观看| 操B影院| 久久丁香| 中文一线二线视频| 天天操夜夜骑| 天天躁天干天干| 色色网站| 国产美女一级真毛片酒店| 欧美综合亚洲图片综合区| 亚洲人妻在线播放| brazzers疯狂作爱| 不卡视频一区二区| 爱爱欧美| 黄色激情视频网站| 日本中文字幕精品| 黄色www| 97久久精品| 苍井空亚洲精品AA片在线播放| 91精品日韩| 日韩中文字幕一区二区三区| 2025AV天堂网| 伊人网视频在线播放| www.第四色| 四虎成人在线| 91一区| 黄网站在线播放| 九九性视频| 精品无码在线| 青青草原免费在线视频| 少妇一区二区三区| 亚洲性爱在线播放| 在线看片国产| 一级黄色视频在线观看| 国产精品9999久久久久仙踪林 | 苍井空一区二区三区四区| 激情乱伦五月天| 91精品国产一区三一| 影音先锋一区二区三区| 色片无码| 日日夜夜天天操| 四川少妇BBBB槡BBBB槡| 亚洲人人18XXX—20HD| 成人免费无码婬片在线| 黄色视频在线免费观看网站| 青娱乐三级在线免| 成人无码区免费A片久久| 亚洲网站免费在线观看| 国产毛片在线看| 福利一区在线观看| 丁香婷婷色五月激情综合三级三级片欧美日韩国 | 91人妻最真实刺激绿帽| 久久久久久久久久久久成人| 精品免费国产一区二区三区四区的使用方法 | 久久久综合网| 五月婷婷激情网| 日本一级黄色A片| 亚洲无码在线观看免费| 口爆吞精在线观看| 丁香六月色| 91外围女视频| 日韩中文字幕人妻| 国产精品一区二区免费| 91AV视频| 成人激情在线视频| 亚州一级成人片| 亚洲成人免费网站| 狠狠色噜噜狠狠狠7777| 精品AV无码一区二区三区| 操逼观看| 波多野结衣av在线观看| 日韩美女毛片| 翔田千里AV在线| 乱伦视频91| www久草| 天天干天天射天天操| 精品无码三级在线观看视频 | 北条麻妃视频在线播放| 激情欧美| 五月婷婷色综合| 亚洲三级av| 人妻人人妻| www.91av| 夜夜操天天操| 亚洲综合在线观看视频| 家庭乱伦影视| 欧美成人视频。| 91综合视频| 手机在线观看av| 97超碰成人| 四川妇BBB桑BBB桑BBB| 七十路の高齢熟女千代子| 成人在线中文| 国产精品扒开腿| 久久AV电影| 香蕉视频在线看| 少妇高潮喷水| 亚洲无码人妻在线| 国产激情免费| 久久久久久久久久久高清毛片一级| 农村老太HD肉HD| 9久久精品| 开心色播五月| 99视频精品| 久热福利视频| 日韩第五页| 国产欧美在线免费观看| 丁香五月天激情| 国产激情| 青青草成人网站| 日本老女人视频| 青青草Av| 成人三级电影网| 成人在线免费| 国产—a毛—a毛A免费| 大香蕉啪啪视频| 日韩黄色小电影| 激情婷婷色五月| 激情AV在线观看| 日韩免费一级| 国产一级AV片| 亚洲精品视频免费在线观看| 清清草在线视频| 超碰自拍97| 欧美性爱一级视频| 久久久久久久人妻丝袜| 中日韩欧美一级A片免费| 国产精品一卡| 在线观看99| 91AV成人| 91人妻人人澡人人爽人妻| 一个人看的www日本高清视频| 国产曰韩欧美综合另类在线 | 偷拍欧美日韩| 五月天婷婷丁香网| 亚洲日韩精品无码| 一区无码精品| 欧美操大逼| 激情久久五月天| 亚洲国产熟妇综合色专区| 亚洲一二三| 国产精品内射婷婷一级二| 国产高清无码一区二区三区| 日韩在线观看视频网站| 亚洲免费黄| 久久久精品少妇| 欧美精品毛片| 亚洲精品国产精品乱玛不99| 国产成人免费视频| 强伦轩一区二区三区四区播放方式| 精品A片| 色婷婷一区二区| 最近中文字幕mv第三季歌词| 婷婷五月一区| 三级片一区| 亚洲成人在线无码| 成人AV一区二区三区| 777大香蕉| 天天搞天天干| 无码六区| 九九热视频99| 精品伊人久久| 亚洲第一成人久久网站| 肏逼网站在线观看| 人妻精品一区二区在线| 中文字幕无码一区二区| 精品人妻系列| 亚洲影院第一页在线观看| 特级西西| 丁香五月伊人| jizz免费观看| 2021国产精品视频| 四虎成人精品永久免费AV九九| 久久视频99| 无码在线观看免费| 国产精品精品精品| 久久久久99|