2019/12/02 初版撰寫
先準備好一個git專案,在專案上就會有連結專案的SSH跟HTTPS,兩個Clone的方法是一樣的,這邊就選擇用HTTP來Clone。
複製好HTTP,到SourceTree內選擇Clone來到右圖的頁面
空格由上至下分別是
都設定完之後下載即可,下載完之後就完成了。
進到專案畫面的左邊,有顯示目前分支的選項,這邊顯示你目前切換過擁有的分支,右邊的分支表也可以看到其他分支與當前所在的分支。
創建分支是為了讓複數使用者在同一個專案下同時作業並且不會上傳時互相衝突,因為在同一個分支內每次要push時候要先確認有沒有其他未pull的檔案才能push。
又或者是在開發初期想要測試某些功能或修改基底程式,但是又不想要汙染原有的程式,就會切開一個分支來使用,而當測試完成後可以再merge回去或直接捨棄。
在上方的圖示有一個Branch點開後,可以看到新增Branch的頁面,點開後就可以新增Branch,又或者可以右鍵點選左邊欄位新增Branch
一樣在上方的Branch按鈕或是左邊欄位右鍵點選都可以刪除多餘的Branch,
刪除分支的時候要確認該分之已經沒人使用,且檔案都已經上傳了,因為刪除後沒辦法復原,所以要再三確認比較好。
合併分之前要先確認自己是在哪一個分支,在哪個分支的哪個節點會用○的標記顯示,確認好之後選擇Merge的按鈕或是對目標分支右鍵按Merger就可以將分支給合進來,合進來之後會產生一個Merge的Commit把這個上傳即可。
※注意! 這個是完美合併的結果,如果檔案有衝突的話,請參考FAQ的衝突處理。
在History裡面可以看到一點一點的節點,這個就是commit,如果直接翻譯的話意思會很奇怪,所以我習慣稱呼她為節點。
Commit是Git系統最基本的單位,一個commit代表著一個專案的版本進度,使用者可以在不同的commit之間自由切換,這種概念類似於遊戲關卡的存檔紀錄。
單看這個單詞可能會認為這是一個把檔案下載的功能,但其實這麼說也對一半,Fetch的獲取是獲得其他Remote端的Commit資訊,每當User被通知有新的檔案上傳時都必須先獲取一次commit資訊後才能下載
Pull就是將最新的commit資訊下載的方法,通常會建議先Fetch後再下載檔案,這樣可以保證使用者自己抓了那些檔案,如果有衝突的話可以提前預知。
但是其實pull本身的功能就包含了Fetch,雖然單按pull是可行的,但是也很有可能會出現錯誤。
※Pull一次只能針對一個branch,如果我們有多個branch 要pull,每個branch都需要個別執行。
每當user將檔案commit之後,push圖示旁邊就會出現紅色的數字,顯示你有幾個未上傳的檔案,這表示這些commit還放在local端,還沒傳到Remote端。
Push就是將這些local commit資訊上傳到對應個branch上。
在工作上都會遇到優先度修改、或者是有緊急修改要處理,手邊處理的東西就必須先儲存下來之後在對應,通常會選用commit的方式,但是git提供了另外一個功能Stash
使用 SourceTree 也可以做這件事,在上方選單有一顆「Stash」按鈕,按下之後便會出現對話框
按下之後就會儲存在左邊的面板上,只要點擊Apply就可以把剛剛修改的內容給回復回來。
在 Git,「標籤(tag)」是一個指向某一個 Commit 的指標。
通常在開發軟體有完成特定的里程碑,例如軟體版號 1.0.0
或是 beta-release
之類的,這時候就很適合使用標籤做標記。
標籤有兩種,一種是輕量標籤(lightweight tag),一種是有附註標籤(annotated tag),但不管哪一種,都可以把它當做貼紙一樣看待,它就是貼在某個 Commit 上的東西。
在SourceTree上方的面板可以看到Tag的按鈕,按下後就會出現右邊的面板
這邊就可以追加或刪除標籤。
再Source追加的標籤預設都是有附註標籤。
有附註標籤主要用來做像是軟體版號之類的用途,而輕量標籤則是用來個人使用或是暫時標記用途。簡單的說,有附註標籤的好處就是有更多關於這張標籤的資訊,例如是誰在什麼時候貼這張標籤,以及為什麼要貼這張標籤。所以如果你不是很在乎這些資訊,用一般的輕量標籤也是沒什麼問題。
有附註的標籤比一般的輕量標籤多了一些資訊,可以清楚的看得出來是誰在什麼時候打了這張標籤。
不管是哪種標籤,跟分支一樣都是以檔案方式存在 .git/refs/tags
目錄下
「Advanced Options」,展開後有一項「Lightweight tag(not recommended)」的選項打勾 ,這樣產生的Tag就是輕量標籤了。
對已經在Repository內有紀錄的檔案右鍵->Log Selected,可以查看該檔案的編輯紀錄,就可以知道這個檔案詳細的修改紀錄,包含時間、修改者、修改內容.....等等