摘要:簡介是目前世界上最先進的分布式版本控制系統沒有之一。查看所有分支的版本操作記錄。工作區直接刪除文件,提交到版本庫。與他人協作涉及管理遠程倉庫以及根據需要推送或拉取數據。克隆遠程倉庫支持多種協議,默認使用,也可以使用等其他協議。
Git簡介
Git是目前世界上最先進的分布式版本控制系統(沒有之一)。
Linux之父Linux用C語言寫了Git分布式版本控制系統。
區別 | 分布式 | 集中式 |
---|---|---|
中央服務器 | 有,版本庫集中存放在中央服務器,工作時需從中央服務器獲取最新版本代碼,工作完成后在將代碼推送到中央服務器。中央服務器出了問題,開發者幾乎無法工作 | 無,開發人員本地都有本地存儲庫(Local Repository) |
聯網 | 必須,必須要聯網才能工作,而且對網絡的依賴性較強,網絡較差或者文件較大,文件提交的速度會受很大的限制 | 不是必要的,在沒有網絡的情況下也可以執行commit、查看版本提交記錄、以及分支操作,在有網絡的情況下執行 push 將代碼從本地倉庫推送到遠程倉庫(Remote Repository)。 |
存儲格式 | 原始文件,體積大 | 元數據,體積小 |
分支操作 | 創建新的分支則所有的人都會擁有和你一樣的分支 | 分支操作不會影響其他開發人員 |
提交方式 | 直接提交到中央版本庫 | 先commit到本地倉庫,再push到遠程倉庫 |
優點 | 方便管理,邏輯明確,上手快;更能保證代碼的安全性;代碼一致性非常高;有良好的目錄級權限控制系統 | 速度快、靈活,分支之間可以任意切換;單機合并分支,開發者之間容易解決沖突;可離線工作,不影響本地代碼編寫;公共服務器壓力小,數據傳輸量少 |
缺點 | 服務器性能要求高,數據體量大;必須聯網;不適合開源;分支管理不靈活 | 不符合常規思維,學習周期相對較長;代碼保密性差,一旦開發者把整個庫克隆下來就可以完全公開所有代碼和版本信息。 |
創建一個項目目錄(mkdir Git)
進入到這個目錄(cd Git)
初始化版本庫(git init)
在當前目錄下會有.git的目錄,它是git進行跟蹤和管理版本庫,禁止刪改此文件(如果沒看到可能是您的電腦不顯示隱藏文件,在命令行工具運行 ls -ah可查看)。
$ mkdir Git $ cd Git $ git init // Initialized empty Git repository in /Users/zhengdahua/Documents/Project/Private/Git/.git/ 初始化空的版本庫
編寫一個README.md文件
將README.md添加到暫存區(git add README.md)
確認提交文件到倉庫(git commit -m "add example file")
我們當前的項目目錄是工作區,git初始化之后會生成一個.git文件,即我們所說的版本庫(respository),.git中有一個index文件就是暫存區(stage),git還為我們自動生成了一個分支master以及指向該分支的指針head。想了解更多,請移步git工作區、暫存區、版本庫之間的關系。
$ type nul>README.md $ git add README.md $ git commit -m "add example file"版本回退
查看版本庫的狀態(git status)。下面的命令輸出告訴我們,document.md被修改過了,但還沒有提交。
? Git git:(master) git status On branch master Changes not staged for commit: (use "git add..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: docs/document.md no changes added to commit (use "git add" and/or "git commit -a") ? Git git:(master) ?
比較兩次修改的差異(git diff)。“-”后面跟的是刪除的內容,“+”后面跟的是新增的內容
-### 4. 編寫一個README.md文件 -### 5. 將README.md添加到暫存區(git add README.md) -### 6. 確認提交文件到倉庫(git commit -m "add example file") ++ 4. 編寫一個README.md文件 ++ 5. 將README.md添加到暫存區(git add README.md)
查看提交日志(git log)。顯示從最近到最遠的提交日志
commit 241f77158c2d59b0b10e482b74a24150a0bebeb4 (HEAD -> master) Author: kevinDate: Sun Feb 24 22:24:51 2019 +0800 update document.md commit f953ccc298a430939e5e64eeedd49cc2db5a3fdb Author: kevin Date: Sun Feb 24 21:43:08 2019 +0800
回退版本(git reset --hard HEAD^)。用HEAD表示當前版本,則HEAD^就是上個版本,HEAD^表示上上個版本,HEAD~100表示上一百個版本,“241f77158c2d59b0b10e482b74a24150a0bebeb4”指的是版本的id,我們要回退到指定版本是只需要id的前幾位就行,但最好5位以上。回退指定版本(git reset --hard f953c)。
查看所有分支的版本操作記錄(git reflog)。當你用$ git reset --hard HEAD^回退到以前版本時,再想恢復到append GPL,就必須找到append GPL的commit id,通過git reflog就可以append GPL的commit id了。
241f771 (HEAD -> master) HEAD@{0}: reset: moving to 241f771 f953ccc HEAD@{1}: reset: moving to HEAD^ 241f771 (HEAD -> master) HEAD@{2}: commit: update document.md f953ccc HEAD@{3}: commit (amend): add first file bd07a32 HEAD@{4}: commit (amend): add first file 98f7467 HEAD@{5}: commit (initial): add first file修改管理
Git 并不跟蹤與文件相關的文件名和目錄名,而是跟蹤的是文件的內容,查看Git 追蹤內容詳解。因此文件的每一次修改,都需要git add添加到暫存區,然后在commit到版本庫。
修改撤銷(git checkout -- README.md)。這里有兩種情況:一種是README.md自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;一種是readme.txt已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。總之,就是讓這個文件回到最近一次git commit或git add時的狀態。
刪除文件。工作區直接刪除文件,提交到版本庫。
遠程倉庫為了能在任意 Git 項目上協作,你需要知道如何管理自己的遠程倉庫。 遠程倉庫是指托管在因特網或其他網絡中的你的項目的版本庫,例如github、gitlab、碼云或者你自己用服務器搭建的遠程倉庫。 你可以有好幾個遠程倉庫,通常有些倉庫對你只讀,有些則可以讀寫。 與他人協作涉及管理遠程倉庫以及根據需要推送或拉取數據。 管理遠程倉庫包括了解如何添加遠程倉庫、移除無效的遠程倉庫、管理不同的遠程分支并定義它們是否被跟蹤等等。
創建SSH Key 。在用戶目錄下查看有沒有.ssh文件目錄(電腦需要顯示隱藏文件),如果有再查看有沒有id_rsa(私匙)和id_rsa.pub(公匙)。有直接跳過第一步,沒有則創建SSH Key,郵箱換成你自己的郵箱,一路回車即可。
$ ssh-keygen -t rsa -C "youremail@example.com"上傳公鑰
登陸GitHub,打開“Account settings”,“SSH Keys”頁面;然后,點“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內容。
注:Github通過公鑰識別你的身份,確認只有你自己才能推送。GitHub允許你添加多個Key,如果有多臺電腦,把電腦的公鑰都添加到Github上,這樣不管用哪臺電腦都可以向Github推送代碼了。
添加遠程庫。在github上創建一個project,在Repository name填入項目名(Git),其他保持默認設置,點擊“Create repository”按鈕,就成功地創建了一個新的Git倉庫。
目前,在GitHub上的這個Git倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然后,把本地倉庫的內容推送到GitHub倉庫。
現在,我們根據GitHub的提示,在本地的Git倉庫下運行命令:
$ git remote add origin git@github.com:dahuazheng/Git.git
注:dahuazheng為你github的賬戶名
添加遠程倉庫后,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫,接下來把本地庫的所有內容推送到遠程庫上:
$ git push -u origin master
把本地庫的內容推送到遠程,用git push命令,實際上是把當前分支master推送到遠程。
由于遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。
克隆遠程倉庫(git clone)Git支持多種協議,默認使用ssh,也可以使用https等其他協議。通過ssh支持的原生git協議速度最快。使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內部就無法使用ssh協議而只能用https。
使用ssh示例
$ git clone git@github.com:dahuazheng/vue-note.git
使用https示例
$ git clone https://github.com/dahuazheng...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102306.html
摘要:分支的創建合并與刪除創建分支與切換分支或者命令加上參數表示創建并切換。或者后面不跟分支名時指列出所有分支,當前分支前面加。刪除分支刪除本地分支,不能在當前分支執行刪除當前分支的操作。 分支的創建、合并與刪除 創建分支與切換分支 $ git branch develop$ git checkout develop 或者 $ git checkout -b develop git che...
摘要:綜上,一個好的教程應該是通俗易懂,由淺入深,全面詳盡的展示知識內容,展現出全面的知識輪廓知識體系,以及學習該教程所需要的知識水平,并且給出建議,和學習其它知識的渠道。這才是對讀者,對知識負責任的態度。 現在網絡發達,網上資料多,查閱方便,所以網上學習的確是一種很好的途徑,但是網上的資料很多都呈碎片化的,并且質量良莠不齊,有的還有時效性,錯誤性等問題。很多原因往往給學習者帶來很大的困擾,...
摘要:編程書籍的整理和收集最近一直在學習深度學習和機器學習的東西,發現深入地去學習就需要不斷的去提高自己算法和高數的能力然后也找了很多的書和文章,隨著不斷的學習,也整理了下自己的學習筆記準備分享出來給大家后續的文章和總結會繼續分享,先分享一部分的 編程書籍的整理和收集 最近一直在學習deep learning深度學習和機器學習的東西,發現深入地去學習就需要不斷的去提高自己算法和高數的能力然后...
閱讀 2924·2021-11-23 09:51
閱讀 3099·2021-11-15 11:39
閱讀 2979·2021-11-09 09:47
閱讀 2527·2019-08-30 13:49
閱讀 2113·2019-08-30 13:09
閱讀 3092·2019-08-29 16:10
閱讀 3504·2019-08-26 17:04
閱讀 984·2019-08-26 13:57