教材
本文主要參考
- How to Use Version Control in Git & GitHub | Udacity
- 簡介 · Git
- 用Git版本控制【Git的基本介紹】 | 連猴子都能懂的Git入門指南 | 貝格樂(Backlog)
- Git 教學(1) : Git 的基本使用 - 好麻煩部落格 // 推薦閱讀
比較兩文件
fc <file_1><file_2>// windowsdiff -u <file_1><file_2>// Mac OS or Linux
儲存檔案的時機與大小
- 每次進行邏輯更改時儲存檔案(建議手動非自動)
版本控制系統:CVS v.s. SVN
- CVS, Concurrent Version System:協作版本系統
- SVN, Subversion:子版本
- 可視為CVS的升級版
- 特點:中央控管(修改完要submit回一個中央系統)
- Mercurial (abbr:hg)
- 性質類似於git
- 參考資料:為什麼比 GIT 更好--理解 Mercurial 版本管理系統 - OpenFoundry
概念圖
- (完整版可參考第三章)
同時提交多個git文件
- repository(儲藏庫):放置git文件的倉庫
git log --stat// 顯示統計數據(如幾個檔案變更,新增多少內容)- 在此模式下,可以按Q停止查看輸出
設置(教學中建議的)工作環境(Windows)
- 瀏覽器會預設儲存成txt,這點要特別注意
- 可用
mv git-completion.bash.txt git-completion.bash git config --global core.editor "'<text_editor_path>' -n -w"// 設定預設編輯器-n在新視窗中開啟-w關閉文字編輯器後再繼續- 不明原因設置失敗,論壇上有人有相同問題
git config --global push.default upstream// 建議用法,未解釋git config --global merge.conflictstyle diff3// 建議用法,未解釋
常用指令整理
git commit提交git log顯示所有commit內容(歷史紀錄)git diff <commit id_1> <commit id_2>類似於fc或diffgit --version可查看git的版本git help <command>有問題時可用此指令獲得幫助(如:git help diff)git clone <repository_url>複製repository到當前資料夾git config --global color.ui auto獲得彩色的輸出git checkout <commit id>恢復到之前的版本- (註:不等於svn checkout)
- 註:若用git checkout還原到舊版本,則用git log輸出歷史紀錄時會發現最新的commit是剛剛還原的版本,但這會有’detached HEAD'的問題
"好像"可以不用打完整的commit id,可以只打最前面的部分即可- (更新:至少要打前四碼,前提:前面部分commit id沒有衝突)
- 如:完整的id為7c81b8021ec16c5c7b240220314d01200957d605,可以只打7c81b8
ls -a顯示隱藏檔 (以".”開頭的檔案)mv <file_initial_location> <file_destination_file>移動檔案或重新命名history可用來查看輸入過的指令git bash 執行緩慢問題
Git/Bash is extremely slow in Windows 7 x64 - Stack Overflow 測試過,重開機後已解決效能差的問題
Git 錯誤和警告解決方案
Should not be doing an octopus(不應執行 octopus)
Octopus 是 Git 用來合併多個不同代碼版本的一種策略。如果在不合適的情況下嘗試使用該策略,則可能會出現此消息。You are in 'detached HEAD' state(你處於「分離的 HEAD」狀態)
Git 將你目前所在的提交稱為 HEAD。可通過切換到前一個提交來「分離」HEAD,這在下一個影片中有說明。雖然此警告聽起來不太好,但分離 HEAD 實際上不是壞事。Git 只是向你發出警告,以便你知道自己正在這樣做。Panic! (the 'impossible' happened)((天哪!「不可能的事」發生了))
這是真正的錯誤消息,但它不是由 Git 輸出的,而是由 GHC(編程語言 Haskell 的編譯器)輸出的。它僅在發生特別讓人驚訝的錯誤時才會出現!
- 星號(*)代表有修改尚未儲存