git學(xué)習(xí)筆記-創(chuàng)新互聯(lián)

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

成都創(chuàng)新互聯(lián)主營蘭西網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,App定制開發(fā),蘭西h5小程序制作搭建,蘭西網(wǎng)站營銷推廣歡迎蘭西等地區(qū)企業(yè)咨詢

    GitHub網(wǎng)站為開源項(xiàng)目免費(fèi)提供Git存儲。

    GitLab 是一個用于倉庫管理系統(tǒng)的開源項(xiàng)目。使用 Git作為代碼管理工具,并在此基礎(chǔ)上搭建起來的web服務(wù)。

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

git 學(xué)習(xí)筆記

Git的優(yōu)點(diǎn):

  1. 處理速度快

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

  2. 時刻保持?jǐn)?shù)據(jù)完整性

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

  3. 多數(shù)操作僅添加數(shù)據(jù)

    常用的 Git 操作大多僅僅是把數(shù)據(jù)添加到數(shù)據(jù)庫。因?yàn)槿魏我环N不可逆的操作,比如刪除數(shù)據(jù),都會使回退或重現(xiàn)歷史版本變得困難重重,在 Git 里,一旦提交快照之后就完全不用擔(dān)心丟失數(shù)據(jù),特別是養(yǎng)成定期推送到其他倉庫的習(xí)慣。

Git文件的三種狀態(tài):

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

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

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

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

基本的 Git 工作流程如下:

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

  2. 對修改后的文件進(jìn)行快照,然后保存到暫存區(qū)域。

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

Git的安裝過程(CentOS)

1.檢查Git的版本號,CentOS默認(rèn)安裝的是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.刪除現(xiàn)有的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

版本庫的創(chuàng)建及使用

版本庫又名倉庫,英文名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

因?yàn)镚it是分布式版本控制系統(tǒng),所以,每個機(jī)器都必須自報家門:你的名字和Email地址。

配置設(shè)置:

# git config --global user.name "pansy"       //設(shè)置名字

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

注意git config命令的--global參數(shù),用了這個參數(shù),表示你這臺機(jī)器上所有的Git倉庫都會使用這個配置,當(dāng)然也可以對某個倉庫指定不同的用戶名和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

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

# cat a.txt

this is one txt

# git status       //git status時刻掌握倉庫當(dāng)前的狀態(tài),它告訴我們

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

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

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

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

修改:   a.txt

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

# git diff a.txt       //可以查看修改的內(nèi)容

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

現(xiàn)在把a(bǔ).txt回退到上一個版本,也就是“add 2 files”的那個版本

Git必須知道當(dāng)前版本是哪個版本,在Git中,用HEAD表示當(dāng)前版本,也就是最新的提交id,上一個版本就是HEAD^,上上一個版本就是HEAD^^,往上100個版本寫100個^數(shù)不過來時,可寫成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      //回退到上一個版本,把版本庫、暫存區(qū)和工作區(qū)都

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

commit e450576a118e88aea0953e384b19f3a1abd1ed9f

Author: pansy <pansy@example.com>

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

  add 2 files

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

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

HEAD 現(xiàn)在位于 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

當(dāng)你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時,用命令git checkout  file。

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

當(dāng)你已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交,前提是沒有推送到遠(yuǎn)程庫時用上面的版本回退。

刪除文件

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

# cat b.txt

this is another txt

# git rm b.txt

rm 'b.txt'

# git status

位于分支 master

要提交的變更:

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

刪除:   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

重置后撤出暫存區(qū)的變更:

Db.txt

# ls

a.txt

# git checkout b.txt

# ls

a.txt  b.txt

遠(yuǎn)程倉庫

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

GitHub網(wǎng)址:https://github.com/

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

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

(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

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

git 學(xué)習(xí)筆記  c.在網(wǎng)站上添加遠(yuǎn)程庫(需要打開郵件同意)

  git 學(xué)習(xí)筆記

 注:遠(yuǎn)程庫是公開的,私有的需要交錢~~~~

d.在本地倉庫目錄下,上傳到gitHub遠(yuǎn)程庫

 # cd /data/git

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

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

 查看

 https://github.com/用戶名/遠(yuǎn)程庫名

 git 學(xué)習(xí)筆記

 e.從遠(yuǎn)程庫上克隆到本地

  git 學(xué)習(xí)筆記

  # git clone git@github.com:pansypansy/two.repo.git      //遠(yuǎn)程庫克隆

  正克隆到 '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服務(wù)器

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

 (1)安裝git

  # yum -y install git 或 用源碼裝

 (2)創(chuàng)建用戶

  # useradd git

 (3)創(chuàng)建證書登錄

  收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件,把所有公鑰導(dǎo)入 到/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)克隆遠(yuǎn)程倉庫

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章名稱:git學(xué)習(xí)筆記-創(chuàng)新互聯(lián)
本文來源:http://muchs.cn/article0/cdoiio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)建站公司、用戶體驗(yàn)、網(wǎng)頁設(shè)計(jì)公司、微信公眾號搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化