成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Git 系列(三):建立你的第一個 Git 倉庫

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

[[169545]]

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

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

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

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

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

類比于錄音

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

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

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

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

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

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

新建一個 Git 倉庫

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

任何目錄都可以成為一個 Git 倉庫,但是讓我們從一個新目錄開始。這需要下面三個命令:

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

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

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

在這個例子中,文件夾 jupiter 是一個空的但是合法的 Git 倉庫。

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

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

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

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

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

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

  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 會提醒你怎樣把文件加入到提交任務(wù)中。

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

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

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

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

  1. $ ssh-keygen 

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

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

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

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

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

 

跟蹤文件

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

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

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

  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ū),所以在它被寫到“磁帶”前你可以將它撤出或修改它(當(dāng)然你也可以再次將它加入來做些修改)。但是請注意:你還沒有在磁帶中記錄該文件,所以如果弄壞了一個之前還是好的文件,你是沒有辦法恢復(fù)的,因?yàn)槟銢]有在“磁帶”中記下那個文件還是好著的時刻。

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

  1. $ git reset HEAD foo 

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

大型提交

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

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

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

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

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

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

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

 

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

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

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

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

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

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

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(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ù)庫

2022-10-17 10:28:05

Web 組件代碼

2013-01-14 09:44:58

JavaScriptJSJS框架

2016-08-02 11:06:34

開源Linux版本控制

2016-08-23 10:39:38

GitLinux開源

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

2017-10-13 15:59:24

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

2013-10-09 10:04:20

LinuxGit

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

2016-08-03 15:32:50

GitLinux開源
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 日韩国产高清在线观看 | 国产一区二区在线播放 | 免费视频久久 | 日本不卡一区 | 久久aⅴ乱码一区二区三区 91综合网 | 久久久久国产精品一区二区 | 一区中文| 精品美女久久久久久免费 | 午夜精品久久久久久久久久久久久 | 日韩av最新网址 | 亚洲午夜精品久久久久久app | 国产成人免费视频网站高清观看视频 | 欧美久久久久久久久中文字幕 | 成人欧美日韩一区二区三区 | 欧美白人做受xxxx视频 | 7799精品视频天天看 | 日本精品视频 | 久久lu | 欧美色性 | 欧美精品一区二区三区在线 | 国产精品久久久久久婷婷天堂 | 久久国产精品一区 | 国产乱码精品一区二区三区av | 黄色av网站在线观看 | 欧美一级电影免费 | 久久久久99 | 国产www成人 | 国产亚洲一区精品 | 99成人| 日韩视频一区二区三区 | 久久国产视频一区 | 色婷婷av一区二区三区软件 | 国产一区二区在线视频 | 成人性视频免费网站 | 精品1区2区 | 国产成人免费视频网站高清观看视频 | 久久夜视频 | 国产精产国品一二三产区视频 | 日韩av美女电影 | 91成人精品 | 中文字幕在线精品 |