超入門Git筆記 (1)
這篇文章並非要撰寫又一篇全新的Git教學,因為網路上已經有很多從基礎關聯開始講解為何需要版控軟體,以及Git與各種集中式管理的版控軟體前輩們的差別,這裡就不去解釋了。
這篇文章是寫給已經對Git有一定基礎的了解的讀者,漸進式的說明各種指令與情境作法之整理筆記。
Git 文件庫 (Repository)
Git Repository (簡稱Repo)為一個可以儲存以Git作版控的文件庫存在儲存空間。雖然Git是分散式的版控軟體,但依據工作的模式,可以簡單分為本地端(Local)與遠端(Remote)兩種模式。因此無論是否需要多人協作,或是自己想要在多台電腦隨時可無縫工作的情況下,均可先在Local Repo進行管理,有需要再和Remote Repo進行同步。其他協作者或者自己的 其他電腦,即可和遠端的Repo進行更新,以達成多人或多工作裝置的版控目標。
本地端Local Repo
可用於個人的文件管理(即使身在一個團隊中),因此即使沒有使用遠端管理的狀態下,也能僅使用本機的Local Repo來達到個人版控。使用前當然需要安裝Git軟體,可至官網下載與安裝。
我們在本地端的某個目錄想作Git版控,必須要做的事是讓此目錄初始化為Git可識別的目錄。因此可執行以下的指令:
git init
當完成後,此目錄(含以下)就具備Git的環境了,接下來,這個目錄會多出一些隱藏目錄.git,則表示該目錄已擁有Git的版控能力了。
補充:若要直接用最簡單粗暴的方式讓該目錄解除被Git所控管,只要將init後產生出來的.git隱藏目錄徹底刪除即可。若不想刪除.git,只需要讓目錄解除Git的控管範圍,可使用
git rm -r --cached .
的作法。
這時候就可以使用查詢Git狀態的指令確認:
git status
文件的異動版控管理
文件提交 (Commit)
當文件進行修改後,想在該階段進行一個紀錄,以便未來可進行重要參考或回溯等目的,則可使用commit指令製作一個提交點。不過並非三不五時作一點點異動就要打一個commit,這個感覺與定義雖然沒有一定的標準,但大概是一個小範圍完整的功能完成時,可進行一個commit並註記這個提交的主要原因是什麼。(例如,是為了增加哪個功能,或修改哪個問題等等)
每一次的commit,都會在Git裡面留下記錄,包含是何時由誰提交的commit,或者可簡單從註記中了解這個commit提交的原因。
在進行提交前,先設定使用者資訊
當該電腦進行第一次commit時,若尚未設定git user資訊,則會要求執行資訊的填寫,但這個動作只需要作一次。
請依指令提供Email與使用者名稱
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
以上加上—global參數,讓這個設定僅用於此repository。
若要查詢目前設定的使用者,則使用—list參數 (或-l)
> git config --global --list
user.email=rexlin@example.com
user.name=Rex Lin
還是不能Commit呀!少了「add」指令
當我們進行commit時,還是無法成功,我們可以先使用查詢狀態的指令查看一下。
git status
該訊息說明,目前有文件但仍是「untracked」(未追蹤)狀態,因此尚未能直接進行提交,要提交前,需先進行「add」指令,才能將文件或檔案移至「stage」的狀態,這個才是可進行commit的文件對象。
Git文件狀態簡單說
簡單說一下,在Git控管的目錄,一開始所有檔案都是在untracked (未追蹤)的狀態,而這個區域意即工作目錄(working directory)。而當開始有檔案的異動時,Git會偵測的到並會進入modified狀態。當「有被異動,且想要進行版控的文件」,才需要「追蹤」與管理它們。
因此接下來就是要將這些檔案,移至下一個追蹤的狀態,我們稱之為「staged」。而在stage中的狀態 (即放置於Staging Area),還不會直接受到Git的版控,只是記錄被提交之前的變更 (暫時存儲的緩衝區),需要將他們明確的「提交」(commit)後,才會成為一個正式的版控紀錄點,意即放入Git Repository區,並且會記下所有提交的歷史記錄。
[Working Directory] Untracked狀態 --> [Staging Area] Staged狀態 --> [Git Repository] Tracked狀態