Git是分佈式版本控制系統,同一個Git倉庫,能夠分佈到不一樣的機器上。怎麼分佈呢?git
好在這個世界上有個叫GitHub的神奇的網站,從名字就能夠看出,這個網站就是提供Git倉庫託管服務的,因此,只要註冊一個GitHub帳號,就能夠免費得到Git遠程倉庫。程序員
因爲你的本地Git倉庫和GitHub倉庫之間的傳輸是經過SSH加密的,目的(爲了確保數據傳輸的可靠性,由於GitHub須要識別出你推送的提交確實是你推送的,而不是別人冒充的),若是你不配置相關命令,則每次本地倉庫和遠程倉庫提交時,都須要驗證密碼,爲了方便,因此,須要一點設置:github
git設置免密碼登陸,生成ssh祕鑰命令shell
ssh-keygen -t rsa -C 「<email>」
步驟1:命令輸入完成後,一直回車。會在本地生成一個.ssh文件,打開該文件會看到默認保存位置當前 ~/.ssh/id_rsa(私密) 和id_rsa.pub(公密),將生成的公密用記事本打開,並複製。服務器
步驟2:把id_rsa.pub裏的複製內容添加到github的ssh keys裏,必定不能有空格在密鑰裏面。
以下圖:ssh
「Add Key」,你就應該看到已經添加的Key:分佈式
點「New SSH Key」,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容ide
在git Bash 中輸入如下代碼測試
$ ssh -T git@github.com
當你輸入以上代碼時,會有一段警告代碼,如:fetch
The authenticity of host 'github.com (192.30.255.112)' can't be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)?
這是正常的,你輸入 yes 回車既可。若是你建立 SSH key 的時候設置了密碼,接下來就會提示你輸入密碼,如:
Enter passphrase for key '/home/jeremy/.ssh/id_rsa':
固然若是你密碼輸錯了,會再要求你輸入,直到對了爲止。
密碼正確後你會看到下面這段話,如:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
若是用戶名是正確的,你已經成功設置SSH密鑰。若是你看到 「access denied」 ,則表示拒絕訪問,那麼你就須要使用 https 去訪問,而不是 SSH 。
能夠參考網站:
解決每次push代碼到github都須要輸入用戶名和密碼的方法
注意事項:在GitHub上免費託管的Git倉庫,任何人均可以看到喔(但只有你本身才能改)。因此,不要把敏感信息放進去,形成信息泄露。若是你不想讓別人看到Git庫,有兩個辦法,一是:讓GitHub把公開的倉庫變成私有的,這樣別人就看不見了(不可讀更不可寫)。另外一個辦法是本身動手,搭一個Git服務器,由於是你本身的Git服務器,因此別人也是看不見的。
如今的情景是,你已經在本地建立了一個Git倉庫後,又想在GitHub建立一個Git倉庫,而且讓這兩個倉庫進行遠程同步,這樣,GitHub上的倉庫既能夠做爲備份,又可讓其餘人經過該倉庫來協做,真是一舉多得。
首先,登錄GitHub,而後,在右上角找到「New repository」按鈕,建立一個新的倉庫:
在Repository name填入studygit,其餘保持默認設置,點擊「Create repository」按鈕,就成功地建立了一個新的Git倉庫:
根據GitHub的提示,在本地的studygit倉庫下運行命令
(1)將遠程項目和本地項目進行關聯
$ git remote add origin + 分支地址 //origin是遠程庫的名字,這是Git默認的叫法,也能夠改爲別的,可是origin這個名字一看就知道是遠程庫
(2).第一次推送master分支的全部內容到遠程倉庫
$ git push -u origin master //第一次提交須要這麼作,第二次提交就能夠直接用`git push origin master`或者 `git push `
把本地庫的內容推送到遠程,用git push命令,其實是把當前分支master推送到遠程。
因爲遠程庫是空的,咱們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。
推送成功後,能夠馬上在GitHub頁面中看到遠程庫的內容已經和本地如出一轍
使用 git clone 拷貝一個 Git 倉庫到本地,讓本身可以查看該項目,或者進行修改。
若是你須要與他人合做一個項目,或者想要複製一個項目,看看代碼,你就能夠克隆那個項目。 執行命令:
git clone [url] //[url] 爲你想要複製的項目
克隆完成後,在當前目錄下會生成一個新 目錄,即會遠程的目錄名稱。
*注意事項*:
要克隆一個倉庫,首先必須知道倉庫的地址,而後使用git clone命令克隆。另外,Git支持多種協議,包括https,但經過ssh支持的原生git協議速度最快。
幾乎全部的版本控制系統都以某種形式支持分支。 使用分支意味着你能夠把你的工做從開發主線上分離開來,以避免影響開發主線。
有人把 Git 的分支模型稱爲必殺技特性,而正是由於它,將 Git 從版本控制系統家族裏區分出來。
git branch 分支名稱
git checkout (branchname)
當你切換分支的時候,Git 會用該分支的最後提交的快照替換你的工做目錄的內容, 因此多個分支不須要多個目錄。
git checkout命令加上-b參數表示建立並切換
git checkout -b + 分支名稱 至關於如下兩條命令 git branch 分支名稱 git checkout (branchname)
git branch
沒有參數時,git branch 會列出你在本地的分支,默認是master。
$ git branch * master //意思是:有一個叫作 master 的分支,而且該分支是當前分支
若是須要查看每個分支的最後一次提交,能夠運行 git branch -v 命令:
若是咱們要手動建立一個分支。執行 git branch (branchname) 便可。
$ git branch A //A爲分支名稱 $ git branch * master A
如今咱們能夠看到,有了一個新分支 A。
當你以此方式在上次提交更新以後建立了新分支,若是後來又有更新提交, 而後又切換到了 testing 分支,Git 將還原你的工做目錄到你建立分支時候的樣子。
使用分支將工做切分開來,從而讓咱們可以在不一樣開發環境中作事,並來回切換。
git breach -d 分支名稱
例如咱們要刪除A分支:
$ git branch * master A $ git branch -d A Deleted branch A (was 85fc7e7). $ git branch * master
一旦某分支有了獨立內容,你終究會但願將它合併回到你的主分支。 你可使用如下命令將任何分支合併到當前分支中去:
git merge
切換回master分支後,把A分支的工做成果合併到master分支上:
$ git merge A
合併完後就能夠刪除分支:
$ git branch -d A
若是真的想要刪除分支並丟掉那些工做,如同幫助信息裏所指出的,可使用 -D 選項強制刪除它。
Git鼓勵大量使用分支:
查看分支:git branch 建立分支:git branch <name> 切換分支:git checkout <name> 建立+切換分支:git checkout -b <name> 合併某分支到當前分支:git merge <name> 刪除分支:git branch -d <name> 強制刪除分支:git branch -D <name>
若是master分支和A分支各自都分別有新的提交,這種狀況下,Git沒法執行「快速合併」,只能試圖把各自的修改合併起來,但這種合併就可能會有衝突,
Git用<<<<<<<,=======,>>>>>>>標記出不一樣分支的內容
再提交:
$ git add gitnote.txt $ git commit -m "conflict fixed" [master cf810e4] conflict fixed
注意:
當Git沒法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。
解決衝突就是把Git合併失敗的文件手動編輯爲咱們但願的內容,再提交。
用git log --graph命令能夠看到分支合併圖。
當你從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,而且,遠程倉庫的默認名稱是origin。
要查看遠程庫的信息,用git remote
:
$ git remote origin
或者,用git remote -v
顯示更詳細的信息:
$ git remote -v origin git@github.com:michaelliao/learngit.git (fetch) origin git@github.com:michaelliao/learngit.git (push)
上面顯示了能夠抓取和推送的origin的地址。若是沒有推送權限,就看不到push的地址。
推送分支,就是把該分支上的全部本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上:
$ git push origin master
若是要推送其餘分支,好比dev,就改爲:
$ git push origin dev
建立遠程origin的dev分支到本地,於:
$ git checkout -b dev origin/dev
多人協做的工做模式一般是這樣:
首先,能夠試圖用git push origin <branch-name>推送本身的修改;
若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull試圖合併;
若是合併有衝突,則解決衝突,並在本地提交;
沒有衝突或者解決掉衝突後,再用git push origin <branch-name>推送就能成功!
若是git pull提示no tracking information,則說明本地分支和遠程分支的連接關係沒有建立,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
這就是多人協做的工做模式,一旦熟悉了,就很是簡單。
本人小白程序員,初來乍到,請多關照