git是分布式版本控制系統,同乙個git倉庫,可以分布到不同的機器上。怎麼分布呢?最早,肯定只有一台機器有乙個原始版本庫,此後,別的機器可以「轉殖」這個原始版本庫,而且每台機器的版本庫其實都是一樣的,並沒有主次之分。
實際情況往往是這樣,找一台電腦充當伺服器的角色,每天24小時開機,其他每個人都從這個「伺服器」倉庫轉殖乙份到自己的電腦上,並且各自把各自的提交推送到伺服器倉庫裡,也從伺服器倉庫中拉取別人的提交。
完全可以自己搭建一台執行git的伺服器,不過現階段,為了學git先搭個伺服器絕對是小題大作。好在這個世界上有個叫github的神奇的**,從名字就可以看出,這個**就是提供git倉庫託管服務的,所以,只要註冊乙個github賬號,就可以免費獲得git遠端倉庫。
由於你的本地git倉庫和github倉庫之間的傳輸是通過ssh加密的,所以,需要一點設定:
第1步:建立ssh key。在使用者主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa
和id_rsa.pub
這兩個檔案,如果已經有了,可直接跳到下一步。如果沒有,開啟shell(windows下開啟git bash),建立ssh key:
$ ssh-keygen -t rsa -c "[email protected]"#注意這裡只有郵件位址
接下來一路回車就可以了
如果一切順利的話,可以在使用者主目錄裡找到.ssh
目錄,裡面有id_rsa
和id_rsa.pub
兩個檔案,這兩個就是ssh key的秘鑰對,id_rsa
是私鑰,不能洩露出去,id_rsa.pub
是公鑰,可以放心地告訴任何人。
第2步:登陸github,開啟「account settings」,「ssh keys」頁面:
然後,點「add ssh key」,填上任意title,在key文字框裡貼上id_rsa.pub
檔案的內容:
為什麼github需要ssh key呢?因為github需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而git支援ssh協議,所以,github只要知道了你的公鑰,就可以確認只有你自己才能推送。
當然,github允許你新增多個key。假定你有若干電腦,你一會兒在公司提交,一會兒在家裡提交,只要把每台電腦的key都新增到github,就可以在每台電腦上往github推送了。
現在的情景是,你已經在本地建立了乙個git倉庫後,又想在github建立乙個git倉庫,並且讓這兩個倉庫進行遠端同步,這樣,github上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協作,真是一舉多得。
首先在github建立乙個新倉庫,然後可以從這個倉庫轉殖出新的倉庫,也可以把乙個已有的本地倉庫與之關聯
把本地倉庫和github上面的倉庫關聯:在本地的learngit
倉庫下執行命令:
λ git remote add origin 遠端,origin:起源,這裡是遠端倉庫的名字#參看遠端資訊
λ git remote -v
gitee [email protected]:gaokingk/algorithms (fetch)
gitee [email protected]:gaokingk/algorithms (push)
新增後,遠端庫的名字就是origin
,這是git預設的叫法,也可以改成別的,但是origin
這個名字一看就知道是遠端庫。
$ git push -u origin mastercounting objects: 20, done.
delta compression using up to 4 threads.
compressing objects: 100% (15/15), done.
writing objects: 100% (20/20), 1.64 kib | 560.00 kib/s, done.
total 20 (delta 5), reused 0 (delta 0)
remote: resolving deltas: 100% (5/5), done.
to github.com:michaelliao/learngit.git
* [new branch] master -> master
branch 'master' set up to track remote branch 'master' from 'origin'.
把本地庫的內容推送到遠端,用git push
命令,實際上是把當前分支master
推送到遠端。
由於遠端庫是空的,我們第一次推送master
分支時,加上了-u
引數,git不但會把本地的master
分支內容推送的遠端新的master
分支,還會把本地的master
分支和遠端的master
分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
從現在起,只要本地作了提交,就可以通過命令:
$ git push origin master
把本地master
分支的最新修改推送至github,現在,你就擁有了真正的分布式版本庫!
git remote set-url [--push]#eg(sort) λ git remote set-url visualization
要關聯乙個遠端庫,使用命令git remote add origin git@server-name:path/repo-name.git
;
關聯後,使用命令git push -u origin master
第一次推送master分支的所有內容;
此後,每次本地提交後,只要有必要,就可以使用命令git push origin master
推送最新修改;
分布式版本系統的最大好處之一是在本地工作完全不需要考慮遠端庫的存在,也就是有沒有聯網都可以正常工作,而svn在沒有聯網的時候是拒絕幹活的!當有網路的時候,再把本地提交推送一下就完成了同步,真是太方便了!
參考鏈結
現在,假設我們從零開發,那麼最好的方式是先建立遠端庫,然後,從遠端庫轉殖。
第一步,在github上建立乙個倉庫:gitskills
λ git clonecloning into 'gitskills'...
remote: enumerating objects: 3, done.
remote: counting objects: 100% (3/3), done.
remote: total 3 (delta 0), reused 0 (delta 0), pack-reused 0
unpacking objects: 100% (3/3), done.
你也許還注意到,github給出的位址不止乙個,還可以用這樣的位址。實際上,git支援多種協議,預設的
git://
使用ssh,但也可以使用https
等其他協議。
使用https
除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http埠的公司內部就無法使用ssh
協議而只能用https
。
要轉殖乙個倉庫,首先必須知道倉庫的位址,然後使用git clone
命令轉殖。
git支援多種協議,包括https
,但通過ssh
支援的原生git
協議速度最快。
Git 遠端倉庫
git 支援在本地倉庫進行程式專案的版本管理,這個本地的 git 倉庫在程式專案的資料夾內 也就是 git 資料夾內 隨著程式專案的推進,我們會把不同階段的檔案內容加入到這個 git 倉庫中。這個倉庫由我們直接操控,我們將它稱之為 本地 git 倉庫 除了 本地 git 倉庫 外,如果需要與他人共同...
git 遠端倉庫
1 github github的這個 就是提供git倉庫託管服務的,所以,只要註冊乙個github賬號,就可以免費獲得git遠端倉庫。由於你的本地git倉庫和github倉庫之間的傳輸是通過ssh加密的,所以,需要一點設定 第1步 建立ssh key。在使用者主目錄下,看看有沒有.ssh目錄,如果有...
git遠端倉庫
git遠端倉庫 目前我們使用到的 git 命令都是在本地執行,如果你想通過 git 分享你的 或者與其他開發人員合作。你就需要將資料放到一台其他開發人員能夠連線的伺服器上。新增遠端倉庫 1 git remote add shortname url 由於你的本地git倉庫和github倉庫之間的傳輸是...