PHPz2017-05-02 09:35:50
如果是大家一起協作的情況,可能其他人推了其他分支到中央倉庫,這時候你本地是看不到的。
例如原來只有master
分支,另外一个人推送了f1
分支。
這時在你的本地,
λ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
直接執行切換分支到f1
,
λ git checkout f1
error: pathspec 'f1' did not match any file(s) known to git.
當然是不行的啦。
那該怎麼做呢?
你可以把中央的分支資訊取下來
λ git fetch origin
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://git.coding.net/xxx/xxx
* [new branch] f1 -> origin/f1
λ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/f1
remotes/origin/master
這樣你就能愉快地切換分支了
λ git checkout f1
Branch f1 set up to track remote branch f1 from origin.
Switched to a new branch 'f1'
此時你已經在f1
分支了,
λ git branch -a
* f1
master
remotes/origin/HEAD -> origin/master
remotes/origin/f1
remotes/origin/master
*
在前面表示本地目前所指向的分支。
某草草2017-05-02 09:35:50
具體程式碼是怎麼儲存的不確定,沒研究過。但是切換這個功能,應該不是下載全部程式碼。應該是先偵測本地程式碼,然後把本地沒有的程式碼下載下來,本地有的程式碼不下載。如果你細心觀察,一個專案的程式碼量大的時候,你初次克隆需要好多時間,但是切換分支則速度快很多。雖然程式碼和分支保持一致,但是感覺並不是每次都重新下載所有程式碼。