Git之深入解析Git的安裝流程與初次運行Git前的環境配置

      網友投稿 778 2025-04-01

      一、版本控制

      什么是“版本控制”? 版本控制是一種記錄一個或若干文件內容變化,以便將來查閱特定版本修訂情況的系統,對保存著軟件源代碼的文件作版本控制,但實際上,可以對任何類型的文件進行版本控制。

      如果你是位圖形或網頁設計師,可能會需要保存某一幅圖片或頁面布局文件的所有修訂版本(這或許是你非常渴望擁有的功能),采用版本控制系統(VCS)是個明智的選擇。有了它你就可以將選定的文件回溯到之前的狀態,甚至將整個項目都回退到過去某個時間點的狀態,可以比較文件的變化細節,查出最后是誰修改了哪個地方,從而找出導致怪異問題出現的原因,又是誰在何時報告了某個功能缺陷等。

      使用版本控制系統通常還意味著,就算亂來一氣把整個項目中的文件改的改刪的刪,也照樣可以輕松恢復到原先的樣子,但額外增加的工作量卻微乎其微。

      許多人習慣用復制整個項目目錄的方式來保存不同的版本,或許還會改名加上備份時間以示區別。這么做唯一的好處就是簡單,但是特別容易犯錯,有時候會混淆所在的工作目錄,一不小心會寫錯文件或者覆蓋意想外的文件。

      為了解決這個問題,很久以前就開發了許多種本地版本控制系統,大多都是采用某種簡單的數據庫來記錄文件的歷次更新差異。

      本地版本控制,最流行的一種叫做 RCS,現今許多計算機系統上都還看得到它的蹤影。RCS 的工作原理是在硬盤上保存補丁集(補丁是指文件修訂前后的變化);通過應用所有的補丁,可以重新計算出各個版本的文件內容。

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

      集中化的版本控制帶來了許多好處,特別是相較于老式的本地 VCS 來說。現在,每個人都可以在一定程度上看到項目中的其他人正在做些什么,而管理員也可以輕松掌控每個開發者的權限,并且管理一個 CVCS 要遠比在各個客戶端上維護本地數據庫來得輕松容易。

      但是集中化的版本控制最顯而易見的缺點是中央服務器的單點故障,如果宕機一小時,那么在這一小時內,誰都無法提交更新,也就無法協同工作;如果中心數據庫所在的磁盤發生損壞,又沒有做恰當備份,毫無疑問將丟失所有數據——包括項目的整個變更歷史,只剩下人們在各自機器上保留的單獨快照。本地版本控制系統也存在類似問題,只要整個項目的歷史記錄被保存在單一位置,就有丟失所有歷史更新記錄的風險。

      分布式版本控制系統(Distributed Version Control System,簡稱 DVCS),在這類系統中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客戶端并不只提取最新版本的文件快照,而是把代碼倉庫完整地鏡像下來,包括完整的歷史記錄。這么一來,任何一處協同工作用的服務器發生故障,事后都可以用任何一個鏡像出來的本地倉庫恢復。因為每一次的克隆操作,實際上都是一次對代碼倉庫的完整備份。

      分布式版本控制更進一步,許多這類系統都可以指定和若干不同的遠端代碼倉庫進行交互。因此,就可以在同一個項目中,分別和不同工作小組的人相互協作,可以根據需要設定不同的協作流程,比如層次模型式的工作流,而這在以前的集中式系統中是無法實現的。

      二、Git 簡史

      同生活中的許多偉大事物一樣,Git 誕生于一個極富紛爭大舉創新的年代,Linux 內核開源項目有著為數眾多的參與者,絕大多數的 Linux 內核維護工作都花在了提交補丁和保存歸檔的繁瑣事務上(1991-2002年間)。 到 2002 年,整個項目組開始啟用一個專有的分布式版本控制系統 BitKeeper 來管理和維護代碼。

      到了 2005 年,開發 BitKeeper 的商業公司同 Linux 內核開源社區的合作關系結束,他們收回了 Linux 內核社區免費使用 BitKeeper 的權力,這就迫使 Linux 開源社區(特別是 Linux 的締造者 Linus Torvalds)基于使用 BitKeeper 時的經驗教訓,開發出自己的版本系統。

      他們對新的系統制訂了若干目標:

      速度;

      簡單的設計;

      對非線性開發模式的強力支持(允許成千上萬個并行開發的分支);

      完全分布式;

      有能力高效管理類似 Linux 內核一樣的超大規模項目(速度和數據量)。

      自誕生于 2005 年以來,Git 日臻成熟完善,在高度易用的同時,仍然保留著初期設定的目標。它的速度飛快,極其適合管理大項目,有著令人難以置信的非線性分支管理系統。

      三、Git 是什么?

      Git 和其它版本控制系統(包括 Subversion 和近似工具)的主要差別在于 Git 對待數據的方式。從概念上來說,其它大部分系統以文件變更列表的方式存儲信息,這類系統(CVS、Subversion、Perforce、Bazaar 等) 將它們存儲的信息看作是一組基本文件和每個文件隨時間逐步累積的差異 (它們通常稱作基于差異(delta-based) 的版本控制)。

      存儲每個文件與初始版本的差異,如下所示:

      Git 不按照以上方式對待或保存數據,反之,Git 更像是把數據看作是對小型文件系統的一系列快照。在 Git 中,每當提交更新或保存項目狀態時,它基本上就會對當時的全部文件創建一個快照并保存這個快照的索引。為了效率,如果文件沒有修改,Git 不再重新存儲該文件,而是只保留一個鏈接指向之前存儲的文件。Git 對待數據更像是一個“快照流”。

      存儲項目隨時間改變的快照:

      這是 Git 與幾乎所有其它版本控制系統的重要區別,因此 Git 重新考慮了以前每一代版本控制系統延續下來的諸多方面。Git 更像是一個小型的文件系統,提供了許多以此為基礎構建的超強工具,而不只是一個簡單的 VCS。

      在 Git 中的絕大多數操作都只需要訪問本地文件和資源,一般不需要來自網絡上其它計算機的信息。如果習慣于所有操作都有網絡延時開銷的集中式版本控制系統,Git 在這方面會讓你感到速度之神賜給了 Git 超凡的能量,因為在本地磁盤上就有項目的完整歷史,所以大部分操作看起來瞬間完成。

      舉個例子,要瀏覽項目的歷史,Git 不需外連到服務器去獲取歷史,然后再顯示出來——它只需直接從本地數據庫中讀取,你能立即看到項目歷史。如果你想查看當前版本與一個月前的版本之間引入的修改,Git 會查找到一個月前的文件做一次本地的差異計算,而不是由遠程服務器處理或從遠程服務器拉回舊版本文件再來本地處理。

      這也意味著你在離線或者沒有 VPN 時,幾乎可以進行任何操作:

      如你在飛機或火車上想做些工作,就能愉快地提交,直到有網絡連接時再上傳;

      如你回家后 VPN 客戶端不正常,那么也仍能工作。

      使用其它系統的話,做到這些是不可能或很費力的。比如,用 Perforce 的話,沒有連接服務器時幾乎不能做什么事;而用 Subversion 和 CVS 的話,你能修改文件,但不能向數據庫提交修改(因為你的本地數據庫離線)。這樣似乎問題不大,但是你可能會驚喜地發現它帶來的巨大的不同。

      Git 中所有的數據在存儲前都計算校驗和,然后以校驗和來引用,這意味著不可能在 Git 不知情時更改任何文件內容或目錄內容。這個功能建構在 Git 底層,是構成 Git 哲學不可或缺的部分,若你在傳送過程中丟失信息或損壞文件,Git 就能發現。

      Git 用以計算校驗和的機制叫做 SHA-1 散列(hash,哈希),這是一個由 40 個十六進制字符(0-9 和 a-f)組成的字符串,基于 Git 中文件的內容或目錄結構計算出來。SHA-1 哈希看起來是這樣:

      24b9da6552252987aa493b52f8696cd6d3b00373

      1

      Git 中使用這種哈希值的情況很多,你將經常看到這種哈希值。實際上,Git 數據庫中保存的信息都是以文件內容的哈希值來索引,而不是文件名。

      你執行的 Git 操作,幾乎只往 Git 數據庫中添加數據,你很難使用 Git 從數據庫中刪除數據,也就是說 Git 幾乎不會執行任何可能導致文件不可恢復的操作。 同別的 VCS 一樣,未提交更新時有可能丟失或弄亂修改的內容,但是一旦你提交快照到 Git 中,就難以再丟失數據,特別是如果你定期的推送數據庫到其它倉庫的話。

      這使得我們使用 Git 成為一個安心愉悅的過程,因為我們深知可以盡情做各種嘗試,而沒有把事情弄糟的危險。

      Git 有三種狀態,你的文件可能處于其中之一: 已提交(committed)、已修改(modified) 和 已暫存(staged):

      已修改表示修改了文件,但還沒保存到數據庫中;

      已暫存表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中;

      已提交表示數據已經安全地保存在本地數據庫中。

      這會讓 Git 項目擁有三個階段:工作區、暫存區以及 Git 目錄:

      工作區是對項目的某個版本獨立提取出來的內容,這些從 Git 倉庫的壓縮數據庫中提取出來的文件,放在磁盤上供你使用或修改;

      暫存區是一個文件,保存了下次將要提交的文件列表信息,一般在 Git 倉庫目錄中,按照 Git 的術語叫做“索引”,不過一般說法還是叫“暫存區”;

      Git 倉庫目錄是 Git 用來保存項目的元數據和對象數據庫的地方,這是 Git 中最重要的部分,從其它計算機克隆倉庫時,復制的就是這里的數據。

      基本的 Git 工作流程如下:

      在工作區中修改文件;

      將你想要下次提交的更改選擇性地暫存,這樣只會將更改的部分添加到暫存區;

      提交更新,找到暫存區的文件,將快照永久性存儲到 Git 目錄。

      如果 Git 目錄中保存著特定版本的文件,就屬于已提交狀態;如果文件已修改并放入暫存區,就屬于已暫存狀態;如果自上次檢出后,作了修改但還沒有放到暫存區域,就是已修改狀態。

      四、安裝 Git

      如果想在 Linux 上用二進制安裝程序來安裝基本的 Git 工具,可以使用發行版包含的基礎軟件包管理工具來安裝。以 Fedora 為例,如果在使用它(或與之緊密相關的基于 RPM 的發行版,如 RHEL 或 CentOS),可以使用 dnf:

      $ sudo dnf install git-all

      1

      如果在基于 Debian 的發行版上,如 Ubuntu,請使用 apt:

      $ sudo apt install git-all

      1

      在 Mac 上安裝 Git 有多種方式,最簡單的方法是安裝 Xcode Command Line Tools,Mavericks (10.9) 或更高版本的系統中,在 Terminal 里嘗試首次運行 git 命令即可:

      $ git --version

      1

      如果沒有安裝過命令行開發者工具,將會提示你安裝。如果想安裝更新的版本,可以使用二進制安裝程序。官方維護的 macOS Git 安裝程序可以在 Git 官方網站下載:Download for macOS。

      在 Windows 上安裝 Git 也有幾種安裝方法,官方版本可以在 Git 官方網站下載,打開 Downloading Git,下載會自動開始,要注意這是一個名為 Git for Windows 的項目(也叫做 msysGit),和 Git 是分別獨立的項目。

      要進行自動安裝,可以使用 Git Chocolatey 包,注意 Chocolatey 包是由社區維護的。

      另一個簡單的方法是安裝 GitHub Desktop,該安裝程序包含圖形化和命令行版本的 Git。它也能支持 Powershell,提供了穩定的憑證緩存和健全的換行設置。

      有人覺得從源碼安裝 Git 更實用,因為能得到最新的版本。二進制安裝程序傾向于有一些滯后,當然近幾年 Git 已經成熟,這個差異不再顯著。

      如果想從源碼安裝 Git,需要安裝 Git 依賴的庫:autotools、curl、zlib、openssl、expat 和 libiconv。如果系統上有 dnf (如 Fedora)或者 apt(如基于 Debian 的系統),可以使用對應的命令來安裝最少的依賴以便編譯并安裝 Git 的二進制版:

      $ sudo dnf install dh-autoreconf curl-devel expat-devel gettext-devel \ openssl-devel perl-devel zlib-devel $ sudo apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev \ gettext libz-dev libssl-dev

      1

      2

      3

      4

      為了添加文檔的多種格式(doc、html、info),需要以下附加的依賴:

      $ sudo dnf install asciidoc xmlto docbook2X $ sudo apt-get install asciidoc xmlto docbook2x

      1

      2

      如果使用基于 Debian 的發行版(Debian/Ubuntu/Ubuntu-derivatives),也需要 install-info 包:

      $ sudo apt-get install install-info

      1

      如果你使用基于 RPM 的發行版(Fedora/RHEL/RHEL衍生版),你還需要 getopt 包 (它已經在基于 Debian 的發行版中預裝了):

      $ sudo dnf install getopt

      1

      此外,如果你使用 Fedora/RHEL/RHEL衍生版,那么你需要執行以下命令:

      $ sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi

      1

      接著,編譯并安裝:

      $ tar -zxf git-2.8.0.tar.gz $ cd git-2.8.0 $ make configure $ ./configure --prefix=/usr $ make all doc info $ sudo make install install-doc install-html install-info

      1

      2

      3

      4

      5

      6

      完成后,你可以使用 Git 來獲取 Git 的更新:

      $ git clone git://git.kernel.org/pub/scm/git/git.git

      1

      五、初次運行 Git 前的配置

      Git 自帶一個 git config 的工具來幫助設置控制 Git 外觀和行為的配置變量,這些變量存儲在三個不同的位置:

      /etc/gitconfig 文件: 包含系統上每一個用戶及他們倉庫的通用配置,如果在執行 git config 時帶上 --system 選項,那么它就會讀寫該文件中的配置變量(由于它是系統配置文件,因此你需要管理員或超級用戶權限來修改它);

      ~/.gitconfig 或 ~/.config/git/config 文件:只針對當前用戶,可以傳遞 --global 選項讓 Git 讀寫此文件,這會對系統上所有的倉庫生效;

      當前使用倉庫的 Git 目錄中的 config 文件(即 .git/config):針對該倉庫,可以傳遞 --local 選項讓 Git 強制讀寫此文件,雖然默認情況下用的就是它(當然,需要進入某個 Git 倉庫中才能讓該選項生效)。

      每一個級別會覆蓋上一級別的配置,所以 .git/config 的配置變量會覆蓋 /etc/gitconfig 中的配置變量。

      在 Windows 系統中,Git 會查找 $HOME 目錄下(一般情況下是 C:\Users$USER )的 .gitconfig 文件。Git 同樣也會尋找 /etc/gitconfig 文件,但只限于 MSys 的根目錄下,即安裝 Git 時所選的目標位置。如果你在 Windows 上使用 Git 2.x 以后的版本,那么還有一個系統級的配置文件,Windows XP 上在 C:\Documents and Settings\All Users\Application Data\Git\config ,Windows Vista 及更新的版本在 C:\ProgramData\Git\config,此文件只能以管理員權限通過 git config -f 來修改。

      可以通過以下命令查看所有的配置以及它們所在的文件:

      $ git config --list --show-origin

      1

      安裝完 Git 之后,要做的第一件事就是設置你的用戶名和郵件地址,這一點很重要,因為每一個 Git 提交都會使用這些信息,它們會寫入到你的每一次提交中,不可更改:

      $ git config --global user.name "Kody" $ git config --global user.email Kody@example.com

      1

      2

      再次強調,如果使用了 --global 選項,那么該命令只需要運行一次,因為之后無論你在該系統上做任何事情,Git 都會使用那些信息。當你想針對特定項目使用不同的用戶名稱與郵件地址時,可以在那個項目目錄下運行沒有 --global 選項的命令來配置。

      很多 GUI 工具都會在第一次運行時幫助你配置這些信息。

      既然用戶信息已經設置完畢,你可以配置默認文本編輯器了,當 Git 需要你輸入信息時會調用它。如果未配置,Git 會使用操作系統默認的文本編輯器。

      如果你想使用不同的文本編輯器,例如 Emacs,可以這樣做:

      $ git config --global core.editor emacs

      Git之深入解析Git的安裝流程與初次運行Git前的環境配置

      1

      在 Windows 系統上,如果你想要使用別的文本編輯器,那么必須指定可執行文件的完整路徑。 它可能隨你的編輯器的打包方式而不同。

      對于 Notepad++,一個流行的代碼編輯器來說,你可能想要使用 32 位的版本,因為在本書編寫時 64 位的版本尚不支持所有的插件。如果你在使用 32 位的 Windows 系統,或在 64 位系統上使用 64 位的編輯器,那么你需要輸入如下命令:

      $ git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

      1

      如果想要檢查配置,可以使用 git config --list 命令來列出所有 Git 當時能找到的配置:

      $ git config --list user.name=John Doe user.email=johndoe@example.com color.status=auto color.branch=auto color.interactive=auto color.diff=auto ...

      1

      2

      3

      4

      5

      6

      7

      8

      你可能會看到重復的變量名,因為 Git 會從不同的文件中讀取同一個配置(例如:/etc/gitconfig 與 ~/.gitconfig)。這種情況下,Git 會使用它找到的每一個變量的最后一個配置。

      可以通過輸入 git config :來檢查 Git 的某一項配置;

      $ git config user.name Kody

      1

      2

      六、獲取幫助

      若你使用 Git 時需要獲取幫助,有三種等價的方法可以找到 Git 命令的綜合手冊(manpage):

      $ git help $ git --help $ man git-

      1

      2

      3

      要想獲得 git config 命令的手冊,執行:

      $ git help config

      1

      此外,如果你不需要全面的手冊,只需要可用選項的快速參考,那么可以用 -h 選項獲得更簡明的 “help” 輸出:

      $ git add -h usage: git add [] [--] ... -n, --dry-run dry run -v, --verbose be verbose -i, --interactive interactive picking -p, --patch select hunks interactively -e, --edit edit current diff and apply -f, --force allow adding otherwise ignored files -u, --update update tracked files --renormalize renormalize EOL of tracked files (implies -u) -N, --intent-to-add record only the fact that the path will be added later -A, --all add changes from all tracked and untracked files --ignore-removal ignore paths removed in the working tree (same as --no-all) --refresh don't add, only refresh the index --ignore-errors just skip files which cannot be added because of errors --ignore-missing check if - even missing - files are ignored in dry run --chmod (+|-)x override the executable bit of the listed files

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      Git

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:WPS表格僅顯示公式不計算結果怎么辦(wps表格公式不顯示結果只顯示公式)
      下一篇:python3 API文檔和源碼下載
      相關文章
      亚洲an日韩专区在线| 亚洲日本在线电影| 在线亚洲97se亚洲综合在线| 亚洲AV美女一区二区三区| 亚洲欧洲国产综合AV无码久久| 亚洲精彩视频在线观看| 亚洲高清无码综合性爱视频| 久久久久亚洲AV片无码下载蜜桃| 亚洲成a人片在线观看日本麻豆| 亚洲AV色无码乱码在线观看| 亚洲第一福利视频| 另类小说亚洲色图| 亚洲国产精品一区二区三区在线观看| 国产亚洲一区二区在线观看| 亚洲av永久中文无码精品| 亚洲成a人无码亚洲成www牛牛| 亚洲国产电影在线观看| 亚洲AV无码乱码在线观看裸奔| 亚洲区不卡顿区在线观看| 亚洲一日韩欧美中文字幕在线| 亚洲视频在线免费看| 亚洲美女又黄又爽在线观看| 亚洲精品无码不卡在线播放HE| 亚洲妇熟XXXX妇色黄| 在线观看亚洲天天一三视| 亚洲人成网7777777国产| 国产亚洲日韩在线a不卡| 亚洲乱亚洲乱少妇无码| 亚洲a∨国产av综合av下载| 国产成人精品亚洲一区| 亚洲国产精品尤物YW在线观看| 国产精品亚洲不卡一区二区三区 | 亚洲乱人伦中文字幕无码| 亚洲精华液一二三产区| 亚洲av无码乱码在线观看野外| 国产成人亚洲影院在线观看| 亚洲国产精华液网站w| 91大神亚洲影视在线| 亚洲人精品亚洲人成在线| 亚洲av永久无码一区二区三区| 久久久久国产成人精品亚洲午夜 |