當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Git入門之Git實(shí)例操作
要點(diǎn)一覽:
· 1.工作場(chǎng)景介紹
· 2.操作介紹
· 3.總結(jié)
1.工作場(chǎng)景介紹
本文實(shí)現(xiàn)一個(gè)本地代碼管理,和實(shí)現(xiàn)遠(yuǎn)程代碼提交的教程!
我們實(shí)現(xiàn)對(duì)本地文件的版本管理,以及遠(yuǎn)程推送和分支管理!
2.操作介紹
我們先創(chuàng)建一個(gè)本地代碼倉(cāng)庫(kù):
命令:
$git init
//初始化代碼庫(kù),作為我們本地代碼的倉(cāng)庫(kù)
接下來(lái)我們就來(lái)開(kāi)始自己的工作:
【1】、初始化一個(gè)倉(cāng)庫(kù)
首先先自己創(chuàng)建一個(gè)工作目錄:
$mkdir work_space
進(jìn)入該目錄,獲得代碼庫(kù):
$git clone <本地代碼庫(kù)路徑>
$git clone <本地代碼庫(kù)路徑> <目標(biāo)目錄名>
實(shí)例如下:
命令1:
$git clone <代碼庫(kù)路徑>
命令2: 可以自己制定本地代碼庫(kù)路徑,如果該路徑不存在時(shí),則會(huì)自動(dòng)創(chuàng)建
$git clone <代碼庫(kù)路徑>
此時(shí)我們就獲得了一個(gè)自己的代碼庫(kù),之后我們就可以在其中進(jìn)行自己的開(kāi)發(fā),可以借助于git實(shí)現(xiàn)自己的代碼管理了:
這兩個(gè)目錄類似于兩個(gè)開(kāi)發(fā)人員
自己可以選擇一個(gè)進(jìn)入,進(jìn)行操作
我們進(jìn)入mygit目錄,此時(shí)我們可以先查看一下當(dāng)前的倉(cāng)庫(kù)狀態(tài)信息:
上面提示,當(dāng)前倉(cāng)庫(kù)沒(méi)有任何要提交的東西,上圖中關(guān)于分支的概念我們?cè)诤竺鏁?huì)進(jìn)行說(shuō)明!
沒(méi)有認(rèn)可東西提交是,因?yàn)槲覀儧](méi)有編寫任何文件,這里我們就編輯一個(gè)文件,
程序很簡(jiǎn)單: 實(shí)現(xiàn)一個(gè)加法的操作
/*main.c*/
#include
int add(int a,int b)
{
int c = a + b;
return c;
}
int main(int argc,const char * argv[])
{
int a = 10,b = 20;
printf(" a + b = %d\n",add(a,b));
return 0;
}
編譯后,我們通過(guò)git status 命令再來(lái)查看 倉(cāng)庫(kù)狀態(tài),如下圖所示:
從提示信息我們可以看到,main.c a.out 都是"未被跟蹤的文件",所謂”未被跟蹤的文件“即,還沒(méi)有納入git管理的文件
但是通常我們進(jìn)行代碼提交時(shí),或是代碼倉(cāng)庫(kù)不需要可執(zhí)行的文件,那么怎么辦呢!
git 提供了一種方式可以指定哪些類型的文件不被提交!
操作:
創(chuàng)建忽略文件
$ touch .gitignore
.gitignore文件中記錄要排除文件的名字,可以使用*、?、正則表達(dá)式
這是我們的.gitignore 文件的的內(nèi)容,如果還有需要忽略的可以在其中進(jìn)行添加
好,做好這些之后,我們可以來(lái)講我們的代碼添加到git的管理中了!
【2】、跟蹤文件
命令:
$git add .
這樣就實(shí)現(xiàn)了將我們的代碼加入git的版本管理中了!
現(xiàn)在我們實(shí)現(xiàn)的只是將
"工作目錄"下的內(nèi)容 --添加到-->暫存區(qū),但是還沒(méi)有 提交到"代碼倉(cāng)庫(kù)中"。
【3】、提交到代碼庫(kù)
命令:
$git commit -m ”提交信息“
查看提交記錄:
$git log
//只顯示提交信息的第一行
$git log --pretty=short
到現(xiàn)在我們基本上就完成對(duì)代碼的管理,但是這還不夠,我們優(yōu)勢(shì)需要在項(xiàng)目中添加新的功能,但是,有不影響原有的,此時(shí)我們需要借助于分支的功能的來(lái)實(shí)現(xiàn)
【4】、分支操作
分支操作的相關(guān)命令:
分支操作:
// 顯示分支
$git branch
// 創(chuàng)建分支
$git branch <分支名>
// 切換分支
$git checkout <分支名>
$git chechout - //切換到上一個(gè)分支
// 合并分支
$git merge --no-ff <分支名>
//刪除分支
$git branch -d <分之命名>
//分支重命名
$git branch -m <源分支名> <目標(biāo)分支名>
之后切換到該分支下,可以做自己的代碼開(kāi)發(fā)
我們?cè)谠摲种逻M(jìn)行了代碼的修改,此時(shí)查看倉(cāng)庫(kù)的狀態(tài)
之后我們進(jìn)行提交
命令:
// 一次性完成add 和 commit 操作
$git commit -am ”提交信息“
操作效果如下:
對(duì)比分支差異:
之后進(jìn)行分支合并操作:
命令:
//切換到主分支
$git cheout master
$git merge --no-ff my_branch
操作效果如下,合并之后有相應(yīng)的提示, --no-ff參數(shù)表示可以用普通模式合并,合并后的歷史有分支,能看出來(lái)曾經(jīng)做過(guò)合并,而fast forward合并就看不出來(lái)曾經(jīng)做過(guò)合并。
【5】、版本回溯
操作命令:
$git log //查看到當(dāng)前為止的歷史日志!
$git reflog //獲得操作歷史,查看sha值.
$git resetr --hard <哈希值> //只需要前幾位就可以
假如我們想回溯到 chang main.c 這個(gè)部分
當(dāng)前就回溯到了該版本。自己可以查看自己的源代碼進(jìn)行對(duì)比
【6】、遠(yuǎn)程操作
相關(guān)命令
$git remote
$git fetch
$git pull //獲取新的遠(yuǎn)程倉(cāng)庫(kù)分支
$git push //推送至遠(yuǎn)程倉(cāng)庫(kù)
首先我們現(xiàn)在 開(kāi)源的代碼托管網(wǎng)站上建立一個(gè)同名的項(xiàng)目
我之前已有賬號(hào),相關(guān)的注冊(cè)等教程可參考網(wǎng)上資源!
之后我們獲得地址:
git@git.oschina.net:smartIOT/mygit.git
首先需要為本地倉(cāng)庫(kù)添加一個(gè)遠(yuǎn)程倉(cāng)庫(kù)的地址:
$git remote add orgin git@git.oschina.net:smartIOT/mygit.git
之后進(jìn)行推送
$git push -u origin master
出現(xiàn)如下提示:
這是因?yàn)?git 鏈接方式我們使用的是ssh方式,需要公鑰的的驗(yàn)證
公鑰的添加方式如下,需要在我們的 開(kāi)源 的代碼托管賬戶中進(jìn)行添加!
SSH Keys
SSH key 可以讓你在你的電腦和 Git @ OSC 之間建立安全的加密連接。
你可以按如下命令來(lái)生成sshkey
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"# Creates a new ssh key using the provided email
# Generating public/private rsa key pair...
查看你的public key,并把他添加到 Git @ OSC //git.oschina.net/keys
cat ~/.ssh/id_rsa.pub
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
添加后,在終端(Terminal)中輸入
ssh -T git@git.oschina.net
若返回
Welcome to Git@OSC, yourname!
則證明添加成功。
添加之后我們進(jìn)行強(qiáng)制推送:
顯示已推送成功,之后到我們的 賬戶查看,顯示已經(jīng)提交上來(lái)了!
$git clone git@git.oschina.net:smartIOT/mygit.git
3.總結(jié)
1.主要熟悉,整個(gè)工作流程和操作流程,建立整體概念,方便后續(xù)的學(xué)習(xí)和深入!
2.git的相關(guān)命令
n git init
n git add
n git commit 配合
n git status 使用
n git branch
n git remote
n git log
n git relog
n git pull
n git push
git clone