git是分布式版本控制系統,同乙個git倉庫,可以分布到不同的機器上。怎麼分布呢?最早,肯定只有一台機器有乙個原始版本庫,此後,別的機器可以「轉殖」這個原始版本庫,而且每台機器的版本庫其實都是一樣的,並沒有主次之分。
實際情況往往是這樣,找一台電腦充當伺服器的角色,每天24小時開機,其他每個人都從這個「伺服器」倉庫轉殖乙份到自己的電腦上,並且各自把各自的提交
推送到伺服器倉庫裡,也從伺服器倉庫中
拉取別人的提交。
可以自己建乙個git伺服器,也可以先直接使用github。
由於你的本地git倉庫和github倉庫之間的傳輸是通過ssh加密的,所以,需要一點設定:
第1步:建立ssh key。
在使用者主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有
id_rsa
和id_rsa.pub
這兩個檔案,如果已經有了,
個人建議刪除掉。$
ssh-keygen -t rsa -
一路回車,使用預設值即可,由於這個key也不是用於軍事目的,所以也無需設定密碼。
如果一切順利的話,可以在使用者主目錄裡找到
.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上免費託管的git倉庫,任何人都可以看到喔(但只有你自己才能改)。所以,
不要把敏感資訊放進去
。如果你不想讓別人看到git庫,有兩個辦法,乙個是交點保護費,讓github把公開的倉庫變成私有的,這樣別人就看不見了(不可讀更不可寫)。另乙個辦法是自己動手,
搭乙個git伺服器
,因為是你自己的git伺服器,所以別人也是看不見的。這個方法我們後面會講到的,相當簡單,公司內部開發必備。
新增完成之後是這樣的
然後回到終端輸入指令:ssh -t
執行完這條指令之後會輸出 are you sure you want to continue connecting (yes/no)? 輸入 yes 回車
回到github,重新整理網頁就可以看到鑰匙旁的灰色小圓點變綠,就表明已經新增成功了。
-t disable pseudo-tty allocation.
禁止分配偽終端,當用ssh或telnet等登入系統時,系統分配給我們的終端就是偽終端。
新增檔案後,先commit,然後push
現在的情景是,
你已經在
本地建立了
乙個git倉庫後,又想在github建立乙個git倉庫,並且讓這兩個倉庫進行遠端同步
,這樣,github上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協作,真是一舉多得。
首先,登陸github
,然後,在右上角找到「create a new repo」按鈕,建立乙個新的倉庫test:
其他保持預設設定
,不要選gpl協議,不然不是空庫了。
可以選擇gitignore,最好是預設!!!
目前,在github上的這個倉庫還是空的,github告訴我們,可以從這個倉庫轉殖出新的倉庫,也可以把乙個
已有的本地倉庫與之關聯
,然後,把本地倉庫的內容推送到github倉庫。
在本地的倉庫test下執行命令:
$ git remote add origin
git@github
.com:
michaelliao/learngit.git
注意,把上面的
michaelliao
替換成你自己的github賬戶名,如
否則,你在本地關聯的就是我的遠端庫,
關聯沒有問題,但是你以後推送是推不上去的,因為你的ssh key公鑰不在我的賬戶列表中。
新增後,
遠端庫的名字就是
origin
,這是git預設的叫法
,下一步,就可以把本地庫的所有內容
推送到遠端庫上
:git push -u origin master
實際上是把當前分支
master
推送到遠端。
由於遠端庫是空的,我們
第一次推送
master
分支時,加上了
-u引數,git不但會把本地的
master
分支內容推送的遠端
新的master
分支,還會把本地的
master
分支和遠端的
master
分支關聯起來
,在以後的推送或者拉取時就可以
簡化命令
。推送成功後,可以立刻在github頁面中看到遠端庫的內容已經和本地一模一樣:
從現在起,只要本地作了提交add和commit之後,就可以通過命令:
3.$ git push origin master
把本地master
分支的最新修改推送至github
分布式版本系統的最大好處之一是在本地工作完全
不需要考慮遠端庫的存在
,也就是有沒有聯網都可以正常工作,
而svn在沒有聯網的時候是拒絕幹活的!
當有網路的時候,再把本地提交推送一下就完成了同步
!2,從遠端庫轉殖
上面我們講了先有本地庫,後有遠端庫的時候,如何關聯遠端庫。
現在,假設我們從零開發,那麼
最好的方式
是先建立遠端庫,然後,從遠端庫轉殖。
1,登陸github,建立乙個新的倉庫,名字叫
gitskills
我們勾選
initialize this repository with a readme
,這樣github會自動為我們建立乙個
readme.md
檔案。gitignore
也可以選擇。建立完畢後,可以看到
readme.md
檔案:現在,遠端庫已經準備好了,
下一步是用命令
git clone
轉殖乙個本地庫:
git clone git
@github
.com:
michaelliao/gitskills.git
git clone
:elesos/ffmpeg_demos
還可以用
這樣的位址。實際上,git支援多種協議,預設的
git://
使用ssh,但也可以使用
等其他協議。
使用https
除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令
,但是在某些只開放http埠的公司內部就無法使用
ssh協議而只能用
。使用github
如何參與乙個開源專案呢?
點「fork」就在自己的賬號下轉殖了乙個bootstrap倉庫,然後,
從自己的賬號下
clone:
git clone git
@github
.com:
michaelliao/bootstrap.git
一定要從自己的賬號下clone倉庫
,這樣你才能推送修改。如果從bootstrap的作者的倉庫位址
[email protected]:twbs/bootstrap.git
轉殖,因
為沒有許可權,你將不能推送修改
如果你想修復bootstrap的乙個bug,或者新增乙個功能,立刻就可以開始幹活,幹完後,
往自己的倉庫推送
。如果你希望bootstrap的官方庫能接受你的修改,你就可以在github上發起乙個
pull request
。當然,對方是否接受你的pull request就不一定了。
git push origin master後,可以在github網上自己的fork庫處
pull request
史上最淺顯易懂的Git教程1
最先進的分布式版本控制系統 沒有之一 cvs和svn,這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用 集中式版本控制系統,版本庫是集中存放在 伺服器的,而幹活的時候,用的都是自己的電腦,所以要先從 伺服器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給 伺服器。分布式版本控制系統...
史上最淺顯易懂的Git教程1
最先進的分布式版本控制系統 沒有之一 cvs和svn,這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用 集中式版本控制系統,版本庫是集中存放在 伺服器的,而幹活的時候,用的都是自己的電腦,所以要先從 伺服器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給 伺服器。分布式版本控制系統...
史上最淺顯易懂的Git分布式版本控制系統教程
從零起步的git教程,讓你 苦上手世界上最流行的分布式版本控制系統git!既然號稱史上最淺顯易懂的git教程,那這個教程有什麼讓你怦然心動的特點呢?首先,本教程絕對面向初學者,沒有接觸過版本控制概念的讀者也可以輕鬆入門,不必擔心起步難度 其次,本教程實用性超強,邊學邊練,一點也不覺得枯燥。而且,你所...