前端 技術之 Git&GitHub 第一章Git 操作 一、分散式版本控制系統在 這類系統如 Git 、BitKeeper , 客戶端並不只提取最新版本的文件快照,而是把代碼倉庫完整地鏡像下來 。這麼一分散式的版本控制系統在管理項目時 存放的不是項目版本與版本之間的差異 它存的是索引 所需磁碟空間很 ...
前端 技術之 Git&GitHub
第一章Git 操作
一、分散式版本控制系統在 這類系統如 Git 、BitKeeper , 客
戶端並不只提取最新版本的文件快照,而是把代碼倉庫完整地鏡像下來 。這麼一分散式的版本控制系統在管理項目時 存放的不是項目版本與版本之間的差異 它存的是索引 所需磁碟空間很少 所以每個客戶端都可以放下整個項目的歷史記錄分散式的版本控制系統出現之後 解決了集中式版本控制系統的缺陷
1. 斷網的情況下也可以進行開發 因為版本控制是在本地進行的
2. 使用 github 進行團隊協作 哪怕 github 掛了 每個客戶端保存。
的也 都是整個完整的項目 包含歷史記錄的。
Windows 上安裝:https://git-scm.com/download/win
在 Mac 上安裝:git地址 https://git scm.com/download/mac
二、Git 初始化配置
一般在新的系統上,我們都需要先配置下自己的 Git 工作環境。配置工作只需一
次,以後升級時還會沿用現在的配置。當然,如果需要,你隨時可以用相同的命令修
改已有的配置。
Git 提供了一個叫做 git config 的 命令 來配置或讀取相應的工作環境變數而正是由
這些環境變數,決定了 Git 在各個環節的具體工作方式和行為。這些變數可以存放
在以下三個不同的地方:
/etc/gitcon fig 文件:系統中對所有用戶都普遍適用的配置。若使用 git
更多 Java –大數據 –前端 –python 人工智慧資料下載,可百度訪問:尚矽谷官網
config 時用 system 選項,讀寫的就是這個文件。
~/.gitconfig 文件:用戶目錄下的配置文件只適用於該用戶。若使用 git
config 時用 global 選項,讀寫的就是這個文件。
.git/config 文件 當前項目的 Git 目錄中的配置文件(也就是工作目錄
中的 .git/config 文件)這裡的配置僅僅針對當前項目有效。每一個級別的配置都會覆蓋上層的相同配置
配置內容:用戶信息
第一個要配置的是你個人的用戶名稱和電子郵件地址。這兩條配置很重要,每次 Git 提交時都會引用這兩條信息,說明是誰提交了更新,所以會隨更新內容一起被永久納入歷史記錄:
git config global user.name damu
git config global user.email damu @example.com
要檢查已有的配置信息,可以使用 git config --list 命令 刪除配置信息 git config g lobal u nset user.email
Git 底層概念(底層命令): 基礎的 linux 命令
clear:清除屏幕
echo 'test content':往控制台輸出信息 echo 'test content' > test.txt
ll:將當前目錄下的 子文件 子目錄平鋪在控制台
find目錄名 將對應目錄下的子孫文件 子孫目錄平鋪在控制台
find目錄名 type f :將對應目錄下的文件平鋪在控制台
rm文件名 刪除文件
mv源文件 重命名文件 : 重命名
cat文件的 url : 查看對應文件的內容
vim文件的 url( 在英文模式下)
按 i 進插入模式 進行文件的編輯
按esc 鍵 按 鍵 進行命令的執行
q! 強制退出(不保存)
wq 保存退出
set nu 設置行號
初始化新倉庫
命令:git init
解析: 要對現有的某個項目開始用 Git 管理,只需到此項目所在的目錄,執行: git init
作用: 初始化後,在當前目錄下會出現一個名為 .git 的目錄(如果沒有看到點擊文件上方的菜單欄的查看√隱藏的項目就可以看見.git文件了),所有 Git 需要
的數據和資源都存放在這個目錄中。不過目前,僅僅是按照既有的結構框架初始化
好了裡邊所有的文件和目錄,但我們還沒有開始跟蹤管理項目中的任何一個文件。
.git文件目錄的各個文件的含義如下:
hooks 目錄 包含客戶端或服務端的鉤子腳本;
info 包含一個全局性排除文件;
logs 保存日誌信息;
objects 目錄存儲所有數據內容;
refs 目錄存儲指向數據的提交對象的指針(分支);
config 文件包含項目特有的配置選項;
description 用來顯示對倉庫的描述信息;
HEAD 文件指示目前被檢出的分支;
index 文 件保存暫存區信息;
git 對象
Git 的核心部分是一個簡單的鍵值對資料庫 。 你可以向該資料庫插入任意類型
的內容,它會返回一個鍵值,通過該鍵值可以在任意時刻再次檢索該內容。
1、向資料庫寫入內容 並返回對應鍵值
命令:echo 'test content' | git hash-object -w --stdin
-w 選項指示 hash-object 命令存儲數據對象;若不指定此選項,則該命令僅返回對應的鍵值
--stdin(standard input)選項則指示該命令從標準輸入讀取內容;若不指定此選項,則須在命令尾部給出待存儲文件的路徑
git hash-object -w 文件路徑
存文件
git hash-object 文件路徑
返回對應文件的鍵值
d670460b4b4aece5915caf5c68d12f560a9fe3e4
返回:該命令輸出一個長度為 40 個字元的校驗和。 這是一個 SHA-1 哈希值
2、 查看 Git 是如何存儲數據的
命令:find .git/objects -type f 返回:.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4
這就是開始時 Git 存儲內容的方式:一個文件對應一條內容。校驗和的前兩個字元用於命名子目錄,餘下的 38 個字元則用作文件名。
3、根據鍵值拉取數據
命令:git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4
-p 選項可指示該命令自動判斷內容的類型,併為我們顯示格式友好的內容
返回:對應文件的內容
對一個文件進行簡單的版本控制
1、創建一個新文件並將其內容存入資料庫
命令:echo 'version 1' > test.txt
git hash-object -w test.txt
返回:
83baae61804e65cc73a7201a7252750c76066a30
2、 向文件里寫入新內容,並再次將其存入資料庫
命令:echo 'version 2' > test.txt
git hash-object -w test.txt
返回:1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
3、查看資料庫內容
命令:
find .git/objects
type f
git cat
file p 83baae61804e65cc73a7201a7252750c76066a30
git cat
file p 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
git cat
file t 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
利用 cat-file -t 命令,可以讓 Git 告訴我們其內部存儲的任何對象類型
返回:blob
問題:
1. 記住文件的每一個版本所對應的 SHA-1 值並不現實
2. 在Git中,文件名並沒有被保存——我們僅保存了文件的內容
解決方案:樹對象
註意:當前的操作都是在對本地資料庫進行操作 不涉及暫存區
構建樹對象
樹對象( tree object ),它能解決文件名保存的問題,也允許我們將多個文件
組織到一起 。 Git 以一種類似於 UNIX 文件系統的方式存儲內容 。 所有內容均以
樹對象和數據對象 (git 對象 的形式存儲,其中樹對象對應了 UNIX 中的目錄項,
數據對象 (git 對象 則大致上對應文件內容 。 一個樹對象包含了一條或多條記錄 每條記錄含有一個指向 git 對象或者子 樹對象的 SHA 1 指針 以及相應的模式、類
型、文件名信息 )。 一個樹對象 也可以 包含 另一個樹對象。
我們可以通過update-index;write-tree;read-tree等命令來構建樹對像並塞入到暫存區。
假設我們做了一系列操作之後得到一個樹對像。
操作
1. 利用update -index 命令 為 test.txt 文件的首個版本——創建一個暫存區。並通過write-tree 命令 生成樹對像。
命令:git update index add cacheinfo 100644\
83baae61804e65cc73a7201a7252750c76066a30 test.txt
git write-tree
文件模式為 100644 ,表明這是一個普通文件
100755,表示一個可執行文件
120000 ,表示一個符號鏈接 。
--add 選項因為此前該文件並不在暫存區中首次需要 add
--cacheinfo 選項因為將要添加的文件位於Git 資料庫中,而不是位於當前目錄下 所有需要 cacheinfo
2. 新增new.txt 將new.txt 和 test.txt 文件的第二個個版本塞入暫存區。並通過write-tree 命令 生成樹對像。
命令:echo 'new file' > new.txt
git updateindex cacheinfo 100644\1f7a7a472abf3dd9643fd615f6da379c4acb3e3a test.txt
git- update-index --add new.txt
git write-tree
3. 將第一個樹對象加入第二個樹對象,使其成為新的樹對象
命令:git read-tree
--prefix=bak d 8329fc1cc938780ffdd9f94e0d364e0ea74f579
git write-tree
read-tree 命令,可以把樹對象讀入暫存區。
尚矽谷前端 技術之 Git&GitHub 鏈接:https://share.weiyun.com/hWHc9ABJ 密碼:n6e4yv
更多IT知識可以找我探討我的vx:cmL46679910
Q:1820836501