溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

git 學習筆記

發布時間:2020-07-26 13:25:16 來源:網絡 閱讀:573 作者:冬菇0123 欄目:數據庫

  Git是一款免費、開源的分布式版本控制系統,用于敏捷高效地處理任何或小或大的項目,為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。

       GitHub網站為開源項目免費提供Git存儲。

       GitLab 是一個用于倉庫管理系統的開源項目。使用 Git作為代碼管理工具,并在此基礎上搭建起來的web服務。

       Git 和其他版本控制系統的主要差別在于,Git 只關心文件數據的整體是否發生變化,而大多數其他系統則只關心文件內容的具體差異。這類系統(CVS,Subversion,Perforce,Bazaar 等等)每次記錄有哪些文件作了更新,以及都更新了哪些行的什么內容,Git 是把變化的文件作快照后,記錄在一個微型的文件系統中。每次提交更新時,它會縱覽一遍所有文件的指紋信息并對文件作一快照,然后保存一個指向這次快照的索引。為提高性能,若文件沒有變化,Git 不會再次保存,而只對上次保存的快照作一鏈接。Git 的工作方式如下圖。

 

git 學習筆記

Git的優點:

  1. 處理速度快

    操作都只需要訪問本地文件和資源,不用連網

  2. 時刻保持數據完整性

    在保存到 Git 之前,所有數據都要進行內容的校驗和(checksum)計算,并將此結果作為數據的唯一標識和索引。如果文件在傳輸時變得不完整,或者磁盤損壞導致文件數據缺失,Git 都能立即察覺。 實際上,所有保存在 Git 數據庫中的東西都是用此哈希值來作索引的,而不是靠文件名。 

  3. 多數操作僅添加數據

    常用的 Git 操作大多僅僅是把數據添加到數據庫。因為任何一種不可逆的操作,比如刪除數據,都會使回退或重現歷史版本變得困難重重,在 Git 里,一旦提交快照之后就完全不用擔心丟失數據,特別是養成定期推送到其他倉庫的習慣。 

Git文件的三種狀態:

       對于任何一個文件,在 Git 內都只有三種狀態:已提交(committed),已修改(modified)和已暫存(staged)。已提交表示該文件已經被安全地保存在本地數據庫中了;已修改表示修改了某個文件,但還沒有提交保存;已暫存表示把已修改的文件放在下次提交時要保存的清單中。 由此我們看到 Git 管理項目時,文件流轉的三個工作區域:Git 的工作目錄,暫存區域,以及本地倉庫。我們可以從文件所處的位置來判斷狀態:如果是 Git 目錄中保存著的特定版本文件,就屬于已提交狀態;如果作了修改并已放入暫存區域,就屬于已暫存狀態;如果自上次取出后,作了修改但還沒有放到暫存區域,就是已修改狀態。

      

  1. 每個項目都有一個 Git 目錄(如果 git clone 出來的話,就是其中 .git 的目錄;如果 git clone --bare 的話,新建的目錄本身就是 Git 目錄。),它是 Git 用來保存元數據和對象數據庫的地方。該目錄非常重要,每次克隆鏡像倉庫的時候,實際拷貝的就是這個目錄里面的數據。 

  2. 從項目中取出某個版本的所有文件和目錄,用以開始后續工作的叫做工作目錄。這些文件實際上都是從 Git 目錄中的壓縮對象數據庫中提取出來的,接下來就可以在工作目錄中對這些文件進行編輯。 

  3. 所謂的暫存區域只不過是個簡單的文件,一般都放在 Git 目錄中。有時候人們會把這個文件叫做索引文件,不過標準說法還是叫暫存區域。 

基本的 Git 工作流程如下: 

  1. 在工作目錄中修改某些文件。 

  2. 對修改后的文件進行快照,然后保存到暫存區域。 

  3. 提交更新,將保存在暫存區域的文件快照永久轉儲到 Git 目錄中。

Git的安裝過程(CentOS)

1.檢查Git的版本號,CentOS默認安裝的是git 1.7.X版本,可將其更新到2.0.5

# git --version

2.安裝所需的軟件包

# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

# yum -y install  gcc perl-ExtUtils-MakeMaker

3.刪除現有的git(yum remove 命令盡可能不要使用)

# yum -y remove git

4.使用軟件包安裝

# wget httos://www.kerenl.org/pub/software/scm/git/git-2.0.5.tar.gz

# tar zxf git-2.0.5.tar.gz -C /usr/src

# cd /usr/src/git-2.0.5/

# make prefix=/usr/local/git all

# make prefix=/usr/local/git install

# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/exprofile

# source /etc/exprofile

5.再檢查Git的版本號

# git --version

版本庫的創建及使用

版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。

# mkdir /data/git               //倉庫路徑

# git init                   //通過git init命令把這個目錄變成Git可以管理的倉庫

初始化空的 Git 版本庫于 /data/git/.git/

# ll -ah                    //可看到隱藏的.get目錄,用來跟蹤管理版本庫

總用量 12K

drwxr-xr-x. 3 root root 4.0K 3月  18 15:53 .

drwxr-xr-x. 3 root root 4.0K 3月  18 15:53 ..

drwxr-xr-x. 7 root root 4.0K 3月  18 15:53 .git

因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。

配置設置:

# git config --global user.name "pansy"            //設置名字

# git config  user.email "pansy@example.com"        //Email地址

注意git config命令的--global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。

把文件放到Git倉庫

# cd /data/git              //文件要放到倉庫目錄下或子目錄下

# cat a.txt

this is a txt

# git add a.txt              //把文件添加到倉庫

# git add a.txt b.txt          //也可以添加多個文件

# git commit -m "add 2 files"     //提交文件,-m后面輸入的是本次提交的說明

[master(根提交) e450576] add 2 files

 2 files changed, 2 insertions(+)

 create mode 100644 a.txt

 create mode 100644 b.txt

我們已經成功地添加并提交了一個a.txt文件,如修改a.txt文件

# cat a.txt

this is one txt

# git status            //git status時刻掌握倉庫當前的狀態,它告訴我們

位于分支 master           a.txt被修改過了,但還沒有準備提交的修改,但不能看修改的內容

尚未暫存以備提交的變更:

  (使用 "git add <file>..." 更新要提交的內容)

  (使用 "git checkout -- <file>..." 丟棄工作區的改動)


修改:     a.txt


修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

# git diff a.txt             //可以查看修改的內容

diff --git a/a.txt b/a.txt

index 7f38737..3cc29a4 100644

--- a/a.txt

+++ b/a.txt

@@ -1 +1 @@

-this is a txt

+this is one txt

版本回退

# git log                //查看歷史記錄,提交日志

commit bb52f061bae3978b2a72244d23d5133d38e37efe          //commit id 

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 17:08:53 2017 +0800


    修改


commit e450576a118e88aea0953e384b19f3a1abd1ed9f

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 16:50:01 2017 +0800


    add 2 files

現在把a.txt回退到上一個版本,也就是“add 2 files”的那個版本

Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交id,上一個版本就是HEAD^,上上一個版本就是HEAD^^,往上100個版本寫100個^數不過來時,可寫成HEAD~100。

# git reset --hard HEAD^             //回退到上個版本

# git log                      //查看日志

commit e450576a118e88aea0953e384b19f3a1abd1ed9f

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 16:50:01 2017 +0800


    add 2 files

# git reset --hard HEAD^ a.txt          //回退到上一個版本,把版本庫、暫存區和工作區都

# git log                          回退到HEAD的前一個版本。

commit e450576a118e88aea0953e384b19f3a1abd1ed9f

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 16:50:01 2017 +0800


    add 2 files

此時如果想恢復那個版本,可用 git reset --hard id     

# git reset --hard bb52f061bae           //id不用寫全,會自動查找              

HEAD 現在位于 bb52f06 修改

# git log

commit bb52f061bae3978b2a72244d23d5133d38e37efe

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 17:08:53 2017 +0800


    修改


commit e450576a118e88aea0953e384b19f3a1abd1ed9f

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 16:50:01 2017 +0800


    add 2 files

如果找不到commit id,git reflog記錄了你的每一次命令

# git reflog                   //可以查看到commit id

e450576 HEAD@{0}: reset: moving to HEAD^

bb52f06 HEAD@{1}: reset: moving to bb52f061bae

e450576 HEAD@{2}: reset: moving to HEAD^

bb52f06 HEAD@{3}: commit: 修改

e450576 HEAD@{4}: commit (initial): add 2 files

當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout  file。

當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,第二步用git checkout --file。

當你已經提交了不合適的修改到版本庫時,想要撤銷本次提交,前提是沒有推送到遠程庫時用上面的版本回退。

刪除文件

1.完全刪除文件(需要提交)

# cat b.txt 

this is another txt

# git rm b.txt

rm 'b.txt'

# git status

位于分支 master

要提交的變更:

  (使用 "git reset HEAD <file>..." 撤出暫存區)


刪除:     b.txt


# git commit -m "刪除b.txt"

[master e380c9f] 刪除b.txt

 1 file changed, 1 deletion(-)

 delete mode 100644 b.txt

# cat b.txt

cat: b.txt: 沒有那個文件或目錄

2.誤刪除文件

# git rm b.txt

rm 'b.txt'

# git reset 

重置后撤出暫存區的變更:

Db.txt

# ls

a.txt

# git checkout b.txt

# ls

a.txt  b.txt

遠程倉庫

1.使用提供Git倉庫托管服務的網站(GitHub)

GitHub網址:https://github.com/

(1)注冊(密碼至少7位數,且至少有一個為小寫字母)

(2)選擇付費或是免費(此處選免費)

(3)使用

  a.ssh免密碼

    # ssh-keygen -t rsa -C "pansy@example.com"

    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa): 

    Enter passphrase (empty for no passphrase): 

    Enter same passphrase again: 

    Your identification has been saved in /root/.ssh/id_rsa.

    Your public key has been saved in /root/.ssh/id_rsa.pub.

  b.將ssh公鑰傳到GitHub

   # cd ~/.ssh       //用戶的家目錄下

   # cat id_rsa.pub 

 ssh-rsa        AAAAB3NzaC1yc2EAAAABIwAAAQEA0y8b25WTVzcZccZCTD8b/4RGAPq6BqbJh0Qe4/o1/IJZqAywusH8FdAL/n0qWE6jhKxHj2g8qgL0GJudyAyyV9Fnbs0XAyjaLeJZ9Y0xS/lVCYcA669gVbZefrsjwxQhpeK4zcuZGkcUJcq8RVA7rRGOIlO+juhGE/B8UqkNrOdCFnoaWTn7CvcGhCeEnXKf4VJoiH6HpYiRl0D2s3qIo2CGtsg/lPd3nsnP73bmf/OsfsUva2CZEMLELWQR193oN8J6VbUkVAqdxRJTi8DlsU/rVxCFfYpxCVqXAh5gvukuGluAZhymV30bw3o+vrQ85gS2XZMq6a02EjxgE97FZw== pansy@example.com

   登陸網站 (將id_rsa.pub上傳到Key上,添加即可) git 學習筆記添加好的樣子

git 學習筆記  c.在網站上添加遠程庫(需要打開郵件同意)

  git 學習筆記

  注:遠程庫是公開的,私有的需要交錢~~~~

d.在本地倉庫目錄下,上傳到gitHub遠程庫

 # cd /data/git

 # git remote add origin git@github.com:pansypansy/pansy.repo.git  

 # git push -u origin master             //將本地庫上傳的命令  -u第一次時要輸入

 查看

 https://github.com/用戶名/遠程庫名

 git 學習筆記

 e.從遠程庫上克隆到本地

  git 學習筆記

   # git clone git@github.com:pansypansy/two.repo.git          //遠程庫克隆

   正克隆到 'two.repo'...

   remote: Counting objects: 3, done.

   remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0

   接收對象中: 100% (3/3), 完成.

   檢查連接... 完成。

   # cd two.repo/

  # ls

    README.md

2.本地的git服務器

 GitHub就是一個免費托管開源代碼的遠程倉庫。但是對于某些視源代碼如生命的商業公司來說,既不想公開源代碼,又舍不得給GitHub交保護費,那就只能自己搭建一臺Git服務器作為私有倉庫使用。

 (1)安裝git

   # yum -y install git 或 用源碼裝

 (2)創建用戶

   # useradd git

 (3)創建證書登錄

   收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件,把所有公鑰導入 到/home/git/.ssh/authorized_keys文件里,一行一個。   

 (4)初始化Git倉庫

   先選定一個目錄作為Git倉庫,假定是/data/sample.git,在/data目錄下輸入命令:

   # cd /data

   # git init --bare sample.git

   # chown -R git:git /data/sample.git/

 (5)禁用shell登錄

    出于安全考慮,git用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成

    git:x:500:500::/home/git:/bin/bash

    改為:

     git:x:500:500::/home/git:/usr/bin/git-shell

 (6)克隆遠程倉庫

    git clone git@server:/data/sample.git

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

git
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女