上週在設計 Git 練習題目時,意外發現一個看似 SourceTree 這套 Git 版控工具的問題 (Bug),就是在開啟一些特定 Git 版本庫的時候,其版本線圖 (Graph) 會整個大亂,非常奇怪。我後來到官網論壇發問後才得到答案,原來有個小地方需要注意,各位有在用 SourceTree 的人應該也要注意一下。
我在 GitHub 有設立一個小專案,用來描述這個問題,請依照下列步驟重現問題:
- 先複製 (Clone) 這個範例專案下來
git clone https://github.com/doggy8088/SourceTree_Odd_Graph_Demo - 試圖取出 branch1 分支
git checkout branch1 - 加入此工作目錄到 SourceTree 程式裡,然後點選 master 分支
此時你會看到這個 master 分支的版本線圖全亂了,它變成一個孤兒的分支,實在太奇怪了!
我如果用 TortoiseGit 的 Show log 功能查看線圖,則完全沒問題!
後來終於發現,原來是 SourceTree 在顯示線圖時,預設排序為 Date Order ( 以提交時間做排序 )
只要調整為 Ancestor Order ( 以各版本祖先的順位做排序 ) 就完全解決了!
其實 Ancestor Order 才是原本 Git 顯示圖形時該使用的排序方式,因為 Git 支援修改版本的機制,例如透過 Rebase (重新指定基礎版本位置) 就可以修改版本的順序,自然也不會照著提的順序顯示版本,圖形自然也畫不出來!
我認為唯一使用 Date Order ( 以提交時間做排序 ) 的時間,是當開發人員單純想看提交的時間順序時才有用,只是這時的版本線圖就不一定準確了,這點要特別小心。
相關連結