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的優(yōu)點(diǎn):
處理速度快
操作都只需要訪問本地文件和資源,不用連網(wǎng)
時刻保持?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ù)庫中的東西都是用此哈希值來作索引的,而不是靠文件名。
多數(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)。
每個項(xiàng)目都有一個 Git 目錄(如果 git clone 出來的話,就是其中 .git 的目錄;如果 git clone --bare 的話,新建的目錄本身就是 Git 目錄。),它是 Git 用來保存元數(shù)據(jù)和對象數(shù)據(jù)庫的地方。該目錄非常重要,每次克隆鏡像倉庫的時候,實(shí)際拷貝的就是這個目錄里面的數(shù)據(jù)。
從項(xiàng)目中取出某個版本的所有文件和目錄,用以開始后續(xù)工作的叫做工作目錄。這些文件實(shí)際上都是從 Git 目錄中的壓縮對象數(shù)據(jù)庫中提取出來的,接下來就可以在工作目錄中對這些文件進(jìn)行編輯。
所謂的暫存區(qū)域只不過是個簡單的文件,一般都放在 Git 目錄中。有時候人們會把這個文件叫做索引文件,不過標(biāo)準(zhǔn)說法還是叫暫存區(qū)域。
基本的 Git 工作流程如下:
在工作目錄中修改某些文件。
對修改后的文件進(jìn)行快照,然后保存到暫存區(qū)域。
提交更新,將保存在暫存區(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上,添加即可) 添加好的樣子
c.在網(wǎng)站上添加遠(yuǎn)程庫(需要打開郵件同意)
注:遠(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)程庫名
e.從遠(yuǎn)程庫上克隆到本地
# 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)
猜你還喜歡下面的內(nèi)容