最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Git【入門】這一篇就夠了

2021-01-21 18:26 作者:JavaPub  | 我要投稿

前言

歡迎關(guān)注公眾號,白嫖原創(chuàng)PDF,也可以催更,微信搜:JavaPub,回復(fù):【666】

Git 在生產(chǎn)工作中是使用頻率很高的工具,但我發(fā)現(xiàn)很多文章只是對它做了簡單的提交命令說明,真正遇到 版本沖突文件丟失 等問題又定位不到原因,浪費大量時間。本篇文章較長,但都是在實際項目中用到的點。

閱讀本文大概需要6分鐘


  • 前言

  • 1.版本控制

    • 1.1.什么是版本控制

    • 1.2.為什么版本控制

    • 1.3.本地版本控制

    • 1.2.集中化的版本控制

    • 1.2.分布式版本控制

  • 2.認(rèn)識 Git

    • 2.1.Git 簡史

    • 2.2.Git 與其他版本控制系統(tǒng)區(qū)別

    • 2.3.Git 三種文件狀態(tài)

  • 3.Git 安裝

    • 3.1.Linux 安裝

    • 3.2.Windows 安裝

  • 4.Git 快速入門

    • 4.1.獲取倉庫

    • 4.2.完整一次的提交流程

    • 4.3.提交說明

    • 4.4.推送到遠(yuǎn)程倉庫

    • 4.5.提交歷史

    • 4.6.撤銷操作

    • 4.7.分支


1.版本控制

1.1.什么是版本控制

版本控制是一種記錄一個或若干文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)。除了項目,你可以對任何類型的文件進(jìn)行版本控制。

1.2.為什么版本控制

采用版本控制系統(tǒng)(VCS)是個明智的選擇。 有了它就可以將某個文件回溯到之前的狀態(tài),甚至將整個項目都回退到過去某個時間點的狀態(tài),可以比較文件的變化細(xì)節(jié),查出最后是誰修改了哪個地方,從而找出導(dǎo)致怪異問題出現(xiàn)的原因,又是誰在何時報告了某個功能缺陷等等。 使用版本控制系統(tǒng)就算你對項目刪除、修改錯誤,這也沒有關(guān)系,你也照樣可以很容易地就恢復(fù)到原先的樣子。但額外增加的工作量卻微乎其微。

1.3.本地版本控制

許多人習(xí)慣用復(fù)制整個項目目錄的方式來保存不同的版本,或許還會改名加上備份時間以示區(qū)別。 這么做唯一的好處就是簡單,但是特別容易犯錯。 有時候會混淆所在的工作目錄,一不小心會寫錯文件或者覆蓋意想外的文件。而且不利于團隊協(xié)作。 為了解決這個問題,人們很久以前就開發(fā)了許多種本地版本控制系統(tǒng),大多都是采用某種簡單的數(shù)據(jù)庫來記錄文件的歷次更新差異。圖片來源 Git 官網(wǎng)。

其中最流行的一種叫做 RCS,現(xiàn)今許多計算機系統(tǒng)上都還看得到它的蹤影。 甚至在流行的 Mac OS X 系統(tǒng)上安裝了開發(fā)者工具包之后,也可以使用 rcs 命令。 它的工作原理是在硬盤上保存補丁集(補丁是指文件修訂前后的變化);通過應(yīng)用所有的補丁,可以重新計算出各個版本的文件內(nèi)容。

1.2.集中化的版本控制

接下來人們又遇到一個問題,如何讓在不同系統(tǒng)上的開發(fā)者協(xié)同工作? 于是,集中化的版本控制系統(tǒng)(Centralized Version Control Systems,簡稱 CVCS)應(yīng)運而生。 諸如 CVS、Subversion(SVN) 以及 Perforce 等。 集中化的版本控制系統(tǒng)是單一的集中管理的服務(wù)器,保存所有文件的修訂版本,而協(xié)同工作的人們都通過客戶端連到這臺服務(wù)器,取出最新的文件或者提交更新。多年以來,這已成為版本控制系統(tǒng)的標(biāo)準(zhǔn)做法。如圖(來源 Git 官網(wǎng)):

相對本地版本管理,集中化的版本控制每個人都可以在一定程度上看到項目中的其他人正在做些什么。 而管理員也可以輕松掌控每個開發(fā)者的權(quán)限,并且管理一個 CVCS 要遠(yuǎn)比在各個客戶端上維護(hù)本地數(shù)據(jù)庫來得輕松容易。

它也有如下詬?。?/p>

  1. 單點故障如果宕機,誰都無法提交更新,也就無法協(xié)同工作。 如果中心數(shù)據(jù)庫所在的磁盤發(fā)生損壞,又沒有做恰當(dāng)備份,毫無疑問將丟失所有數(shù)據(jù)——包括項目的整個變更歷史,只剩下人們在各自機器上保留的單獨快照。

  2. 需要聯(lián)網(wǎng)為什么需要聯(lián)網(wǎng)?集中化的版本控制系統(tǒng) 倉庫集中在一臺服務(wù)器,也就受到服務(wù)器網(wǎng)絡(luò)環(huán)境的影響。

1.2.分布式版本控制

于是分布式版本控制系統(tǒng)(Distributed Version Control System,簡稱 DVCS)面世了。 Git 就是典型的分布式版本控制。還有 Mercurial、Bazaar 以及 Darcs 等。

客戶端并不只提取最新版本的文件快照,而是把代碼倉庫完整地鏡像下來。 這么一來,任何一處協(xié)同工作用的服務(wù)器發(fā)生故障,事后都可以用任何一個鏡像出來的本地倉庫恢復(fù)。 因為每一次的克隆操作,實際上都是一次對代碼倉庫的完整備份。圖片來源 Git 官網(wǎng)。

分布式版本控制系統(tǒng)的優(yōu)勢不單是不必聯(lián)網(wǎng)這么簡單,后面我們還會看到 Git 極其強大的分支管理等功能。

2.認(rèn)識 Git

2.1.Git 簡史

2002 年,Linux 內(nèi)核開源項目整個項目組啟用一個專有的分布式版本控制系統(tǒng) BitKeeper 來管理和維護(hù)代碼。到了 2005 年,開發(fā) BitKeeper 的商業(yè)公司同 Linux 內(nèi)核開源社區(qū)的合作關(guān)系結(jié)束,他們收回了 Linux 內(nèi)核社區(qū)免費使用 BitKeeper 的權(quán)力。 這就迫使 Linux 開源社區(qū)(特別是 Linux 的締造者 Linus Torvalds)基于使用 BitKeeper 時的經(jīng)驗教訓(xùn),開發(fā)出自己的版本系統(tǒng)。

2.2.Git 與其他版本控制系統(tǒng)區(qū)別

集中式的缺點:集中式版本控制系統(tǒng)最大的毛病就是必須聯(lián)網(wǎng)才能工作,如果在局域網(wǎng)內(nèi)還好,帶寬夠大,速度夠快。

  1. 分布式版本控制系統(tǒng)根本沒有“中央服務(wù)器”,每個人的電腦上都是一個完整的版本庫,這樣,你工作的時候,就不需要聯(lián)網(wǎng)了,因為版本庫就在你自己的電腦上。既然每個人電腦上都有一個完整的版本庫。

比方說你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。

  1. 和集中式版本控制系統(tǒng)相比,分布式版本控制系統(tǒng)的安全性要高很多,因為每個人電腦里都有完整的版本庫。

某一個人的電腦壞掉了不要緊,隨便從其他人那里復(fù)制一個就可以了。而集中式版本控制系統(tǒng)的中央服務(wù)器要是出了問題,所有人都沒法干活了。

在實際使用分布式版本控制系統(tǒng)的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因為可能你們倆不在一個局域網(wǎng)內(nèi),兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。因此,分布式版本控制系統(tǒng)通常也有一臺充當(dāng)“中央服務(wù)器”的電腦,但這個服務(wù)器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已。

2.2.1.Git 和其他版本控制系統(tǒng)的存儲區(qū)別

Git的存儲方式是 快照技術(shù) ,而其他版本控制系統(tǒng)的存儲基本上都是 增量存儲。以下圖片來自網(wǎng)絡(luò)。

2.2.1.1.快照技術(shù)

Git在每次 git add 即將內(nèi)容添加到 緩存區(qū) 時會進(jìn)行一次快照,快照 就像給當(dāng)時的整個目錄及文件照了一張相,在任何時候通過快照就能將目錄及文件恢復(fù)到發(fā)起快照點的狀態(tài)。Git 是這樣生成快照的,對于沒有變化的文件,會生成一個引用指向原文件的位置以節(jié)省空間提高效率,對于變化了的文件則將整個文件存儲。git每個版本存儲的是一個快照。

2.2.1.2.增量存儲

所謂 增量存儲 ,指的是除了第一個版本存儲的是每個文件的完整內(nèi)容,之后的版本存儲的是每個文件相對于上一個版本對應(yīng)文件的變化的內(nèi)容。

2.3.Git 三種文件狀態(tài)

Git 在未進(jìn)行 commit 操作之前,存在三種狀態(tài):Untracked files,Changes not staged for commitChanges to be committed ,每種狀態(tài)之間可以隨意進(jìn)行互相轉(zhuǎn)換。了解這三種狀態(tài)各自所對應(yīng)的不同情況,能夠幫助你方便有效的使用 Git 來管理項目。

在 Git 中,文件狀態(tài)是個非常重要的概念。

為了更清楚的說明 文件狀態(tài) 的概念,使用網(wǎng)絡(luò)上三張圖片。

  • 初始化一個項目,也就是將項目所在目錄納入Git的管理之下。假設(shè)項目目錄為hello_world,初始化之后,在目錄下新建README.txt文件,接著,使用“git status”查看文件狀態(tài),如圖

  • 可以看到,Git友好的標(biāo)示出README.txt為“Untracked files”,并且提示使用“git add...”的命令將文件包含到待提交清單中。按照提示,使用“git add README.txt”命令,然后,使用“git status”查看文件狀態(tài),如圖:

  • 文件README.txt狀態(tài)變成了“Changes to be committed”,也就是說README.txt在暫存區(qū)域生成了快照,等待被提交。正如Git所提示的那樣,通過“git rm --cached README.txt”命令,可以將文件狀態(tài)還原為未暫存狀態(tài),即回到“Untracked files”文件狀態(tài)?,F(xiàn)在,README.txt已經(jīng)可以被提交到git目錄中了,但是暫時不提交。打開README.txt,向其中加些內(nèi)容,保存之后,用“git status”查看,返回如圖信息:

可以看到,除了之前的“Changes to be committed”狀態(tài),現(xiàn)在又多了一條“Changes not staged for commit”狀態(tài),表明文件已經(jīng)修改,但是還沒有放入暫存區(qū)域,也就是沒生成快照。如果現(xiàn)在進(jìn)行commit操作,只是將修改之前的文件快照提交到了git目錄,一定記?。褐挥袝捍鎱^(qū)域的文件(即:文件狀態(tài)為“Changes to be committed”)才會被提交。正如提示,通過“git add README.txt”命令將已修改文件更新到暫存區(qū)域中,如果想撤銷修改,可以使用“git checkout -- README.txt”命令。

3.Git 安裝

3.1.Linux 安裝

  • Centos/RedHat 安裝

$ yum install curl-devel expat-devel gettext-devel
openssl-devel zlib-devel

$ yum -y install git-core

$ git --version git version 1.7.1

Linux 的其他版本系統(tǒng)需要其他方式安裝。

3.2.Windows 安裝

直接在官網(wǎng)下載。

另一種是在 Github ,搜索 GitHub for Windows 項目。

4.Git 快速入門

4.1.獲取倉庫

  • 第一種:

新建一個存項目文件夾,在 git bash 執(zhí)行 git init ,項目文件夾下出現(xiàn) .git 的子目錄。

  • 第二種

從遠(yuǎn)程代碼倉庫拉去一個現(xiàn)有的:git clone [url] ?也可以自定義本地倉庫名字 git clone [url] dirName

4.2.完整一次的提交流程

進(jìn)入 Git 項目目錄

cd /myProject

提交所有修改到暫存區(qū)

git add .

提交暫存區(qū)修改內(nèi)容到本地倉庫

git commit -m "提交描述"

推送到遠(yuǎn)程倉庫

git push

現(xiàn)在就可以拉去 JavaPub 的遠(yuǎn)程倉庫了。

4.3.提交說明

  • 忽略文件配置:.gitignore 文件

  • 移除文件git rm filename(從暫存區(qū)移除,然后提交)

  • 查看文件狀態(tài)git status

4.4.推送到遠(yuǎn)程倉庫

  • 推送到遠(yuǎn)程倉庫:git push origin master 推送到遠(yuǎn)程 master 分支

  • 如果沒有遠(yuǎn)程倉庫,現(xiàn)在想讓本地和遠(yuǎn)程倉庫關(guān)聯(lián), 如下命令添加:git remote add origin <server> ,比如我們要讓本地的一個倉庫和 Github 上創(chuàng)建的一個倉庫關(guān)聯(lián)可以這樣 git remote add origin https://github.com/Rodert/test.git

現(xiàn)在就可以將項目推送到遠(yuǎn)程倉庫了。

4.5.提交歷史

有時我們需要查詢以前的提交歷史,使用命令 git log。

只看某人提交記錄

git log --author=bob

4.6.撤銷操作

有時你提交過代碼之后,發(fā)現(xiàn)一個地方改錯了,你下次提交時不想保留上一次的記錄;或者你上一次的 commit message的描述有誤,這時候你可以使用接下來的這個命令:git commit --amend。

git commit --amend

取消上一步操作,如 git add 、 git commit 之后。

git reset filename

4.7.分支

分支是用來將特性開發(fā)絕緣開來的。在你創(chuàng)建倉庫的時候,master 是默認(rèn)的。在其他分支上進(jìn)行開發(fā),完成后再將它們合并到主分支上。

不同的版本或系統(tǒng)模塊并行開發(fā)時,我們一般會單獨建立一個分支進(jìn)行開發(fā),最后再合并到主分支。

  • 新建本地分支

git branch test

  • 切換到 test 分支

git checkout test

也可以合并上面?zhèn)z步,git checkout -b feature_x

  • 切換到 master 分支

git checkout master

  • 合并分支 (可能有沖突)

git merge test

  • 把新建的分支刪掉

git branch -d test

  • 另外,也可以把分支推送到遠(yuǎn)程倉庫 git push <遠(yuǎn)程主機名> <本地分支名>:<遠(yuǎn)程分支名>

git push origin test:test

聲明:參考來源互聯(lián)網(wǎng),有任何爭議可以留言。站在前人的肩上,我們才能看的更遠(yuǎn)。

本教程純手打,致力于最實用教程,不需要什么獎勵,只希望多多轉(zhuǎn)發(fā)支持。


Git【入門】這一篇就夠了的評論 (共 條)

分享到微博請遵守國家法律
黄冈市| 东阿县| 肃宁县| 高州市| 桦南县| 诸暨市| 平乐县| 丹寨县| 湖州市| 错那县| 岳普湖县| 绥棱县| 宽甸| 襄汾县| 阳山县| 广汉市| 扶绥县| 沁水县| 高要市| 霞浦县| 秦皇岛市| 绍兴市| 庆云县| 唐海县| 西贡区| 通许县| 衡水市| 九江市| 长葛市| 西藏| 缙云县| 吕梁市| 巴林右旗| 齐河县| 定安县| 鄂伦春自治旗| 收藏| 平乡县| 隆昌县| 西安市| 屏东市|