iT邦幫忙

2021 iThome 鐵人賽

DAY 1
4

在學期間是否遇過作業前後修改出好多個版本,你會以什麼方式命名呢?以我的例子來說,大學作業就是與老師討論後又被退回來修改,或是與組員之間共同編輯了同份檔案,最後已經不清楚哪份才是最終版本,各版本之間的差異又是什麼?
https://ithelp.ithome.com.tw/upload/images/20210914/20141010kk4WWyLPmR.png

平常我的習慣是把日期放在頭當檔名,但找截圖時實在太亂了QQ

這樣的處理方式套用在工程師上,可能會出現以下缺點
1. 無法得知哪一份才最新檔案
2. 共同編輯需加上編輯者名字,若同時進行編輯,可能會有覆蓋的情形發生
3. 無法了解每個版本之間的差異,以及備份的原因
4. 無法追蹤修改者和修改的內容

種種因素導致工程師合作上的混亂,因此需要程式碼管理系統,而好的程式碼管理系統會大幅影響到開發效率。
Git 的版本控制系統就是為了解決這樣的問題而開發的。


什麼是 Git ?

💡 Git 是一種分散式版本的版本控制系統。

版本控制系統(Version Control Stystem)

記錄一個或若干個文件的狀態變化,並可以隨時切換到某個「版本」時候的狀態,以便查看特定版本修訂情況的系統。

可以清楚地紀錄每個檔案的擁有者、時間、修改異動。

集中式與分散式

  • 集中式版控系統 (Centralize Version Control)

    如:CVS、SVN 和 Perforce

    需有一個專用的伺服器來管理所有版本的檔案,所有的更新都需透過此伺服器溝通。

    https://ithelp.ithome.com.tw/upload/images/20210913/20141010mFEBZXKgzG.png

    特點:

    • 同步 - 讓所有開發者間對檔案所做的變更都能夠同步,最終得到相同的檔案內容。

    • 追溯 - 回到受控檔案在變化歷史中的任何一個版本,並且明白每個版本間變化的原因、以及究竟做了什麼變動。

    • 備份 - 讓所有的受控檔案集中保管於檔案庫中,做為備份也利於備份。

    優點:

    • 可以知道專案中的其他人正在做什麼。

    • 管理者可以掌控每個開發者的權限。

    • 比每個用戶端只用本機的版本控制系統好管理很多。

    缺點:

    • 如果伺服器發生故障、損壞,或是沒有網路連線的環境,那麼就無法使用,更有可能遺失所有資料,影響開發效率。
  • 分散式版本控制系統(Distributed Version Control Systems,簡稱 DVCSs)

    如:Git、Mercurial、Bazaar 和 Darcs

    特點:

    • 每個開發者擁各自獨立的變更集合,開發者之間可分享自己的變更集合。

    • 可在離線環境(深山、飛機)下正常使用。

    • 重視分支(branch)的支援

https://ithelp.ithome.com.tw/upload/images/20210913/20141010o3X9VU3NEC.png


Git 的優點

  1. 免費、開源
  2. 速度快、檔案體積小
  3. 分散式系統
    • 可以在沒有伺服器或是沒有網路的環境,依舊可以使用 Git 來進行版控,待伺服器恢復正常運作或是再有網路的環境後再進行同步,不會受影響。
  4. 處理檔案的方式
    • 其他版本控制:記錄每個版本之間的「異動」,
    • Git :主要在於記錄「檔案內容」,並更新紀錄整個目錄與檔案的樹狀結構。

Git 的缺點

  1. 易學難精、指令多
  2. 資安問題
    若是將重要的資料也要丟到GIT上面或是沒有處理好了話,重要資料很有可能被駭客竊取。

Git 是一款版本控制軟體,而 GitHub 是一個商業網站,GItHub 的本體是一個 Git 伺服器。

了解 Git 的基本概念:

  1. 記錄檔案快照 Snapshot,而不是差異
    每當提交 commit(註:在 Git 儲存目前專案的狀態)時,Git 會紀錄下所有目前檔案的樣子,並且參照到這次快照中。 為了講求效率,只要檔案沒有變更,Git 不會再度儲存該檔案,而是直接將上一次相同的檔案參照到這次快照中。 Git 把它的資料視為一連串的快照。

  2. 大部份的操作皆可在本地端完成

  3. Git 能檢查完整性
    在 Git 中所有的物件在儲存前都會被計算校驗碼(checksum)並以校驗碼參照物件。

  4. Git 通常只增加資料

  5. 三種狀態

    1. 已提交(committed)
      • 己安全地存在你的本地端儲存庫
    2. 已修改(modified)
      • 已被修改但尚未提交到本地端儲存庫
    3. 已預存(staged)
      • 將會被存到下次你提交的快照中
  6. Git 專案的三個主要區域

    1. Git 資料夾

      • 儲存你專案的後設資料及物件資料庫的地方
    2. 工作目錄(working directory)

      • 專案中的某一個版本
      • 從 Git 目錄內被壓縮過的資料庫中拉出來並放在硬碟供使用或修改
    3. 暫存區(staging area)

      • 一個單一檔案
      • 存放在 Git 目錄下,儲存關於下次提交的資訊。
      • 會稱為索引「index」,但現在更常被稱呼為暫存區。

      https://ithelp.ithome.com.tw/upload/images/20210913/20141010qQ3ygnYYeG.png

  7. 基本 Git 工作流程

    1. 首先在你工作目錄修改檔案或編輯動作。
    2. 預存檔案,將檔案的快照新增加至暫存區。
    3. 做提交的動作,這會讓存在暫存區的檔案快照永久地儲存在 Git 目錄中。

為期 30 天的鐵人賽文章,主要都是紀錄學習筆記,透過翻閱書籍、查找資料後整理,也許有些技術方面不夠專業,但自學的過程挺有成就感的!?
以下都會是後續文章學習過程所參考的資料:


下一篇
Day2|【Git】使用MacOS 作業系統安裝 Git - 以 Homebrew 網頁安裝
系列文
【Git】從零開始學習 Git - 30 天的學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
wrxue
iT邦好手 1 級 ‧ 2021-09-15 09:50:45

請問大大圖是用甚麼軟體製作的

Chun.y.c iT邦新手 5 級 ‧ 2021-09-15 09:57:37 檢舉

哈囉!是 Adobe Illustrator CC 哦!

我要留言

立即登入留言