本章學習:
- 1)熟悉github網站
- 2)通過git命令遠程管理github,
- 3)git命令使用ssh key密鑰無需輸入賬號密碼
1.首先我們來熟悉github網站
1.1 注冊github
登錄http://github.com/,然后點擊sign up,來注冊賬戶:
注冊好了,以及驗證郵箱后,然后進入github主頁:
1.2點擊start a project(啟動第一個項目)
1.3創建好后,就會跳轉到剛剛創建好的test2倉庫(項目)主頁,如下兩張圖所示
- 圖1:
- 圖2:
先來介紹下上圖常用的幾個單詞
- repostory
倉庫,也就是項目的意思,有多個項目就代表有多個倉庫
- star
收藏項目,收藏的數目越多,說明項目越好
- fork
將源作者的項目克隆一份到自己的項目中
- pull request
拉請求,指如上圖的pull request.
比如:別人通過fork你的項目后,並改進了項目,向你發送了new pull request請求,
然后你點擊pull request按鈕,進去后,會出現如下圖所示:
再點擊Merge pull request,則可以將改進的內容合並到自己的項目里,
- watch
關注項目,當你關注的某個倉庫更新時,便會通知在你的github主頁上
- lssues
問題,點擊進去就可以看到所有人提出的問題,比如項目有bug等.
當自己想發表問題時,則點擊lssues->new lssues,如下圖所示:
1.4接下來,我們點擊倉庫主頁的create new file,來創建一個文件:
提交后,便會返回我們test2倉庫主頁里:
然后點擊commits提交按鈕,便可以看到剛剛創建main.c的詳細信息:
PS:當我們錯誤刪除了一個文件,也可以通過commits按鈕,來找到以前刪除的文件
1.5 學習如何來更改倉庫名稱和刪除倉庫
在倉庫主頁里點擊settings(倉庫設置),如下圖所示(以test3為例):
然后便會跳轉到下個界面,就可以更改倉庫名稱了:
繼續往下翻,就可以找到刪除倉庫了:
2.使用git管理github
2.1安裝git
下載地址:https://www.git-scm.com/download/win
(若慢的話,則進入http://www.wmzhe.com/soft-38801.html下載)
下載好后,直接默認安裝即可,若只喜歡命令行模式,則在組件界面取消git gui here即可,如下圖所示:
安裝好后,如下圖所示,即可通過linux命令來操作git命令:
若在linux上安裝git,直接輸入:
apt-get install git
(linux下載時,若出現error:403,可以試試vi /etc/resolv.conf,將nameserver地址改為: 114.114.114.114)
2.2 配置git
git config --global user.name "lifeyx" //個人賬號 git config --global user.email 123456@qq.com //個人郵箱地址
上面的--global選項,表示以后管理git庫時,默認使用上面的用戶信息,也可以通過git config -l 來查看配置信息
2.3 git命令介紹
1)介紹之前,首先來講解下git的3個區域如下圖所示
上圖的git倉庫,是指本地倉庫,不會更新到遠程倉庫(github網頁上的倉庫),需要使用git push -u origin master命令才行
2)然后來講解下git常用命令
git init
對當前目錄進行git管理,該目錄便會成為工作區,並在當前目錄下會出現個.git隱藏目錄.
該.git里會保存git所需要的數據和資源,也就是git倉庫和暫存區都會保存在.git里
git clone https://github.com/lifeyx/test2.git
克隆復制遠程倉庫到當前目錄,生成test2文件夾,里面會自動創建.git目錄,並保存遠程倉庫信息
該遠程倉庫地址通過下圖的紅框里獲取:
git status
查看工作目錄下文件的狀態,是否add添加到了暫存區,以下圖為例:
git add file
將工作區修改的文件添加到暫存區,也可以使用git add . 將所有修改的文件進行添加
git rm file
將暫存區的文件刪除掉,若工作區文件存在,則需要使用git rm -f file來強制刪除掉
git commit -m “提交描述”
將暫存區里的文件提交到本地倉庫,若暫存區某個文件被刪除掉,則會刪除倉庫里的文件
git commit -am “提交描述”
-a:跳過暫存區,git自動將工作區里記錄的所有文件添加到暫存區並一起提交,從而跳過git add步驟
git reset HEAD^1
撤銷commit,如果想修改commit時的文件,則使用上面命令撤銷
git remote add origin https://github.com/lifeyx/test3.git
添加遠程倉庫(origin),也就是關聯本地倉庫和github倉庫,該遠程倉庫地址通過下圖的紅框里獲取:
git push origin master
推送(同步)數據到遠程倉庫,若是本地上傳,必須先使用上個命令來指定遠程倉庫地址(origin),
若是從遠程倉庫克隆復制的,則不需要,因為.git里會自動保存遠程倉庫地址.
2.4 git管理遠程倉庫-實例1
實例1步驟,通過創建新的遠程倉庫,然后將本地的數據推送(同步)到遠程倉庫里
1)首先創建新的遠程倉庫,以test3為例
然后找到遠程倉庫地址為: https://github.com/lifeyx/test3.git
2)進入github命令行,輸入
mkdir test3 cd test3 echo "項目描述test3" >> README.md git init //初始化git vi 1.txt //創建1.txt git add README.md //添加README.md git add 1.txt //添加1.txt git commit -m "第一次提交文件" //提交到本地倉庫 git remote add origin https://github.com/lifeyx/test3.git //連接遠程倉庫地址 git push origin master //上傳到遠程倉庫地址,並輸入賬號密碼
3)查看結果
2.5 git管理遠程倉庫-實例2
實例2步驟,就是通過克隆來將遠程倉庫下載到本地,然后本地修改數據后,並推送(同步)數據到遠程倉庫
1)通過以前的遠程倉庫test2為例
如下圖所示,可以看到test2倉庫更新時間都是處於1天前的:
然后通過上圖的綠色按鈕,找到test2地址為: https://github.com/lifeyx/test2.git
2)進入github命令行,輸入
git clone https://github.com/lifeyx/test2.git //下載test2倉庫 cd test2 //進入倉庫 vi 1.txt //創建1.txt git add 1.txt //添加1.txt git commit -m "第二天提交文件" //提交到本地倉庫 git push origin master //上傳到遠程倉庫地址,並輸入賬號密碼
PS:
由於git clone會自動生成.git隱藏目錄,所以上面無需git init命令初始化。
而且.git目錄里保存了遠程倉庫地址,所以上面無需git remote命令連接遠端。
3)查看結果
3.每次上傳到遠程倉庫地址時,都要輸入賬號密碼,是不是很麻煩?
接下來便通過ssh key密鑰,使主機與服務器連接連接, 這樣就不用每次輸入賬號密碼
3.1生成ssh key
首先通過ls ~/.ssh命令,查看是否已有ssh key,若有的話,先備份,然后通過rm -rf ~/.ssh來刪除
1)輸入,創建密鑰
ssh-keygen -t rsa -C "123456@qq.com" // "..."里輸入郵箱號
2)然后會提示設置密碼,直接連按3個回車,表示密碼為空
3)將新生成的key添加到ssh-agent中
eval "ssh-agent -s" ssh-add ~/.ssh/id_rsa
4)若顯示Could not open a connection to your authentication agent.,則繼續輸入
ssh-agent bash
ssh-add ~/.ssh/id_rsa
如下圖所示,出現Identity added字段,則表示寫入成功,ssh key公鑰便保存在id_rsa.pub文件中了:
5)然后通過cat ~/.ssh/id_rsa.pub 將ssh key公鑰打印出來,並復制
3.2將復制的ssh key公鑰添加到github中
跳轉頁面后,title標題隨意寫,將ssh key復制到key框里即可
3.3測試ssh key
輸入ssh git@github.com,如下圖所示,顯示Hi youname! ,則表示成功了
3.4成功后,就可以使用git協議來下載倉庫. 還是以test2倉庫為例
1)首先查看test2倉庫的ssh協議的地址(之前是http協議地址)
如上圖所示,點擊紅框后, 前綴https://變為了git@
2)然后進入github命令行,來測試
git clone git@github.com:lifeyx/test2.git //下載test2倉庫 cd test2 //進入倉庫 vi 2.txt //創建2.txt git add 2.txt //添加2.txt git commit -m "第二天提交文件" //提交到本地倉庫 git push origin master //無需輸入密碼來上傳
4.git管理倉庫
打補丁:
git diff > new.patch
如果是當前倉庫有了新文件,想把新文件也打進補丁(新文件必須需要git add之后才行),則輸入:
git diff --cached > new.patch
查看狀態:
Git status
查看本地修改的哪些東西
git diff Makefile //以查看上圖的Makefile為例
添加暫存區
git add kernel/arch/mips/xburst/soc-x1000/chip-x1000/ap60pro/ap60pro/board.h //添加到暫存區 git add . //添加所有修改過的文件
撤回修改過的文件
git checkout Makefile //撤回Makefile的修改,如果是之前不存在的文件,則會撤銷失敗
將暫存區里的文件撤回到 修改文件中
git reset HEAD u-boot/drivers/video/jz_lcd/jz_lcd_v13.c //將jz_lcd_v13.c從暫存區撤銷掉
提交到本地倉庫
git commit -m "ap60pro update: compatible with old and new screens" //添加到本地倉庫(但未上傳) -m 后面跟提交的信息描述
撤銷commit提交
git reset HEAD^1
同步遠程倉庫(當別人在遠程倉庫進行修改后,本地沒有更新時)
git pull --rebase origin master
上傳遠程倉庫
git push origin master //上傳遠程倉庫,由於是使用git clone,所以不需要使用git remote連接遠程倉庫 //如果git push失敗,打印: error: failed to push some refs to 'git@192.168.1.8:X1000.git',則使用git pull 同步一次
查看提交遠程倉庫的歷史記錄
tig //如下圖所示:
其中” [master] {origin/master} {origin/HEAD} Merge branch 'master' of 192.168.1.8:X1000”,是使用git pull解決分支不同(Merge branch)時候提交的
如果想查看提交的某一次具體信息,也可以使用”git show [hash值]“來查看
git show示例:
1)通過tig,找到近期提交一次的記錄hash值:
2)使用git show 17c7a097834439d0e9bf659e5e71ce313832c032,便可以查看具體提交的內容了
git pull如果打印error: You have not concluded your merge (MERGE_HEAD exists).時
1. 直接commit,再提交一次,之后再pull或merge就可以順利進行。
2.放棄本地其它修改,直接覆蓋,輸入:
git reset --hard
git pull
查看每一行是哪次提交最后修改的
git blame filename
列出文件的所有修改記錄
git log -p filename