1.git是分布式版本控制,沒有中央服務器,,每個人的電腦就是一個完整的版本庫,工作時不需要聯(lián)網。
? svn是集中版本控制,版本庫是集中放在中央服務器的,必須聯(lián)網才能工作。
2. git bash:Unix與Linux風格的命令行,使用最多,推薦最多
? ? git cmd:Windows風格的命令行
? ? git Gui:圖形界面的git,不建議初學者使用,盡量先熟悉常用命令
3.常用的Linux命令:
? ? cd :改變目錄
? ? cd . . :回退到上一個目錄,直接cd進入默認目錄
? ? pwd :顯示當前所在的目錄路徑
? ? ls(ll):都是列出當前目錄中的所有文件,只不過ll(兩個ll)列出的內容更為詳細。
? ? touch :新建一個文件,如touch index.js就會在當前目錄下新建一個index.js文件
? ? rm :刪除一個文件,rm index.js就會把index.js文件刪除
? ? mkdir :新建一個目錄,就是新建一個文件夾
? ? rm -r :刪除一個文件夾,rm -r src 刪除src目錄
? ? ? ? 注:rm -rf / 切勿在Linux中嘗試!刪除電腦中全部文件!
? ? mv 移動文件,mv index.html src index.html 是我們要移動的文件,src是目標文件夾,當然,
? ? ? ? 這樣寫必須保證文件和目標文件夾在同一目錄下
? ? reset重新初始化終端/清屏
? ? clear 清屏
? ? history 查看命令歷史
? ? help 幫助
? ? exit 退出
? ? #表示注釋
4.git配置:
? ? ? 查看配置:git config -l
? ? ? 查看不同級別的配置文件:
? ? ? ? ? 查看系統(tǒng)config?
? ? ? ? ? ? git config --system --list
? ? ? ? ? 查看當前用戶(global)配置
? ? ? ? ? ? git config --global --list
5.git基本理論:
? git本地有三個工作區(qū)域:工作目錄(Working Directory)、暫存區(qū)(Stage/Index)
? ? ? 資源庫(Repository或Git Dtrectory)再加上遠程git倉庫(Remote Directory)就四個
? ? Workspace:工作區(qū),就是你平時存放項目代碼的地方
? ? Stage/Index:暫存區(qū),用于臨時存放你的改動,事實上他只是一個文件,保存即提交到文本列表信息
? ? Repository:倉庫區(qū)(或本地倉庫),就是安全存放數據的位置,這里面有你提交到
? ? ? ? ? ? ? ? ? ? ? ? 所有版本的數據,其中HEAD指向最新放入倉庫的版本
? ? Remote:遠程倉庫,托管代碼的服務器,可以簡單的認為是你項目中的一臺電腦用于遠程數據交換
? ? .git:存放Git管理信息的目錄,初始化倉庫的時候自動創(chuàng)建
? ? Local Repo:本地倉庫,一個存放在本地的版本庫;HEAD會只是當前的開發(fā)分支(branch)
? ? Stash:隱藏,是一個工作狀態(tài)保存棧,用于保存/恢復WorkSpace中的臨時狀態(tài)
6.工作流程:
? ? git的工作流程一般是這樣的:
? ? ①、在工作目錄中添加、修改文件;
? ? ②、將需要進行版本管理的文件放入暫存區(qū)域;
? ? ③、將暫存區(qū)域的文件提交到git倉庫。
? ? 因此,git管理的文件有三種狀態(tài):已修改(modified),已暫存(staged),已提交(committed)
7.創(chuàng)建工作目錄與常用指令:
? ? ? add、commit、push、pull、feach/clone、chekout
? ? ? git add .? ? ? ? ? ? ? ? ? 添加所有文件到暫存區(qū)? git add -A。(-A表示所有修改的文件)
? ? ? git commit -m "消息內容"? ? 提交暫存區(qū)中的內容到本地倉庫 -m 提交信息
? ? ? git push? 提交到遠程倉庫
8.本地倉庫搭建:
? ? ? 創(chuàng)建本地倉庫的方法有兩種:一種是創(chuàng)建全新的倉庫,另一種是克隆遠程倉庫
? ? ? ①創(chuàng)建全新的倉庫,需要用GIT管理的項目的根目錄執(zhí)行:
? ? ? ? ? 在當前目錄新建一個Git代碼庫
? ? ? ? ? ? ? git init
? ? ? ②克隆遠程倉庫
? ? ? ? ? ? ? git clone 【url】
9.文件的四種狀態(tài):
? ? ? Untracked: 未跟蹤, 此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add 狀態(tài)變?yōu)镾taged.
? ? ? Unmodify: 文件已經入庫, 未修改, 即版本庫中的文件快照內容與文件夾中完全一致. 這種類型的文件有兩種去處,
? ? ? ? ? ? ? ? ? ? ? ? 如果它被修改, 而變?yōu)镸odified. 如果使用git rm移出版本庫, 則成為Untracked文件
? ? ? Modified: 文件已修改, 僅僅是修改, 并沒有進行其他的操作. 這個文件也有兩個去處, 通過git add可進入暫存
? ? ? ? ? ? ? ? ? ? ? staged狀態(tài), 使用git checkout 則丟棄修改過, 返回到unmodify狀態(tài), 這個git checkout即從庫中
? ? ? ? ? ? ? ? ? ? ? 取出文件, 覆蓋當前修改 !
? ? ? Staged: 暫存狀態(tài). 執(zhí)行git commit則將修改同步到庫中, 這時庫中的文件和本地文件又變?yōu)橐恢? 文件為Unmodify
? ? ? ? ? ? ? ? ? ? 狀態(tài). 執(zhí)行git reset HEAD filename取消暫存, 文件狀態(tài)為Modified
10.查看文件狀態(tài):
? ? ? 上面說到的四種狀態(tài)可以通過命令來查看文件的狀態(tài)
? ? ? ? ? 查看指定文件狀態(tài):
? ? ? ? ? ? ? ? git status 【filename】
? ? ? ? ? 查看所有文件狀態(tài):
? ? ? ? ? ? ? ? git status?
11.忽略文件:
? ? ? 有些時候我們不想把某些文件納入版本控制中,比如數據庫文件,臨時文件,設計文件等
? ? ? 在主目錄下建立".gitignore"文件,此文件有如下規(guī)則:
? ? ? ? ? ? 忽略文件中的空行或以井號(#)開始的行將會被忽略。
? ? ? ? ? ? 可以使用Linux通配符。例如:星號(*)代表任意多個字符,問號(?)代表一個字符,方括號([abc])
? ? ? ? ? ? ? ? ? 代表可選字符范圍,大括號({string1,string2,...})代表可選的字符串等。
? ? ? ? ? ? 如果名稱的最前面有一個感嘆號(!),表示例外規(guī)則,將不被忽略。
? ? ? ? ? ? 如果名稱的最前面是一個路徑分隔符(/),表示要忽略的文件在此目錄下,而子目錄中的文件不忽略。
? ? ? ? ? ? 如果名稱的最后面是一個路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非文件(默認文件或目錄都忽略)。
12.使用碼云:
? ? ? ? 1.注冊登錄碼云,完善個人信息
? ? ? ? 2.設置本機綁定SSH公鑰,實現(xiàn)免密碼登錄(碼云是遠程倉庫,我們平時工作在本地倉庫)
? ? ? ? ? ? 生成公鑰命令:ssh-keygen? (ssh-keygen -t rsa)
? ? ? ? 3.將公鑰信息public key添加到碼云賬戶中即可
? ? ? ? 4.使用碼云創(chuàng)建一個自己的倉庫
? ? 有道無術、術尚可求。有術無道、止于術!
13.git分支:
? ? ? ? 列出所有本地分支
? ? ? ? ? ? git branch
? ? ? ? 列出所有遠程分支
? ? ? ? ? ? git branch -r
? ? ? ? 新建一個分支,但依然停留在當前分支
? ? ? ? ? ? git branch 【branch-name】
? ? ? ? 新建一個分支,并切換到該分支
? ? ? ? ? ? git chekout -b 【branch】
? ? ? ? 合并指定分支到當前分支
? ? ? ? ? ? git merge 【branch】
? ? ? ? 刪除分支
? ? ? ? ? ? git branch -d 【branch-name】
? ? ? ? 刪除遠程分支
? ? ? ? ? ? git branch -dr 【remote/branch】