2017年8月14日星期一

GitHub 及 EGit ( PART 3 / 8 ) + Git stage

接上回【GitHub 及 EGit ( PART 2 / 8 ) + 網絡素養

設定完成,是時候去了解一下 Git 是什麼,公式化介紹不說,來點不一樣吧。簡單地形容的話,GitHub 是 Open Source 世界入口,Git 是個管理 source code 工具,實際上是怎麼一回事呢?這裡不會單獨講解 Git ,網上可以找到很多教學,這裡會混合 Eclipse + Egit + GitHub 講解及實際操作。

技術環環相扣,要在這個迴圈找個切入點,需要反覆看幾次及動手練習,才會理解怎用。GitHub 是建立於 Git 之上,所以想跳步直接用 GitHub,終有一天會碰釘,還是老實一點從 Git 學起。

基本上,什麼都沒有說明

基本慨念


首先,大約是這樣吧,在認知上,應該有這些東西存在。有伺服器 (server side),有用戶 (client side),每一邊都有各自的 Git 管理檔案,兩者之間有互動。

滙入 Project


Import to workspace

兩邊怎互動?這個先放一邊去,先攪清楚 Eclipce workspace 跟 Local Git Repo 在做什麼。

上一回說過,只差一步由 Working Tree 那裡 Import 到 Eclipse workspace。所以在【Working Tree】那裡右鍵,選【Import Projects】。

沒特別,按【Finish】

Import source 就是現在 Local Git Repo 裡的 Working Tree,按【Finish】。

好像都準備好了

好了,終於看到熟識的【Package Explorer】有東西,Import 到 Eclipse workspace 這步完成。
PS: 建立【Project】時,會自動生成【.project】這個檔案。【.project】是什麼? 請 Google。

———————————簡易的分隔線————————————

然後呢?那個 Eclipse workspace 跟 Local Git Repo 的關係是?別心急,Egit 還有一個 View 沒有解說過——【Git Staging】。

EGit Staging 周期流程


本篇最重要的概念,不會這個 Git 都不會用
  • EGit 的【Unstaged Changes】,相等於 EGit Help 文件內的【Untracked files】。

  • EGit 的【Staged Changes】,相等於 EGit Help 文件內的【Tracked files】。

  • EGit 的【Add to Index】,相等於 EGit Help 文件內的【Add a file】。

  • EGit 的【Remove from Index】,相等於 EGit Help 文件內的【Remove a file】。

交東西給Local Repo 及 Push 上 GitHub

最後就是 commit 入 Local Git Repo,還有 Push 上 GitHub。
commit 的檔案一定是 【Staged Changes】的,沒做【Add to Index】這步,會有提示訊息。

【Commit Message】很重要,這個跟你能不能找回特定版本有重大關係,別留空或亂寫,想清楚才好,網上有很多建議,可以去參考一下。先熟習 EGit,亂來就亂來吧,經驗就是這樣累積下來。

【Commit and Push】,別亂按!在熟習 Local Git 操作前,就忍耐一下。

順便補充,【Committer】是上一回設定【user.name】及【user.email】的産物。

練習的時,這個技巧很重要

不 Push 就不會上傳到 GitHub 的 【Remote Git Repo】!所以這裡怎改怎玩,最後把整個 Local Repo 刪除就沒事發生過。

Recording Changes in the Repository
http://wiki.eclipse.org/EGit/User_Guide#Recording_Changes_in_the_Repository

EGit 檔案結構


在 Windows 下,git 的結構是怎樣呢?

圖片內有說明

【.git】這個資料,入面的東西是 git 的管理用資料,有什麼及怎樣用,不知道也可以,因為是給 git 程式用。細心留意,最下面的【Git Repositories】己經分好 【A:\javatoybox\GitHub_Local_Repo\OOAD\.git】 及 【A:\javatoybox\GitHub_Local_Repo\OOAD】兩部份,現在只需要關心【Working Tree】這個。

———————————簡易的分隔線————————————

操作測試


事前準備


反正都要試【Staging Lifecycle】,把所有東西都攤開來試。開始之前,先把 View 調整好……擺陣!

背了Staging那個圖吧

在【Working Tree】會發現,跟 Windows 內的布置不同,少了一個 project 檔案,請跟上圖做,在【Working Tree】右鍵,選【Add to Index】。

看圖

按下拉選單,再按【Filters…】。

還有很多選項,試試看

把【.* resource】取消打勾。

看到了!

現在的【Project Explorer】對比【Working Tree】及 Windows 視窗,該出現的檔案都出現 。【.git】資料夾就放棄吧,那東西顯示在【Project Explorer】也沒用,無視。

擺陣!

希望跟上圖一樣,把視窗縮小及移好位置。
所有準備都做好,布陣完成。

———————————簡易的分隔線————————————

動手測試 


這個測試是為了理解【Staging Lifecycle】及 EGit 的 GUI 介面。
  1. GUI 的連動狀況
  2. GUI 如何表示 Staging Lifecycle
不想看測試過程及操作示範,可直接去 結論

在檔案總管內,新增文檔

測試 windows 視窗新增檔案會怎樣。

隨便啦!

名字為【egit_test_on_windows】。

不會自動更新GUI,須要手動


好像不會即時更新,要過一段時間才出現新增的檔案。這時候可以手動去 Refresh view。

測試新增文檔結果

更新完【Project Explorer】及【Local Git Repo】後,大約是這樣。

首先,新增的檔案都有在 Git Repo view 及 Project Explorer view 中出現,證明即使在 Eclipse 外,直接新增檔案也能反映在 Eclipse 中。

然後,發現【Git Staging】中,【Unstaged Changes】有新加檔案。
很正常,跟據【Staging Lifecycle】,這是一個【Untracked files】。

這次在【Git Staging】用【Add to Index】

知道是【Untracked files】怎做?當然是把檔案弄做【tracked files】。發現【Project Explorer】的小圖示會由【藍色問號】轉做【綠色加號】,小圖示是有意義的,參考 Help 文檔之餘,也親手試試,參透一下。

Icon Decorations
http://wiki.eclipse.org/EGit/User_Guide#Icon_Decorations

———————————簡易的分隔線————————————

在沒有 commit 情況下,更新檔案

新增檔案試過,現在測試修改檔案,看看在 GUI 有什麼變化。
開啟檔案後,寫點什麼,然後 save,回到【Project Explorer】,右鍵 --> 選 Refresh。

看 Help 文檔

修改檔案後,多了這些。【>】在icon旁邊有什麼義意? 回去看 Help 文檔,再實際體驗多幾次就會明白。


有【Untracked files】怎做?了解【Staging Lifecycle】,做多幾次【Add to Index】,用腦想一想。

測試在Windows 視窗刪除檔案


新增及修改都試過,最後試刪除。把檔案刪除後,回 Eclipse 去 Refresh 【Project Explorer】及【Working Tree】兩個View。

不知道遇到【Untracked files】怎做,請再回顧一次全文

檔案刪了,【Untracked files】出現一個帶灰色【X】小圖示的檔案。有【Untracked files】,懂怎樣做吧……

———————————簡易的分隔線————————————

在 Windows 視窗都做過新增、修改及刪除。現在試一下在【Working Tree 】及【Project Explorer】做一次同樣的事。


先在【Working Tree 】新增檔案看看……
跟本沒有【新增】這個選項。

只有【刪除】及【修改】兩項

有刪除檔案。要修改的話,在要改的檔案右鍵,選【Open in Editor】。

修改.gitignore

嘗試修改【.gitignore】。然後按【CTRL + S】儲存檔案。

不用手動Refresh view

在 Windows 資料夾修改檔案,要回 Eclipse 手動 Refresh View,但在 Eclipse 裡修改就不用這樣做,【Git Repositories】view 會即時自動更新。

———————————簡易的分隔線————————————

同樣的測試,在【Project Explorer】再做一次。新增、修改及刪除檔案……因為不需手動更新 View,省很多步驟。


———————————簡易的分隔線————————————


小圖示

做過那麼多測試,總結一下︰
  • 有好幾個地方可以做【Add to Index】,效果都一樣,看個人喜好及習慣使用︰
    1. 【Project Explorer】的 [project] 右鍵 --> 【Team】 -->【Add to Index】
    2. 【Git Staging】的【Unstaged Changes】右鍵 -->【Add to Index】
    3. 【Git Repositories】的【Working Tree】右鍵 --> 【Add to Index】

    以上三種方法,本篇文章都有附加圖片示範過。

  • 在 Windows 資料夾做改動,回到 Eclipse 要 Refresh view ,而在【Project Explorer】或【Working Tree 】做改動,則會自動更新 View。

  • 【Working Tree 】跟【Project Explorer】互通,而且【Project Explorer】有小圖示表示檔案狀態,【Working Tree 】沒有。

  • 在【Project Explorer】右鍵選單,大部份功能都有,包括新增檔案之類,【Working Tree 】的右鍵選單,沒有新增檔案。

結論︰

在【Project Explorer】做所有事,無需在 Windows 資料夾中新增、修改及刪檔,Working Tree 也可以摺疊起來。

不需要每做完一個動作就做【Add to Index】及 Refresh view ,因為要示範所以才會每次都做,所以新增、修改及刪除都做完,一次過做【Add to Index】及 Refresh view 就可以。

下一回【GitHub 及 EGit ( PART 4 / 8 ) + Git Object Model

沒有留言:

發佈留言

設有留言驗證及審查,檢閱後,才會顯示留言。
本人惰性很高,留言或許會石沉大海。