自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Git 系列(三):建立你的第一個(gè) Git 倉(cāng)庫(kù)

開(kāi)源 Linux
在本系列前面的文章中,你已經(jīng)學(xué)習(xí)了怎樣作為一個(gè)最終用戶與 Git 進(jìn)行交互;你就像一個(gè)漫無(wú)目的的流浪者一樣偶然發(fā)現(xiàn)了一個(gè)開(kāi)源項(xiàng)目網(wǎng)站,克隆了倉(cāng)庫(kù),然后你就可以繼續(xù)鉆研它了。你知道了和 Git 進(jìn)行交互并不像你想的那樣困難,或許你只是需要被說(shuō)服現(xiàn)在去使用 Git 完成你的工作罷了。

[[169545]]

現(xiàn)在是時(shí)候?qū)W習(xí)怎樣創(chuàng)建你自己的 Git 倉(cāng)庫(kù)了,還有怎樣增加文件和完成提交。

在本系列前面的文章中,你已經(jīng)學(xué)習(xí)了怎樣作為一個(gè)最終用戶與 Git 進(jìn)行交互;你就像一個(gè)漫無(wú)目的的流浪者一樣偶然發(fā)現(xiàn)了一個(gè)開(kāi)源項(xiàng)目網(wǎng)站,克隆了倉(cāng)庫(kù),然后你就可以繼續(xù)鉆研它了。你知道了和 Git 進(jìn)行交互并不像你想的那樣困難,或許你只是需要被說(shuō)服現(xiàn)在去使用 Git 完成你的工作罷了。

雖然 Git 確實(shí)是被許多重要軟件選作版本控制工具,但是并不是僅能用于這些重要軟件;它也能管理你購(gòu)物清單(如果它們對(duì)你來(lái)說(shuō)很重要的話,當(dāng)然可以了!)、你的配置文件、周報(bào)或日記、項(xiàng)目進(jìn)展日志、甚至源代碼!

使用 Git 是很有必要的,畢竟,你肯定有過(guò)因?yàn)橐粋€(gè)備份文件不能夠辨認(rèn)出版本信息而抓狂的時(shí)候。

Git 無(wú)法幫助你,除非你開(kāi)始使用它,而現(xiàn)在就是開(kāi)始學(xué)習(xí)和使用它的***時(shí)機(jī)。或者,用 Git 的話來(lái)說(shuō),“沒(méi)有其他的 push 能像 origin HEAD 一樣有幫助了”(千里之行始于足下的意思)。我保證,你很快就會(huì)理解這一點(diǎn)的。

類比于錄音

我們經(jīng)常用名詞“快照”來(lái)指代計(jì)算機(jī)上的鏡像,因?yàn)楹芏嗳硕寄軌驅(qū)Σ鍧M了不同時(shí)光的照片的相冊(cè)充滿了感受。這很有用,不過(guò),我認(rèn)為 Git 更像是進(jìn)行一場(chǎng)錄音。

也許你不太熟悉傳統(tǒng)的錄音棚卡座式錄音機(jī),它包括幾個(gè)部件:一個(gè)可以正轉(zhuǎn)或反轉(zhuǎn)的轉(zhuǎn)軸、保存聲音波形的磁帶,可以通過(guò)拾音頭在磁帶上記錄聲音波形,或者檢測(cè)到磁帶上的聲音波形并播放給聽(tīng)眾。

除了往前播放磁帶,你也可以把磁帶倒回到之前的部分,或快進(jìn)跳過(guò)后面的部分。

想象一下上世紀(jì) 70 年代樂(lè)隊(duì)錄制磁帶的情形。你可以想象到他們一遍遍地練習(xí)歌曲,直到所有部分都非常***,然后記錄到音軌上。起初,你會(huì)錄下鼓聲,然后是低音,再然后是吉他聲,***是主唱。每次你錄音時(shí),錄音棚工作人員都會(huì)把磁帶倒帶,然后進(jìn)入循環(huán)模式,這樣它就會(huì)播放你之前錄制的部分。比如說(shuō)如果你正在錄制低音,你就會(huì)在背景音樂(lè)里聽(tīng)到鼓聲,就像你自己在擊鼓一樣,然后吉他手在錄制時(shí)會(huì)聽(tīng)到鼓聲、低音(和牛鈴聲)等等。在每個(gè)循環(huán)中,你都會(huì)錄制一部分,在接下來(lái)的循環(huán)中,工作人員就會(huì)按下錄音按鈕將其合并記錄到磁帶中。

你也可以拷貝或換下整個(gè)磁帶,如果你要對(duì)你的作品重新混音的話。

現(xiàn)在我希望對(duì)于上述的上世紀(jì) 70 年代的錄音工作的描述足夠生動(dòng),這樣我們就可以把 Git 的工作想象成一個(gè)錄音工作了。

新建一個(gè) Git 倉(cāng)庫(kù)

首先得為我們的虛擬的錄音機(jī)買(mǎi)一些磁帶。用 Git 的話說(shuō),這些磁帶就是倉(cāng)庫(kù);它是完成所有工作的基礎(chǔ),也就是說(shuō)這里是存放 Git 文件的地方(即 Git 工作區(qū))。

任何目錄都可以成為一個(gè) Git 倉(cāng)庫(kù),但是讓我們從一個(gè)新目錄開(kāi)始。這需要下面三個(gè)命令:

  • 創(chuàng)建目錄(如果你喜歡的話,你可以在你的圖形化的文件管理器里面完成。)
  • 在終端里切換到目錄。
  • 將其初始化成一個(gè) Git 管理的目錄。

也就是運(yùn)行如下代碼: 

  1. $ mkdir ~/jupiter  # 創(chuàng)建目錄 
  2. $ cd ~/jupiter     # 進(jìn)入目錄 
  3. $ git init .       # 初始化你的新 Git 工作區(qū) 

在這個(gè)例子中,文件夾 jupiter 是一個(gè)空的但是合法的 Git 倉(cāng)庫(kù)。

有了倉(cāng)庫(kù)接下來(lái)的事情就可以按部就班進(jìn)行了。你可以克隆該倉(cāng)庫(kù),你可以在一個(gè)歷史點(diǎn)前后來(lái)回穿梭(前提是你有一個(gè)歷史點(diǎn)),創(chuàng)建交替的時(shí)間線,以及做 Git 能做的其它任何事情。

在 Git 倉(cāng)庫(kù)里面工作和在任何目錄里面工作都是一樣的,可以在倉(cāng)庫(kù)中新建文件、復(fù)制文件、保存文件。你可以像平常一樣做各種事情;Git 并不復(fù)雜,除非你把它想復(fù)雜了。

在本地的 Git 倉(cāng)庫(kù)中,一個(gè)文件可以有以下這三種狀態(tài):

  • 未跟蹤文件Untracked:你在倉(cāng)庫(kù)里新建了一個(gè)文件,但是你沒(méi)有把文件加入到 Git 的管理之中。
  • 已跟蹤文件Tracked:已經(jīng)加入到 Git 管理的文件。
  • 暫存區(qū)文件Staged:被修改了的已跟蹤文件,并加入到 Git 的提交隊(duì)列中。

任何你新加入到 Git 倉(cāng)庫(kù)中的文件都是未跟蹤文件。這些文件保存在你的電腦硬盤(pán)上,但是你沒(méi)有告訴 Git 這是需要管理的文件,用我們的錄音機(jī)來(lái)類比,就是錄音機(jī)還沒(méi)打開(kāi);樂(lè)隊(duì)就開(kāi)始在錄音棚里忙碌了,但是錄音機(jī)并沒(méi)有準(zhǔn)備錄音。

不用擔(dān)心,Git 會(huì)在出現(xiàn)這種情況時(shí)告訴你: 

  1. $ echo "hello world" > foo 
  2. $ git status 
  3. On branch master 
  4. Untracked files: 
  5. (use "git add <file>..." to include in what will be committed)     
  6.     foo     
  7. nothing added but untracked files present (use "git add" to track) 

你看到了,Git 會(huì)提醒你怎樣把文件加入到提交任務(wù)中。

不使用 Git 命令進(jìn)行 Git 操作

在 GitHub 或 GitLab 上創(chuàng)建一個(gè)倉(cāng)庫(kù)只需要用鼠標(biāo)點(diǎn)幾下即可。這并不難,你單擊“New Repository”這個(gè)按鈕然后跟著提示做就可以了。

在倉(cāng)庫(kù)中包括一個(gè)“README”文件是一個(gè)好習(xí)慣,這樣人們?cè)跒g覽你的倉(cāng)庫(kù)的時(shí)候就可以知道你的倉(cāng)庫(kù)是干什么的,更有用的是可以讓你在克隆一個(gè)有東西的倉(cāng)庫(kù)前知道它有些什么。

克隆倉(cāng)庫(kù)通常很簡(jiǎn)單,但是在 GitHub 上獲取倉(cāng)庫(kù)改動(dòng)權(quán)限就稍微復(fù)雜一些,為了通過(guò) GitHub 驗(yàn)證你必須有一個(gè) SSH 密鑰。如果你使用 Linux 系統(tǒng),可以通過(guò)下面的命令生成: 

  1. $ ssh-keygen 

然后復(fù)制你的新密鑰的內(nèi)容,它是純文本文件,你可以使用一個(gè)文本編輯器打開(kāi)它,也可以使用如下 cat 命令查看: 

  1. $ cat ~/.ssh/id_rsa.pub 

現(xiàn)在把你的密鑰粘貼到 GitHub SSH 配置文件 中,或者 GitLab 配置文件。

如果你通過(guò)使用 SSH 模式克隆了你的項(xiàng)目,你就可以將修改寫(xiě)回到你的倉(cāng)庫(kù)了。

另外,如果你的系統(tǒng)上沒(méi)有安裝 Git 的話也可以使用 GitHub 的文件上傳接口來(lái)添加文件。

 

跟蹤文件

正如命令 git status 的輸出告訴你的那樣,如果你想讓 git 跟蹤一個(gè)文件,你必須使用命令 git add 把它加入到提交任務(wù)中。這個(gè)命令把文件存在了暫存區(qū),這里存放的都是等待提交的文件,或者也可以用在快照中。在將文件包括到快照中,和添加要 Git 管理的新的或臨時(shí)文件時(shí),git add 命令的目的是不同的,不過(guò)至少現(xiàn)在,你不用為它們之間的不同之處而費(fèi)神。

類比錄音機(jī),這個(gè)動(dòng)作就像打開(kāi)錄音機(jī)開(kāi)始準(zhǔn)備錄音一樣。你可以想象為對(duì)已經(jīng)在錄音的錄音機(jī)按下暫停按鈕,或者倒回開(kāi)頭等著記錄下個(gè)音軌。

當(dāng)你把文件添加到 Git 管理中,它會(huì)標(biāo)識(shí)其為已跟蹤文件: 

  1. $ git add foo 
  2. $ git status 
  3. On branch master 
  4. Changes to be committed
  5. (use "git reset HEAD <file>..." to unstage) 
  6. new file:   foo 

加入文件到提交任務(wù)中并不是“準(zhǔn)備錄音”。這僅僅是將該文件置于準(zhǔn)備錄音的狀態(tài)。在你添加文件后,你仍然可以修改該文件;它只是被標(biāo)記為已跟蹤和處于暫存區(qū),所以在它被寫(xiě)到“磁帶”前你可以將它撤出或修改它(當(dāng)然你也可以再次將它加入來(lái)做些修改)。但是請(qǐng)注意:你還沒(méi)有在磁帶中記錄該文件,所以如果弄壞了一個(gè)之前還是好的文件,你是沒(méi)有辦法恢復(fù)的,因?yàn)槟銢](méi)有在“磁帶”中記下那個(gè)文件還是好著的時(shí)刻。

如果你***決定不把文件記錄到 Git 歷史列表中,那么你可以撤銷提交任務(wù),在 Git 中是這樣做的:

  1. $ git reset HEAD foo 

這實(shí)際上就是解除了錄音機(jī)的準(zhǔn)備錄音狀態(tài),你只是在錄音棚中轉(zhuǎn)了一圈而已。

大型提交

有時(shí)候,你想要提交一些內(nèi)容到倉(cāng)庫(kù);我們以錄音機(jī)類比,這就好比按下錄音鍵然后記錄到磁帶中一樣。

在一個(gè)項(xiàng)目所經(jīng)歷的不同階段中,你會(huì)按下這個(gè)“記錄鍵”無(wú)數(shù)次。比如,如果你嘗試了一個(gè)新的 Python 工具包并且最終實(shí)現(xiàn)了窗口呈現(xiàn)功能,然后你肯定要進(jìn)行提交,以便你在實(shí)驗(yàn)新的顯示選項(xiàng)時(shí)搞砸了可以回退到這個(gè)階段。但是如果你在 Inkscape 中畫(huà)了一些圖形草樣,在提交前你可能需要等到已經(jīng)有了一些要開(kāi)發(fā)的內(nèi)容。盡管你可能提交了很多次,但是 Git 并不會(huì)浪費(fèi)很多,也不會(huì)占用太多磁盤(pán)空間,所以在我看來(lái),提交的越多越好。

commit 命令會(huì)“記錄”倉(cāng)庫(kù)中所有的暫存區(qū)文件。Git 只“記錄”已跟蹤的文件,即,在過(guò)去某個(gè)時(shí)間點(diǎn)你使用 git add 命令加入到暫存區(qū)的所有文件,以及從上次提交后被改動(dòng)的文件。如果之前沒(méi)有過(guò)提交,那么所有跟蹤的文件都包含在這次提交中,以 Git 的角度來(lái)看,這是一次非常重要的修改,因?yàn)樗鼈儚臎](méi)放到倉(cāng)庫(kù)中變成了放進(jìn)去。

完成一次提交需要運(yùn)行下面的命令:

  1. $ git commit -m 'My great project, first commit.' 

這就保存了所有提交的文件,之后可以用于其它操作(或者,用英國(guó)電視劇《神秘博士》中時(shí)間領(lǐng)主所講的 Gallifreyan 語(yǔ)說(shuō),它們成為了“固定的時(shí)間點(diǎn)” )。這不僅是一個(gè)提交事件,也是一個(gè)你在 Git 日志中找到該提交的引用指針:

  1. $ git log --oneline 
  2. 55df4c2 My great project, first commit

 

如果想瀏覽更多信息,只需要使用不帶 --oneline 選項(xiàng)的 git log 命令。

在這個(gè)例子中提交時(shí)的引用號(hào)碼是 55df4c2。它被叫做“提交哈希commit hash”(LCTT 譯注:這是一個(gè) SHA-1 算法生成的哈希碼,用于表示一個(gè) git 提交對(duì)象),它代表著剛才你的提交所包含的所有新改動(dòng),覆蓋到了先前的記錄上。如果你想要“倒回”到你的提交歷史點(diǎn)上,就可以用這個(gè)哈希作為依據(jù)。

你可以把這個(gè)哈希想象成一個(gè)聲音磁帶上的 SMPTE 時(shí)間碼,或者再形象一點(diǎn),這就是好比一個(gè)黑膠唱片上兩首不同的歌之間的空隙,或是一個(gè) CD 上的音軌編號(hào)。

當(dāng)你改動(dòng)了文件之后并且把它們加入到提交任務(wù)中,最終完成提交,這就會(huì)生成新的提交哈希,它們每一個(gè)所標(biāo)示的歷史點(diǎn)都代表著你的產(chǎn)品不同的版本。

這就是 Charlie Brown 這樣的音樂(lè)家們?yōu)槭裁从?Git 作為版本控制系統(tǒng)的原因。

在接下來(lái)的文章中,我們將會(huì)討論關(guān)于 Git HEAD 的各個(gè)方面,我們會(huì)真正地向你揭示時(shí)間旅行的秘密。不用擔(dān)心,你只需要繼續(xù)讀下去就行了(或許你已經(jīng)在讀了?)。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2016-08-24 15:12:41

LXDLinux容器

2020-09-21 08:01:35

Git操作系統(tǒng)Linux

2023-05-19 08:49:58

SQLAlchemy數(shù)據(jù)庫(kù)

2022-10-17 10:28:05

Web 組件代碼

2013-01-14 09:44:58

JavaScriptJSJS框架

2016-08-02 11:06:34

開(kāi)源Linux版本控制

2016-08-23 10:39:38

GitLinux開(kāi)源

2020-02-26 17:39:18

Python機(jī)器人Word

2016-10-09 13:40:44

PythonSlack聊天機(jī)器人

2018-10-15 10:10:41

Linux內(nèi)核補(bǔ)丁

2013-12-19 09:46:04

垃圾收集器

2016-09-23 20:04:26

2013-10-09 10:04:20

LinuxGit

2017-10-13 15:59:24

iPhone機(jī)器學(xué)習(xí)iOS

2014-07-24 14:35:26

Linux內(nèi)核模塊

2018-01-31 15:45:07

前端Vue.js組件

2019-12-31 08:00:00

DebianLinuxApple Swift

2011-02-28 14:37:43

GitLinux版本控制

2023-06-01 08:24:08

OpenAIChatGPTPython

2021-03-14 09:37:45

Git倉(cāng)庫(kù)管理代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)